fastsimcoal2推断群体演化历史(Demographic history)

1. 群体演化历史分析的案例:

群体演化包括有效群体大小(Ne)变化、基因流,迁徙,分化等,会对等位基因频率产生显著影响,塑造了现有遗传多样性的模式和水平。群体演化、遗传漂变和自然选择共同决定了基因组遗传多样性的命运。
Example: 苏格兰罕见的食肉褐鳟(rare piscivorous brown trout: ferox)与普通褐鳟(normal brown trout)在进化过程中是否有基因交流?

2. 如何通过测序数据进行群体演化历史的推断?

(1)群体的系谱进化树的形状包含了群体演化历史的模式
(2)在不同的群体演化历史的模式下,SFS有不同的分布

什么是SFS(site frequency spectrum):
请参考位点频谱(SFS)计算
单个群体


两个群体

颜色越偏红,表示数量越多,越偏蓝表示数量越少。如果两个群体完全分开,那它们derived allele频率相同的交集就越少,表现在2D SFS上就是密度偏向各自的坐标轴,如果群体交流混合,它们derived allele频率相同的交集就越多,表现在2D SFS上就是密度偏向x=y的这条对角线。后面两个模型对SFS的影响很像,都是使两群体的SFS趋同,可能结合群体分化时间,核苷酸突变速率等推断具体是哪种模型。

(3)通过最大似然估计得到最佳参数

个人理解是,通过推断参数,给出模型,使expected SFS更合理,也就是更加类似于两个分离的群体。模型参数包括:群推分歧时间(也可以自己提供),基因流,以及有效群体大小。

(4)计算软件:fastsimcoal2

fastsimcoal2是由伯尔尼大学的Laurent Excoffier小组2016年开发的一种非常灵活的人口统计(Demography)建模软件。 它通过执行合并模拟,使用位点频谱(SFS),推断最适合所观察数据的模型参数。

models.png

软件下载
官网:http://cmpg.unibe.ch/software/fastsimcoal2/
使用fastsimcoal2和模拟数据在简单模型下推断参数
输入文件

3. fastsimcoal2实战分析

使用fastsimcoal2和软件自带的测试数据在简单模型下推断参数


(1)准备输入文件:

输入文件1:SFS文件
文件2PopDiv20Mb_jointDAFpop1_0.obs是两个群体的观测2D-SFS.

# set the working directory
setwd("/Software/fsc26_mac64/example files/2PopDiv20Mb")
# read the observed SFS
# 2D from two populations with different effective sizes that diverged some time ago
pop2d <- read.table("2PopDiv20Mb_jointDAFpop1_0.obs", skip=1, stringsAsFactors = F, header=T, row.names = 1)
head(pop2d)
         d0_0 d0_1 d0_2 d0_3 d0_4 d0_5
d1_0 19985747 8350 1628  360   62    8
d1_1      966    0    0    0    0    0
d1_2      479    0    0    0    0    0
d1_3      328    0    0    0    0    0
d1_4      249    0    0    0    0    0
d1_5     1760   13   18   13   19    0

输入文件2:定义模型文件
每个模型都在TPL文件中定义,我们要推断的参数都有名称标签(例如NPOP,TDIV)

//Parameters for the coalescence simulation program : fsimcoal2.exe
2 samples to simulate :
//Population effective sizes (number of genes)
NPOP1
NPOP2
//Samples sizes and samples age 
5
5
//Growth rates  : negative growth implies population expansion
0
0
//Number of migration matrices : 0 implies no migration between demes
0
//historical event: time, source, sink, migrants, new deme size, new growth rate, migration matrix index
1  historical event
TDIV 1 0 1 RESIZE0 0 0
//Number of independent loci [chromosome] 
1 0
//Per chromosome: Number of contiguous linkage Block: a block is a set of contiguous loci
1
//per Block:data type, number of loci, per generation recombination and mutation rates and optional parameters
FREQ  1   0   2.5e-8 OUTEXP

EST文件中定义了每个参数的搜索范围。 对于每个参数,我们使用相应的参数名称标签指定搜索范围。

// Search ranges and rules file
// ****************************

[PARAMETERS]
//#isInt? #name   #dist.#min  #max 
//all Ns are in number of haploid individuals
1  NPOP1       logunif  10   1e7   output
1  NPOP2       logunif  10   1e7   output
1  NANC        logunif  10   1e7   output 
1  TDIV        unif     10   1e5   output 

[RULES]

[COMPLEX PARAMETERS]

0  RESIZE0   = NANC/NPOP1      hide

注意:TPL和EST文件需要具有相同的文件名,但具有不同的扩展名:[filename] .est和[filename] .tpl。

