在此之前,仅仅考虑了一维的基因组扫描,但是多数复杂性状都是多个遗传位点共同作用的结果,不同位点之间可能存在连锁或者上位性。而这一部分开始考虑 QTL 之间的连锁和相互作用。
通过考虑较大效应的QTL,可以减少残差变异,从而更好地识别效应较小的QTL;通过比较双 QTL 模型和最佳单 QTL 模型的拟合,可以较好地分离连锁 QTL;另外,QTL 之间的上位性只能通过考虑多个 QTL 的模型来实现。
在此之前,有需要的可以看一下前面几篇内容:
R/qtl 定位分析(三)Single-QTL analysis
R/qtl 定位分析(四)Non-normal phenotypes
首先考虑符合正态分布的性状的 two-dimensional genome scans。
1. 原理
假设基因组上存在 2 个 QTL,它们可能出现在基因组上的任何位置,考虑以下 4 种模型:

可以看出,Hf 考虑了 QTL 之间的相互作用;Ha 仅考虑了两个 QTL 之间的加性效应;H1 仅考虑单个 QTL 存在的情况;H0 考虑了不存在 QTL 的情况。
为比较表型和标记之间的关系对于上述 4 种模型的拟合情况,定义了 LOD 得分来衡量:

LODf,衡量了 full two-locus model 相较于 null model 对于拟合的提升,在考虑了相互作用的情况下表明至少一个 QTL 存在的证据。
LODa 衡量了 the two-locus additive model 对拟合的提升,并在假设没有相互作用的情况下,至少有一个 QTL 的证据。
LODi 衡量了 full model 优于 additive model 的拟合,表明了相互作用的证据。
LOD1仅表示了一维单 QTL 扫描的得分。
这些 LOD 得分可能不好解释。如果一个位置 s0 处存在 QTL,那么 LOD1(s0) 会很大,而 LODf(s0, t) 和 LODa(s0, t) 对于任何 t 都会很大。
重要的是对第二个 QTL 存在的证据进行评估,即双 QTL 模型是否比单 QTL 模型提供了足够好的拟合。
因此,可以关注单个染色体或一对染色体(两条染色体分别用 j 和 k 表示,二者可以相等),每一对染色体最大的 LOD 得分可以计算:

进一步可以计算如下的 LOD 得分:

Mi(j, k) 为假设两条染色体上各存在一个 QTL,或单条(j=k)染色体上存在两个 QTL ,两个 QTL 之间相互作用的证据;
Mfv1(j, k) 是允许上位效应的情况下,第二个 QTL 存在的证据;
Mav1(j, k) 是假设没有上位效应的情况下,第二个 QTL 存在的证据。
因此,在 two-QTL 基因组扫描中,将着重关注如下 5 个 LOD 得分的分布,通过模拟可以获得每一个得分的阈值,在满足以下任一条件时则报告:

2. 计算
这一计算是通过 scantwo 函数完成的。需要注意的是,这一步的计算量增加会很多。
library(qtl)
data(hyper)
hyper <- calc.genoprob(hyper, step=2.5, err=0.001) # step设置为了更快的计算速度
out2 <- scantwo(hyper, verbose=FALSE)
上述计算结果的一系列绘图分析就不展示和解释了,主要还是不同 LOD 得分之间的绘图比较,而且也不好解释,这里直接使用 summary 来看一下结果。
summary(out2, thresholds=c(6.0, 4.7, 4.4, 4.7, 2.6))
# 这里的阈值使用的是小鼠回交模拟得到的 95% 分位的阈值。

其中,pos1f, pos2f 分别表示在 full model 下估计的两个 QTL 的位置;pos1a, pos2a 分别表示在 additive model 下估计的两个 QTL 的位置;
结果可以发现,1 和 4 号染色体上存在一对 QTL,但二者之间没有相互作用(Mi = 0.305);而 6 和 15 号染色体明显存在一对 QTL,但只在允许相互作用的情况下存在(Mfv1 = 5.4 and Mav1 = 1.9),并且不同模型下的位置相差很大。
一般来说,我们最好还是基于自己的数据情况通过模拟得到不同 LOD 得分的阈值。命令很简单,就是比较耗时:
operm2 <- scantwo(hyper, n.perm=1000)
summary(operm2)

summary(out2, perms=operm2, alphas=c(0.2, 0.2, 0, 0.2, 0.2), pvalues=TRUE)


结果相较之前,在 3 号染色体多了一对紧密连锁的 QTL,不过由于位置过近,可能是 artifact。为降低这种 artifact 可能性,可以在 scantwo 函数中增加 clean.output=TRUE 参数。
summary(clean(out2), perms=operm2, alphas=c(0.2, 0.2, 0, 0.2, 0.2))
该案例中结果并没有改变。
大多数 QTL 在单 QTL 扫描中就可以得到,但双 QTL 扫描对于那些参与上位性相互作用的 QTL 有较好的识别,以及可以识别连锁的 QTL。
网友评论