美文网首页数据分析
参悟 Estimated Effective Migration

参悟 Estimated Effective Migration

作者: Morriyaty | 来源:发表于2021-07-09 19:44 被阅读0次

    入门

    在比较早之前就看过一篇简书

    [EEMS推测生境内生物的基因流 - 简书 (jianshu.com)](https://www.jianshu.com/p/9ef469ed7c98)
    

    介绍过EEMS这款软件,点了收藏,直接搁置。最近才慢慢参悟该软件的使用,踩过很多坑,所以直接介绍一下EEMS。

    乍练

    首先上官网:https://github.com/dipetkov/eems
    使用手册在Documentation中,有更详细的说明。

    通晓

    EMMS的安装比较麻烦,每一个模块都需要单独编译,这里只介绍我用到的三个模块。

    #EMMS 主体可以直接git clone 下载 略
    #首先是软件主命令 runeems_snps
    #需要两款其他软件作为支持 
    #Eigen进行线性代数计算
    https://eigen.tuxfamily.org/index.php?title=Main_Page
    #下载后解压 安装过程直接 粘贴下来:
    Let's call this directory 'source_dir' (where this INSTALL file is).
    Before starting, create another directory which we will call 'build_dir'.
    Do:
      cd build_dir
      cmake source_dir
      make install
    The "make install" step may require administrator privileges.
    You can adjust the installation destination (the "prefix")
    by passing the -DCMAKE_INSTALL_PREFIX=myprefix option to cmake, as is
    explained in the message that cmake prints at the end.
    
    #Boost进行随机数生成和生境几何形状
    https://www.boost.org/
    (不记得了 可以google 一下 how to install boost)
    
    #两款软件装好后,找到/eems/runeems_snps/src Makefile
    #修改依赖路径 make 就好 例:
    EIGEN_INC = /data/01/user152/software/eigen-3.2.10/eigeneigen/include/eigen3/
    BOOST_LIB = /data/01/user152/software/boost/lib
    BOOST_INC = /data/01/user152/software/boost/include
    
    #然后是bed2diffs模块的编译
    #需要先安装  libplinkio (https://github.com/fadern/libplinkio)
    #这个比较简单,略
    #同样找到Makefile 修改依赖路径(在src里) 例:
    PLINKIO = /data/01/user152/software/plinkio
    EXE = bed2diffs_v1
    OBJ = bed2diffs_v1.o data.o
    
    CXXFLAGS = -I/data/01/user152/software/plinkio/include -O3 -Wall -Werror -fopenmp
    LDFLAGS = -lplinkio
    
    #最后是plot模块,跟着手册装就好
    #遇到rgos装不上的情况,去跟管理员py一下,让root装一下就ok了。
    

    至此,软件就搞定了。

    小成

    runeems_snp 需要三个主要输入文件:
    *.diffs 遗传距离矩阵,可以通过VCF转换
    *.coord 采样的坐标,经纬度就可
    *.outer 栖息地坐标,同经纬度
    现在我们一个个准备输入文件:

    .diff

    此处坑较多,务必注意
    
    #首先要确定VCF中的个体是不是每个都有采样信息,没有的话需要删掉,外群也需要删掉。
    #可以用vcftools 删除个体
    
    #我在做的过程中做过很多次,只介绍跑通的这次的做法,要问我为什么这么做,别问,问就是这么做能跑通
    1. 需要将VCF处理为下种模样
    
    1. 第一列需要都改为1
    2. POS 顺延
    3. ID 为snp1 顺延
    
    #之后运行PLINK
    plink --vcf sample.vcf --allow-extra-chr --maf 0.05 --recode --out sample
    plink --noweb --file sample --allow-extra-chr --make-bed --maf 0.05 --allele1234  --out sample
    

    生成的smple.[bed/bim/fam]就是下一步的生成文件。

    bed2diffs_v1 --bfile  ./sample
    

    会生成第一个输入文件, sample.diffs

    .coord

    记录个体采样地理位置的文件:

    '经度' \t'纬度'
    建议经度在前,当然纬度在前也可以,不过后面需要注意这个的前后顺序
    

    .outer

    记录栖息地位置的文件
    说人话就是
    把所有样本包括进去的一个地理范围,类似下图



    采样地点都在范围内。
    可以用此网站准备改文件。

    http://www.birdtheme.org/useful/v3tool.html
    

    到此为止,最主要的三个文件也就准备好了,还有一类可选的文件。详细的可以阅读手册。

    大成

    输入文件准备好了就可以运行软件了。是一个类似配置文件的形式。

    #params-run.ini
    datapath = ./data/sample  # 输入文件前缀的路径
    mcmcpath = ./out   #输出文件路径
    #gridpath =   #刚提到的可选的输入文件前缀路径
    nIndiv =48  #个体数
    nSites =5343964  #位点数
    nDemes =700 #grid 网格数700我觉得有点太慢了。。。。
    diploid =true  #是否为二倍体
    numMCMCIter =2000000
    numBurnIter =1000000
    numThinIter =9999
    
    因为用到的是SNP数据,三个输入文件内并不能体现位点数,因此我用的是真实的位点数,可不可以瞎编我也不知道。
    Demes 我理解的是最后网格数的多少,越多越慢,示例为300好像,我采用700,具体见下图。
    剩下的三个建议就默认吧
    
    #运行
    runeems_snps --params params-run.ini
    

    圆满

    输出文件都有了,最重要的一点就是可视化。

    ###这里手册里介绍的很详细,不多加赘述
    library("rEEMSplots")
    
    eems_results <- file.path("out-1")  #输出文件路径
    name_figures <- file.path("out")  #输出图片文件名前缀
    
    eems.plots(mcmcpath = eems_results,
               plotpath = paste0(name_figures, "-output-PDFs"),  #输出为PDF
               longlat = TRUE,  # TRUE 指经度在前 纬度在后 FALSE反之
               out.png = FALSE, #输出为PDF
               #add.grid = TRUE,  #可选输入文件才有
               #col.grid = "gray90",  #可选输入文件才有
               #lwd.grid = 2,  #可选输入文件才有
               #add.outline = TRUE,  # 是否显示边界 (我觉得太丑了)
               #col.outline = "blue",
               #lwd.outline = 5,
               add.demes = TRUE,  #显示demes
               col.demes = "red",
               pch.demes = 5,
               min.cex.demes = 0.5,
               max.cex.demes = 1.5
               )
    

    最后结果大致这样:


    大道

    判断结果好不好的重要标准是: 模拟的模型是否收敛
    可视化后有一个图能用来判断。
    doc里是这么解释的:


    The eems.plots function in the rEEMSplots package generates a posterior trace plot. (a) This MCMC
    chain obviously has not converged. (b) There is no indication that the MCMC chain has not converged. This is
    not quite the same as there is evidence that the MCMC chain has converged. (c) To be confident that EEMS has
    converged, we can run the MCMC sampler for more iterations. (d) Alternatively, to be confident that EEMS has
    converged, we can run the MCMC sampler several times, each time starting from a different randomly initialized
    parameter state.
    

    说人话呢就是 最差也得是b图的样子。
    为了达到收敛,有两种方法

    1. 多跑几次,选最好的
    2. 用上一次的结果作为下一次的输入,循环
    我们就草率的选2哈!
    
    #params-pre.ini
    datapath = ./data/sample
    mcmcpath = ./out
    prevpath = ./out-1
    #gridpath = 
    nIndiv =48
    nSites =5343964
    nDemes =700
    diploid =true
    numMCMCIter =1000000
    numBurnIter =0
    numThinIter =9999
    

    跑到能让自己舒服的结果就好。
    感谢 软件作者 及 DumplingLucky 还有KZR

    相关文章

      网友评论

        本文标题:参悟 Estimated Effective Migration

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