R/qtl是一个可扩展的、交互的、用于QTL定位的R包,集数据分析和绘图于一体。特点是使复杂的QTL定位方法被广泛使用,使用户专注于建模而不是计算。
在网页下部还有一块,是其他常用的QTL定位软件,都可以了解一下。
官方说明书(简易版):
https://rqtl.org/tutorials/rqtltour2.pdf
还有详细的说明书,专门对Rqtl的原理进行了介绍,遗传学知识非常丰富,有时间的话强烈建议把这本书看完,绝对受益匪浅。
A Guide to QTL Mapping with R/qtl
这篇帖子就只介绍一下最基础的用法,想了解更多,还是自己去看说明书哈!
0. 准备工作
安装:
> install.packages("qtl")
调用:
> library(qtl)
1. 数据格式:
官方各格式示例数据:
https://rqtl.org/sampledata/
基因型和表型数据整理在一张以逗号分隔的csv文件中,以样本ID为界限,ID前为表型值,ID后为基因型。
前几列为表型值,一种表型一列;
sex:性别
ID:sample名称,注意表型,基因型,ID都要对应
后几列为基因型。
其中表型和基因型是必须的,其余可有可无。
基因型格式:
第一行:maker名
第二行:染色体编号
第三行:maker所在的位置
第四行之后为基因型
这篇帖子中用到的示例数据是:
https://rqtl.org/sampledata/listeria.csv
2.读取数据
> listeria.a <- read.cross("csv", ".", "listeria.csv")
3. 数据完整性检查
> summary(listeria.a)
F2 intercross
No. individuals: 120
No. phenotypes: 3
Percent phenotyped: 96.7 100 100
No. chromosomes: 20
Autosomes: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
X chr: X
Total markers: 133
No. markers: 13 6 6 4 13 13 6 6 7 5 6 6 12 4 8 4 4 4 4 2
Percent genotyped: 88.5
Genotypes (%):
Autosomes: AA:25.8 AB:48.9 BB:24.4 not BB:0.0 not AA:0.9
X chromosome: AA:51.7 AB:48.3
从summary中可以看到,共有120个样本,19条常染色体,一条性染色体。
有许多简单的函数可以提取汇总信息:
> nind(listeria.a) #样本数
[1] 120
> nchr(listeria.a) #染色体数
[1] 20
> totmar(listeria.a) #标记数
[1] 133
> nmar(listeria.a) #每条染色体上的标记数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 X
13 6 6 4 13 13 6 6 7 5 6 6 12 4 8 4 4 4 4 2
> nphe(listeria.a) #表型数
[1] 3
4. 汇总信息画图
> pdf("summary_plot.pdf",width=8,height=10)
> plot(listeria.a)
> dev.off()
上述图的各个部分可以分别按如下方式得到:
# 缺失基因型数据
> plotMissing(listeria.a)
# 绘制遗传图谱
> plotMap(listeria.a)
# 绘制表型数据直方图
> plotPheno(listeria.a, pheno.col=1)
5. Single-QTL analysis
首先,利用calc.genoprob函数计算基因型的概率,step参数设置步长,单位是cM,步长确定了后期QTL定位的密度。
> jit<-jittermap(listeria.a)
> sug <- calc.genoprob(jit, step=2)
通过scanone函数进行QTL扫描
> out.em <- scanone(sug)
查看每条染色体上的最大LOD值
> summary(out.em)
chr pos lod
c1.loc81 1 81.00 2.1057
c2.loc36 2 36.00 1.0528
D3M147 3 63.19 1.8446
D4M251 4 68.10 1.1744
c5.loc28 5 28.00 6.7131
D6M15 6 59.37 3.3279
D7M105 7 60.11 0.5715
D8M94 8 0.00 0.6940
D9M328 9 4.22 1.0563
D10M42_ 10 40.71 0.5819
D11M333 11 64.34 0.2801
c12.loc44 12 44.00 2.1008
D13M147 13 26.16 5.8292
c14.loc11 14 11.00 0.0819
c15.loc23 15 23.00 3.1928
c16.loc37 16 37.00 1.2660
c17.loc16 17 16.00 0.6180
D18M186 18 20.90 0.8158
D19M117 19 16.36 0.4822
DXM186 X 0.00 0.7381
设置阈值,查看大于设定阈值的染色体,这里设置LOD>3
LOD=log10 (L1/L0) ,L1指该位点含QTL的概率,L0指该位点不含QTL的概率。LOD值为3表示该位点含QLT的概率是不含QTL概率的1000倍。
> summary(out.em, threshold=3)
chr pos lod
c5.loc28 5 28.0 6.71
D6M15 6 59.4 3.33
D13M147 13 26.2 5.83
c15.loc23 15 23.0 3.19
绘制结果图
> plot(out.em)
使用Haley-Knott回归方法进行扫描
> out.hk <- scanone(sug, method="hk")
同时绘制默认方法,和Haley-Knott回归方法的LOD值图
> plot(out.em, out.hk, col=c("blue", "red"))
使用Multiple imputation法进行扫描
> sug2 <- sim.geno(sug, step=1, n.draws=64)
> out.imp <- scanone(sug2, method="imp")
三种方法,只绘制Chr7,15的LOD值
> plot(out.em, out.hk, out.imp, col=c("blue", "red", "green"), chr=c(7,15))
6. 组合检验 Permutation tests
> operm <- scanone(sug, method="hk", n.perm=1000)
显著性阈值可以通过summary函数得到
> summary(operm)
LOD thresholds (1000 permutations)
lod
5% 3.62
10% 3.17
> summary(operm, alpha=c(0.05, 0.2))
LOD thresholds (1000 permutations)
lod
5% 3.62
20% 2.77
组合检验结果可以与扫描结果一起使用,自动计算显著性阈值和p值
> summary(out.hk, perms=operm, alpha=0.2, pvalues=TRUE)
chr pos lod pval
c5.loc28 5 28.0 6.68 0.000
D6M15 6 59.4 3.33 0.081
D13M147 13 26.2 5.83 0.001
c15.loc23 15 23.0 3.20 0.095
7. QTL区间估计
通过前面LOD值阈值设定,确定QTL位点位于5、6、13号和15号染色体上,这里只对5号染色体上的QTL区间的进行估计。
获得7号染色体1.5倍LOD区间和95%贝叶斯区间
> lodint(out.hk, chr=5, drop=1.5)
chr pos lod
c5.loc16 5 16 5.145233
c5.loc28 5 28 6.682493
c5.loc38 5 38 4.832705
> bayesint(out.hk, chr=5, prob=0.95)
chr pos lod
c5.loc19 5 19 5.575862
c5.loc28 5 28 6.682493
c5.loc35 5 35 5.723181
其中第一行为区间开始位置 ,第三行为区间结束位置,中间一行是QTL的预估位置。
获得区间两侧最近的标记
> lodint(out.hk, chr=5, expandtomarkers=TRUE)
chr pos lod
D5M232 5 6.10396 1.947197
c5.loc28 5 28.00000 6.682493
D5M338 5 38.06807 4.805719
> bayesint(out.hk, chr=5, expandtomarkers=TRUE)
chr pos lod
D5M232 5 6.10396 1.947197
c5.loc28 5 28.00000 6.682493
D5M338 5 38.06807 4.805719
8. QTL效应计算
这里以上面检测到的Chr5,position=28.00的位置为例:
基因型分布
> mar <- find.marker(sug, chr=5, pos=28.0)
> plotPXG(sug, marker=mar)
统计不同基因型效应
> effectplot(sug, mname1=mar)
等同于
> effectplot(sug, mname1="5@28.0")
5@28.0即为Chr5,position=28.0。
统计两个位点间的联合效应分析
> effectplot(sug, mname1="5@28.0", mname2="6@59.37")
9. 其他表型的QTL定位
通过pheno.col函数设置分析的表型是第几个:
> out.hr <- scanone(sug, pheno.col=2, method="hk")
一次性对所有表型进行扫描,比如第一列到第四列:
> out.all <- scanone(sug, pheno.col=1:4, method="hk")
> summary(out.all, threshold=3)
引用转载请注明出处,如有错误敬请指出。