(2)运行fastsimcoal2:
#参数估计(推测群体演化历史)
fsc26 -t PopDiv_diff.tpl -e PopDiv_diff.est -d -0 -n 100000 -L 40 -s 0 -M -q -c 80
#还可以产生模拟群体数据(另一个功能)
#使用输入参数文件中定义的参数值来模拟进化模型下的数据
fsc26 -i test.par -n 100
#使用从先验随机抽取的参数值来模拟进化模型下的数据
fsc26 -t test.tpl -n 10 -e test.est -E 100
#使用在外部文件中定义的参数值来模拟进化模型下的数据
fsc26 -t test.tpl -n 100 -f test.def

参数说明:

-n: 模拟次数,该值应大于100,000。建议使用200,000到1,000,000。
-L: 迭代次数,该值至少应为20,建议使用50和100之间。
-M: 使用似然优化推断参数。
-d: 对于derived SFS使用-d,对于MAF SFS使用-m。
-0: 说明观察到的SFS中没有单态位。
-q: 快速模式,不打印所有信息。
-C: 为具有至少1个SNP的所有输入计算似然。如果指定-Cx,则所有少于x个SNP的条目将汇集在一起。当观察到SFS中很多位点SNP很少时,此选项用以避免过度拟合。
-c: 指定多线程的选项。 -c1 -B1用于单核,-c4 -B4用于4核。
(3)软件输出:

对我们最重要的三个文件:

* .bestlhoods:具有最大似然参数估计值和相应似然性的文件。 这就是我们想要的-参数估计!
* _DAFpop0.txt:具有通过优化过程中使似然性最大化的参数获得的预期SFS的文件,对于检查SFS是否合适是必需的。
* .simparam:文件中包含运行模拟的设置示例,用于错误时检查。

查看结果

#读取最大似然估计参数文件
maxlhoodEstimates <- read.table(paste(settings$pathTo_InputFile, "/",
                                      settings$TPL_EST_file_tag, "/",
                                      settings$TPL_EST_file_tag, ".bestlhoods",
                                      sep=""), header=T)
#查看估计参数
maxlhoodEstimates

其中,MaxObsLhood指如果期望值与观察到的SFS完全匹配,即期望的SFS是相对观察到的SFS,则值越大。MaxEstLhood是根据模型参数估计的最大似然,拟合度越高,MaxObsLhood和MaxEstLhood之间的差异就越小。

#获取观察到的和预期的SFS
# Fit of the model expected SFS to the observed SFS

# Tag for the end of the observed SFS file
obsfileend <- "_jointDAFpop1_0"

# Read the observed SFS - SNP counts
obssfs <- read.table(paste(settings$pathTo_InputFile,
                    settings$TPL_EST_file_tag, obsfileend, ".obs",
                    sep=""), skip=1, stringsAsFactors = F, header=T)

# Read the expected SFS - PROBABILITIES
expsfs <- read.table(paste(settings$pathTo_InputFile,
                    settings$TPL_EST_file_tag, "/",
                    settings$TPL_EST_file_tag, obsfileend, ".txt",
                    sep=""), header=T)

# Plot the fit of the 2D SFS, including of the marginal 1D SFS
# the function plot2dSFS is defined in the utilfunctions.r
# you need to give as input the following arguments
#    obsSFS : matrix with observed SFS (counts)
#    expSFS : matrix with expected SFS (probabilities)
#    xtag : string with the label of x-axis
#    ytag : string with the label of y-axis
#    minentry : number with the minimum entry in the SFS (all entries with less than this are pooled together)
plot2dSFS(obsSFS=obssfs, expSFS=expsfs, xtag="Pop2", ytag="Pop1", minentry=1)
#绘制模型
#maxL.par file 是一个最大似然估计参数文件
path_to_maxL_file <- paste(settings$pathTo_InputFile, settings$TPL_EST_file_tag, "/",settings$TPL_EST_file_tag, "_maxL", sep="")
parFileInterpreter(args=path_to_maxL_file, pop.names=c("Pop1","Pop2"), gentime=1, printPDF=FALSE)

参考:

  1. Demographic modeling with fastsimcoal2
  2. fastsimcoal27 manual
  3. Inferring demographic parameters from the SFS with composite likelihood method implemented in fastsimcoal2
  4. fastsimcoal2官网
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • “南繁”大树的粗壮枝条 ——萍乡市湘东南繁采风感怀 平常兜里总揣满赞词 一遇到人儿事儿,差不离 会急不可耐,争先恐...
    南方秋实阅读 225评论 0 2
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,559评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,199评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,515评论 2 7