美文网首页遗传学重点关注
rehh:单倍体/单倍型群体间选择信号分析(基于selectiv

rehh:单倍体/单倍型群体间选择信号分析(基于selectiv

作者: 杨康chin | 来源:发表于2022-01-21 20:57 被阅读0次

    本文介绍的方法都是基于Extended Haplotype Homozygosity (EHH)概念,由SABETI 等人在 2002年提出。简单来说,根据selective sweep的概念,一个位点周围的位点如果多样性越低,就越有可能是因为selective sweep留下的选择印迹。

    EEH计算举例:

    一个简单的计算。令红色一行为focus的core SNP,那么向下数三个位点,计算它们的多样性(类似于交叉熵的东西,离散指数,香农商,whatever),显然多样性越低,这个core是受选择位点的可能性越高
    参考:https://static.epcc.ed.ac.uk/dissertations/hpc-msc/2013-2014/Hapbin:%20An%20Efficient%20Method%20for%20Calculating%20EHH%20and%20iHS%20of%20Genetic%20Datasets.pdf

    这里有三篇介绍selective sweep的文章,讲得很好:
    https://www.icode9.com/content-4-803828.html
    https://www.plob.org/article/2345.html
    https://www.jianshu.com/p/82719840ec4a

    rehh tutorial:
    https://cran.r-project.org/web/packages/rehh/vignettes/rehh.html#computing-ihs-rsb-and-xp-ehh

    有很多衍生的统计量:EHH(Extended Haplotype Homozygosity)、iHS(Integrated Haplotype Score) 、XP-EHH(Cross Population Extended Haplotype Homozogysity)、RSB

    rehh、selscan和hapbin都是基于EHH及其衍生概念的
    Hapbin可以看这篇(但是hapbin无法处理缺失位点,不建议用):
    使用Hapbin基于EHH、iHS、XP-EHH方法检测基因组中的选择信号

    前提:染色体要有重组!Y和W染色体不能用这种方法

    本文只写两个群体之间的单倍型选择信号检测,单个群体内部的不写,但是rehh也可以做,很方便

    rehh

    rehh是一个R包

    1. 安装:

    BiocManager::install("rehh")
    

    2. 准备输入文件

    2.1 .hap文件
    群体1.hap 群体2.hap

    第一列个体名,后面每一列一个SNP。跟reference一样的就是0,第一种不一样的就是1,第二种不一样的就是2,以此类推。比如ref是G,那假设SNPs中还有T和A两个等位基因,就分别标为1和2。缺失值可以用[NA]或者[.]。每个群体一个文件。

    2.1 .map文件
    .map

    第一列SNP名称,随便起。第二列染色体名称。第三列染色体上的位点。第四列是major allele,一般就是0。第五列是minor allele,有一个1就填1,有1和2就填1,2。如图。两个群体用同一个文件就行。

    注意,如果有好几条染色体,每条染色体要分别产生这两个文件,每条染色体分别跑。

    3. 运行rehh
    library(rehh)
    ####输入 MN 群体的数据
    hh_map1 <- data2haplohh(hap_file = "Pop1.chr18.MN.hap",
                           map_file = "Pop1.chr18.map",
                           allele_coding = "01",
                           verbose = FALSE)
    
    ####输入 QH 群体的数据
    hh_map2 <- data2haplohh(hap_file = "Pop2.chr18.QH.hap",
                           map_file = "Pop2.chr18.map",
                           allele_coding = "01",
                           verbose = FALSE)
    
    ### genome-wide 的 scan
    res.scan1 <- scan_hh(hh_map1, discard_integration_at_border = FALSE)
    res.scan2 <- scan_hh(hh_map2, discard_integration_at_border = FALSE)
    
    #### 这里同时跑了 xpehh和rsb两种方法,但其实差不多,后者对core标准化,而前者不
    res.xpehh <- ies2xpehh(res.scan1, res.scan2, "MN", "QH")
    res.rsb<-ines2rsb(res.scan1, res.scan2, "MN", "QH")
    
    ### 把结果输入到文件
    write.table(res.xpehh,"Pop1.chr18.xpehh.txt",quote=F,row.names=F)
    write.table(res.rsb,"Pop2.chr18.rsb.txt",quote=F,row.names=F)
    
    
    pdf("Pop.MN_QH.plot.pdf")
    distribplot(res.xpehh$XPEHH_MN_QH)
    title(sub = "xpehh_chr18")
    manhattanplot(res.xpehh,pval=T)
    ### 画曼哈顿图
    #### 这里选择了输出-log(p)值,如果不加pval参数,输出的就是统计量
    title(sub = "xpehh_chr18")
    distribplot(res.rsb$RSB_MN_QH)
    title(sub = "rsb_chr18")
    manhattanplot(res.rsb,pval=T)
    title(sub = "rsb_chr18")
    dev.off()
    

    4. 结果

    注意结果的Pvalue是-log10(p-value) image.png image.png

    相关文章

      网友评论

        本文标题:rehh:单倍体/单倍型群体间选择信号分析(基于selectiv

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