上一部分介绍了数据导入部分,有需要的可以移步:
接下来就进入 QTL 分析的部分了。
在 QTL 分析中,最常使用的是 interval mapping 的方法。不过在介绍 interval mapping 之前,先介绍一种简单的方法,以更好地了解 QTL 分析的原理。
1. Marker regression
简单来说,就是单独地考虑每个标记,根据标记处的基因型将个体分组,并比较各组之间表型的差异。虽然这种方法不常用,但提供了一个思考并描述 QTL mapping 中基本问题的框架。
具体来说,回交群体内通过 t 检验来判断标记和 QTL 的关联,而杂交群体内则是则是通过 ANOVA 给出的 F 值。
衡量 QTL 存在可能性的值为 LOD,该指标的含义为该位点存在 QTL 的可能性比上不存在 QTL 的常用对数。举例来说:如果 LOD 值为 2 则表示该位点含 QLT 的概率是不含 QTL 概率的 100 倍。
该方法最大的优势就是简单,只需要对每个标记执行 t 检验或者 ANOVA。但是,一个关键的缺点就是必须忽略标记缺失的个体;此外不能检查标记之间的位置,而且关于 QTL 位置的信息很少;而且 QTL 的效应会由于其于标记的不完全连锁而减弱。
另外,标记回归最重要的缺点是仅考虑单个 QTL 的存在,会造成分离连锁 QTL 的能力有限,也无法评估 QTL 之间可能的相互作用。不过在单个 QTL 分析中的其它方法(包括区间作图)也都有这个缺点,这个后面再说。
2. Interval mapping
Interval mapping 可以细分为几种方法,区别在于对于缺失标记的处理上有所不同。
Standard interval mapping 是在混合模型下进行最大似然估计;Haley–Knott regression methods 是对混合模型使用近似;The multiple imputation method 同样使用混合模型,但使用了 multiple imputation 代替最大似然。
接下来就是计算了。
# R/qtl 分析要求标记位置不能完全一样,所以需要使用 jittermap 将标记进行轻微移动。
hyper <- jittermap(hyper)
# calc.genoprob 会计算基因型概率,填充到标记之间, step 设置步长,单位是 cM,步长确定了后期 QTL 定位的密度。
hyper <- calc.genoprob(hyper, step=1, error.prob=0.001)
# 通过 scanone 进行 QTL 扫描,默认方法为 EM algorithm;可以通过 method 选项修改为 Haley–Knott regression (hk) 或 Extended Haley–Knott regression (ehk)。
out.em <- scanone(hyper)
out.hk <- scanone(hyper, method="hk")
out.ehk <- scanone(hyper, method="ehk")
# 进行绘图展示
plot(out.em, ylab="LOD score")
可以将不同方法的结果绘制到一张图上进行比较:
plot(out.em, out.hk, out.ehk, chr=c(1,4,15), ylab="LOD score", lty=c(1,1,2))
如果使用 multiple imputation 方法,需要先使用 sim.geno 执行 imputations:
hyper <- sim.geno(hyper, step=1, n.draws=64, error.prob=0.001)
out.imp <- scanone(hyper, method="imp")
plot(out.em, out.imp, chr=c(1,4,15), col=c("blue", "red"), ylab="LOD score")
不同方法有着各自的优缺点,从对基因型数据的要求,到计算速度,如下表所示:
3. Significance thresholds
什么样的 LOD 值是合适的?R/qtl 提供了一种 permutation test,可以得到 LOD 值大小的显著性阈值
data(hyper)
hyper <- calc.genoprob(hyper, step=1, error.prob=0.001)
operm <- scanone(hyper, n.perm=1000, verbose=FALSE)
summary(operm, alpha=c(0.20, 0.05))
该检验可以和 scannone 一同使用,得到大于显著性阈值的标记信息:
summary(out.em, perms=operms, alpha=0.1, pvalues=TRUE)
4. Interval estimates of QTL location
目的很单纯,在发现染色体上存在 QTL 的证据后,就要确定其可能存在的区间范围(假设每条染色体上仅存在一个 QTL)。估计方法有两种:LOD support intervals 和 Bayes credible intervals。
如果 LOD 值下降后又回升,会得到一组不相交的区间,一般采取保守的方法取较宽的区间。
其中,回交群体内一般使用 1.5-LOD support intervals,而杂交群体则是 1.8-LOD support intervals。
两种方法估计的函数分别为 lodint 和 bayesint。计算 1.5-LOD support 和 95% Bayes credible intervals 为例:
lodint(out.em, 4, 1.5)
bayesint(out.em, 4, 0.95)
其中第一行为区间开始位置 ,第三行为区间结束位置,中间一行是QTL的预估位置。
5. QTL effects
QTL 的效应值是通过不同基因型组之间的表型差异计算得到的。
就以上面 4 号染色体上的位点为例进行计算:
effectplot(hyper, mname1="D4Mit164")
plotPXG(hyper, marker="D4Mit164")
eff <- effectplot(hyper, mname1="D4Mit164", draw=FALSE)
eff
这一块在 multiple-QTL 的地方会进一步讲,这里就是先了解一下。
6. Multiple phenotypes
在有多个表型的时候,可以通过 pheno.col 指定表型,比如:
out.logliver <- scanone(iron, pheno.col=3)
out.all <- scanone(iron, pheno.col=1:4)
其中,summary.scanone 默认展示的是第一列表型的结果,可以使用 lodcolum 进行指定,format="allpheno" 命令可以指定展示所有大于阈值的标记:
summary(out.all, threshold=3, lodcolumn=4)
summary(out.all, threshold=3, format="allpheno")
operm.all <- scanone(iron, pheno.col=1:4, n.perm=1000)
summary(out.all, format="allpeaks", perms=operm.all, alpha=0.05, pvalues=TRUE)
这一块大概就是这么多内容。
后面还会介绍
码字不易,如有转载,请标明来源。
另,欢迎评论区交流,有用的话点个赞也是极好的。
网友评论