EEMS是基于C++来推测生境内生物的基因流(迁移)的软件。用于分析和可视化地理参考的遗传样本中的空间种群结构。 EEMS使用有效迁移的概念来建模遗传学和地理之间的关系,并输出估计的有效迁移面(因此EEMS)–人口结构的直观表示,突出显示了历史基因流量高于平均水平和低于平均水平的区域。
EEMS计算了遗传差异矩阵,并为每个地区的每个样本分配了地理坐标,以对比地界之间的地理和遗传距离。
EEMS分析案例:
From: Genomic structure and diversity of Plasmodium falciparum in Southeast Asia reveal recent parasite migration patterns
1. EEMS软件安装
EEMS有两种版本:用于SNP数据的runeems_snps和用于微卫星数据的runeems_sats,GitHub代码地址here.
EEMS模型是在C ++中实现的,其中使用Eigen进行线性代数计算,使用Boost进行随机数生成和生境几何形状。 可以从http://eigen.tuxfamily下载Eigen模板库。可以从http://www.boost.org下载Boost库。 EEMS已通过Eigen 3.2.2和Boost 1_57进行了测试。下载Eigen(不需要安装)并安装Boost之后,更新Makefile中的变量EIGEN_INC,BOOST_INC,BOOST_LIB.
2. 准备输入文件
EEMS需要三个输入文件。
(a)datapath.diffs: 成对遗传差异的矩阵。 可以使用bed2diffs(也在GitHub上)根据plink二进制格式的遗传数据来计算。
(b)datapath.coord: 给出样本采样位置,一行一个样本。
(c)datapath.outer: 逆时针列出栖息地轮廓,第一个顶点也是最后一个顶点,形成闭合的环。
3. 运行EEMS程序
测试数据下载here。首先,需要三个输入参数文件,这三个文件除了output directory mcmc path以外,所有输入参数都相同。 Running runeems_snps将从相同的目标分布中独立采样三个MCMC链:EEMS模型参数的后验分布。
这是第一个参数文件params-chain1.ini
datapath = ../data/barrier-schemeZ-nIndiv300-nSites30002
mcmcpath = ../data/barrier-schemeZ-nIndiv300-nSites3000-EEMS-nDemes200-chain13
nIndiv =3004
nSites =30005
nDemes =2006
diploid =false7
numMCMCIter =20000008
numBurnIter =10000009
numThinIter =9999
使用三个不同的随机种子运行EEMS。 如果未指定种子,则随机分配种子。
./runeems_snps --params params-chain1.ini --seed1232
./runeems_snps --params params-chain2.ini --seed4563
./runeems_snps --params params-chain3.ini --seed789
参数解读:
datapath:输入数据的路径。对于SNP数据,EEMS需要三个文件:平均成对差异矩阵datapath.diffs;样本坐标列表datapath.coord;栖息地边界点列表datapath.outer。
mcmcpath:输出目录的路径,EEMS创建此目录并将所有结果保存在那里。有一个随附的R包,该包解析输出文件并生成多个图形以可视化EEMS结果。
nIndiv and nSites:样本数量和标记数量。
MCMCIter,numBurnIter,numThinIter:MCMC迭代次数,开始要丢弃的老化迭代次数,以及在两个写入步骤之间要精简的迭代次数。如果栖息地不规则,则网格中实际的界数可能与指定的界数不完全相同。
nDemes,指定gridpath,其中gridpath.demes是一个demes列表,gridpath.edges是一个边缘列表和gridpath.ipmap是一个将采样分配给demes的映射。
4. R绘图
install.packages("rEEMSplots")
library("rEEMSplots")
extdata_path<-system.file("extdata",package="rEEMSplots")
eems_results<-file.path(extdata_path,"EEMS-example")
name_figures<-file.path(path.expand("~"),"EEMS-example")
eems.plots(mcmcpath = eems_results,
plotpath =paste0(name_figures,"-default"),
longlat =TRUE)