zoukankan      html  css  js  c++  java
  • 无亲缘关系为何IBD结果为同卵双胞胎/重复样本

    前几天,一位小朋友问了我这个问题:为什么没有亲缘关系的样本,IBD显示他们是同卵双胞胎或者重复样本。

    具体来说,使用PLINK的--genome参数计算后得到的PI_HAT(Proportion IBD)全是1。

    如下所示:

    鉴于这位小朋友的微信ID特别有味道(屎尿屁之类),而且赞赏过我文章,让我印象很深刻。

    于是,我决定亲自操刀,让他发测试数据给我。

    测试数据是ped/map格式。
    map如下图所示,可以看到,RS号没有统一好(第二列):

    好人做到底,给人家统一一下RS号,统一好后如下所示:

    神清气爽了!

    做数据分析,清洗数据很重要,太脏的数据不仅影响工作效率,还影响结果。

    比如本推文出现的问题,在没有看PLINK源代码的情况下,我们是不知道是根据位置和染色体信息,还是根据RS号信息计算IBD。

    如果是根据位置和染色体信息,那么只需要确保这两个信息准确就行了;

    但如果是根据RS号,没有统一好RS号的话,会丢失掉很多位点,影响结果。

    数据清洗后,开始计算IBD:

    plink --bfile file --indep-pairwise 50 5 0.2 --out file_indep #Pruning
    plink --bfile file --extract file_indep.prune.in --genome --out file_indep.prune.in.ibd #计算亲缘关系
    awk '$10>=0.95' file_indep.prune.in.ibd.genome #提取PI_HAT大于0.95的样本
    

    清洗后的结果还是跟之前一样,本无亲缘关系的样本还是有亲缘关系,如下图红框所示:

    到这一步至少确定了,PLINK计算IBD是根据位置和染色体信息,不需要统一RS号。

    但我们还是无法找到问题所在。

    想确认样本间是不是同卵双胞胎/重复样本,最万无一失的方法是计算样本间碱基的一致性(kappa值)。但我懒得写脚本。

    于是我使用了一种偷懒的办法:把样本拷贝后更换ID变成新的样本,再计算亲缘关系。如下:

    #拷贝样本
    cp file.bed dd.bed
    cp file.bim dd.bim
    cp file.fam dd.fam
    

    随后,修改样本ID。

    原始file.fam的ID如下所示:

    修改dd.fam样本ID变成新的样本:

    实际上,dd.fam的63547_63547样本就是file.fam的63547;
    同理,dd.fam的63559_63559样本是file.fam的63559;
    更改ID是为了合并;

    更改ID后,合并样本,计算IBD:

    plink --bfile file --bmerge dd.bed dd.bim dd.fam --make-bed --out merge #合并样本
    plink --bfile merge --indep-pairwise 50 5 0.2 --out merge_indep #Pruning
    plink --bfile merge --extract merge_indep.prune.in --genome --out merge_indep.prune.in.ibd #计算亲缘关系
    awk '$10>=0.95' merge_indep.prune.in.ibd.genome #提取PI_HAT大于0.95的样本
    

    IBD的结果如下所示:

    毫无意外的, 样本63547和样本63547_63547之间的PI_HAT为1,样本63559 和样本63559_63559之间的PI_HAT为1。他们本来就是同一个样本,被我们拷贝过来的。

    此外,我们也可以观察到样本63547和样本70973的PI_HAT为1; 样本63559 和样本69111的PI_HAT为1,与重复样本(样本63547和样本63547_63547、样本63559 和样本63559_63559)的结果完全一致。

    到这里就说明了,1)要么他们(样本63547和样本70973、样本63559 和样本69111)是同卵双胞胎/重复样本,2) 要么贴错样本ID,使得样本重复测序;

    除此之外,我想不到还有什么理由,让已知没有亲缘关系的样本变成同卵双胞胎/重复样本。

    各位有些相关经验的,欢迎找我讨论,我想听听别的声音。

  • 相关阅读:
    在bindingNavigator1中加入具有更好体验性的DateTimePicker
    static的初始化顺序 (转)
    C#数据结构求最大公约数和最小公倍数[辗转相除法]
    DataGridView控件显示行号
    C# 小票打印机 直接打印 无需驱动[转]
    Core Data 中遇到的一些问题
    字符指针不分配存储区,字符常量存储于静态数据区
    传送门
    Error Set
    实现类似iPhone通讯录新增名片,保存,之后可进行编辑操作的功能
  • 原文地址:https://www.cnblogs.com/chenwenyan/p/14563412.html
Copyright © 2011-2022 走看看