美文网首页
R/qtl 定位分析(二)Data Check

R/qtl 定位分析(二)Data Check

作者: 风知秋 | 来源:发表于2023-03-07 15:25 被阅读0次

    上一部分介绍了数据导入部分,有需要的可以移步:

    SNPbinner 构建定位群体的基因组 bin 图谱

    R/qtl 定位分析(一)读取数据

    理论上来说,在数据导入之后,第一项工作就应该是识别和纠正数据中的错误,确保没有太明显的问题。

    所以这一块就基于 R/qtl 中的自带文件介绍一下几种常见的问题。

    1. 表型数据

    检测具有异常表型的个体,这种异常多是由于数据输入过程中存在错误,需要仔细甄查。以示例数据集 ch3a 为例:

    library(qtlbook)

    data(ch3a)

    该数据集包括 5 个表型,首先可以绘制每个表型的直方图分布(未展示)。

    par(mfrow=c(3,2))

    for(i in 1:5)

    plot.pheno(ch3a, pheno.col=i)

    但这个图中不是很容易看到异常表型个体,相较而言散点图可能更明显一些。

    pairs(jitter( as.matrix(ch3a$pheno) ), cex=0.6, las=1)

    在散点图中,可以明显看到 phe4 中有一个个体表型为0,较为异常,需要检查一下是数据缺失或输入错误造成的。

    如果为 0 的异常表型是输入错误导致的,可以将其赋值为缺失,如下命令:

    ch3a$pheno[ch3a$pheno == 0] <- NA

    2. 偏分离检测

    遗传标记如果展示出明显的偏分离,则可能是基因分型过程出现问题造成的。

    以示例数据 ch3b 为例,geno.table 可以检测每个标记的基因型频率,最后一列是其是否符合孟德尔比例的卡方检验的 p 值。

    data(ch3b)

    gt <- geno.table(ch3b)

    gt[ gt$P.value < 1e-7, ]

    上述命令可以调出显著偏分离的遗传标记(p  < 1e-7)。

    有一些文献是会过滤掉偏分离的标记的,不过大家的操作没有很一致,这块我后面再多看些文献。师兄曾有尝试,去掉和不去掉差别不大,目前我是倾向于过滤掉这些异常位点的。

    3. 个体基因型比较

    有时候个体可能混淆,R/qtl 还提供了判断是否存有着非常相似的基因型的个体。在一些群体内,如果出现基因型高度甚至完全一致的个体,可以是错误导致的。

    同样以示例数据及 ch3a 为例,构建两两之间相同遗传标记所占比例的直方图:

    data(ch3a)

    cg <- comparegeno(ch3a)       # 比较个体之间遗传标记的相似度

    hist(cg, breaks=200, xlab="Proportion of identical genotypes")        # 绘制直方图

    rug(cg)      # 在直方图下绘制轴须图

    从轴须图中可以明显看到右端存在基因型异常相似的个体,可以调出来看看是哪些个体,做进一步的检查:

    which(cg > 0.9, arr.ind=TRUE)

    可以看出,138 和 5 之间,以及 12 和 55 之间,异常相似,值得怀疑。

    4. 标记顺序

    标记在染色体上的顺序如果发生错误,会直接影响 QTL 的分析结果。另外,即使是基于高质量物理图谱得到的结果,也可能发生标记位置的错误。这一部分是重点。

    4.1 成对标记之间的重组率

    一般来说,不同染色体上的标记应该是不相关的,同一条染色体上的标记相对来说连接会更紧密。举个例子,如果 1 号染色体上的某个标记和 3 号染色体上的某个标记连锁,那可能是哪里出错了。

    函数 est.rf 可用于估计所有标记两两之间的重组率。

    data(ch3c)

    ch3c <- est.rf(ch3c)

    plotRF(ch3c, alternate.chrid=TRUE)

    上面的命令能够得到上图所示的不同标记之间的重组率关系。可以发现,1、7、12、13、15 号染色体上存在重组率异常的标记。

    plot.rf(ch3c, chr=c(1, 7, 12, 13, 15))

    细看的话,可以看清楚具体哪些标记可能存在问题。

    还有方法进一步确定这些异常的标记,就是估计标记之间的遗传距离并绘图。

    nm <- est.map(ch3c, error.prob=0.001)

    plot(nm)

    从上面的两个图中,可以清楚地看到哪些标记可能出现了问题。存在一种可能,1 号染色体上的那个异常标记属于 7 号染色体;13 号染色体上的异常标记属于 12 号染色体。R/qtl 包提供了改变标记位置的选项,不过也可以直接去掉这些标记。

    4.2 染色体内标记的顺序检查

    和基因组上标记的重组率类似,单条染色体上的标记顺序也需要推定(个人推测,这些还是主要基于以前没有物理图谱时的分析)。

    这里推定的原理是最大似然和最少的 obligate crossovers,在一个窗口内列举所有标记的排列组合以及响应的 crossover,推定最少 crossovers 的为最佳顺序(简单来说,就是在上面的图种,把染色体内的方块也捋顺了。但现在如果有高质量物理图谱的情况下,这一步是否十分必要,待进一步阅读和思考。故未详细介绍。)

    补充:还是有一定必要的,如果相较参考基因组存在较大的结构变异(如:倒位),这一块的分析还是有必要看看的。

    4.3 估计遗传图谱

    确定好标记的顺序后,可以进行遗传图谱的估计,并将前后的遗传图谱进行比较。

    nm <- est.map(ch3c, error.prob=0.001, verbose=FALSE)

    plot.map(ch3c, nm)

    而后,完成遗传图谱的替换即可。

    ch3c <- replace.map(ch3c, nm)

    5. 可能的基因分型错误

    简单来说,就是 crossover 出现的距离很近,可能是测序错误造成的。但标记太稀疏的话就无法判断了。

    data(hyper)

    newmap <- est.map(hyper, error.prob=0.01)

    hyper <- replace.map(hyper, newmap)

    hyper <- calc.errorlod(hyper)

    top <- top.errorlod(hyper, cutoff=5)

    top

    plot.geno(hyper, 16, top$id[top$chr==16], cutoff=5)

    图中标注 × 的位置未可能的 crossover,红圈内可能是基因分型错误。

    少量错误对结果影响不大,如果类似的标记很多,就需要重新审视一下数据的情况了。

    6. crossovers 数目统计

    函数 countXO 可以统计每个个体上观察到的 crossovers 数目。如果观察到异常多或者异常少的个体,需要进一步检查确定没有搞错。

    nxo <- countXO(hyper)

    plot(nxo, ylab="No. crossovers")

    7. 缺失基因型信息统计

    这一块就是看一下哪些个体内缺失标记的数目异常高,以及在基因组中的哪些位置。

    (对我来说,先是知道这回事就可以了,后面有需要再进一步学习)


    这一部分看起来好像没什么用,但做科研嘛,严谨还是必要的。后面就要开始介绍 QTL 定位分析的计算过程了。


    要是觉得有用可以登录一下账号,点个赞,以表支持!

    相关文章

      网友评论

          本文标题:R/qtl 定位分析(二)Data Check

          本文链接:https://www.haomeiwen.com/subject/vxpnqdtx.html