生信教程:使用拓扑加权探索基因组进化(2)

使用 Twisst 探索整个基因组的进化关系的拓扑加权教程

简介

拓扑加权是量化不一定是单系群之间关系的一种方法。它通过考虑更简单的“分类单元拓扑”并量化与每个分类单元拓扑匹配的子树的比例,提供了复杂谱系的摘要。我们用来计算权重的方法称为 Twisst:通过子树迭代采样进行拓扑权重。

在本次实践中,我们将使用模拟数据来探索拓扑权重如何提供谱系历史。然后,我们将尝试使用针对窄窗口推断的邻居连接树来推断整个模拟染色体的拓扑权重。

工作流程

在真实情况中,我们不知道真正的家谱历史,但我们有一组序列,我们希望从中推断家谱。我们将使用一种简单的方法来做到这一点:使用标准的系统发育工具为整个基因组的窗口进行系统发育。通过将我们推断的历史与 R 中的事实进行比较,我们将深入了解谱系推断中功率和分辨率之间的权衡。

从序列数据推断权重

上面我们使用了模拟的“真实”家谱。在大多数情况下,我们拥有的只是序列数据,并且必须推断其进化历史。事实上,有两件事我们不知道:

  • 我们不知道所有个体之间的谱系关系
  • 当我们沿着染色体移动时,我们不知道重组改变关系的“断点”

在这一部分中,我们将从序列数据开始。我们将使用一种相当简单的方法,在沿着基因组的窗口中推断家谱。然后我们将对这些进行扭曲,看看我们是否可以恢复一些接近基本事实的东西。

请注意,这一部分的教训之一是,在窗口中推断树是粗略的,并且可能存在缺陷,特别是如果我们弄错了树的大小。

下载代码和数据

这部分的脚本位于github上的genomics_general包中,我们需要下载:

#download package
wget https://github.com/simonhmartin/genomics_general/archive/v0.3.tar.gz
#extract files from zipped archive
tar -xzf v0.3.tar.gz
#delete zipped file
rm v0.3.tar.gz

为了确保Python可以识别这些库,请将“genomics_general”目录添加到Python路径中

export PYTHONPATH=$PYTHONPATH:genomics_general-0.3

我们将使用的序列文件随第 1 部分中下载的 twisst 包提供。该文件采用简单的 .geno 格式,其中包含每个个体的染色体、位置和基因型列:

zcat twisst-0.2/examples/msms_4of10_l50k_r500_sweep.seqgen.SNP.geno.gz | head -n 5 | cut -f 1-8

推断树

我们有一个分布在 50 kb 基因组区域的 SNP 文件。我们将在定义数量的 SNP 的窗口中推断树,这样每个窗口都具有相似的信息量,但其在染色体上的绝对跨度可能不同,具体取决于 SNP 密度。

这种方法存在一个潜在的权衡。我们希望选择一个足够大的窗口大小,以便为树推理提供必要的能力,但又足够小,以实现足够的分辨率来捕获家谱历史在染色体上的变化。

我们将运行在 Windows 中读取 SNP 文件的脚本,然后使用 Phyml 为每个窗口推断一棵树。 Phyml 能够进行最大似然推断,但这里我们不会使用优化,因此树输出将是邻接树,使用 BIONJ 算法推断。通过模拟,我们发现邻接算法对于短序列的性能优于最大似然推理。

首先检查脚本的选项

python genomics_general-0.3/phylo/phyml_sliding_windows.py -h

主要选项是 -g 指定输入 .geno 文件和 --prefix 指定输出文件的前缀

还有用于设置窗口类型和大小的选项。我们将使用 20、50、100 和 500 个 SNP 等不同窗口大小运行该脚本四次。请注意,输入文件仅包含 SNP,因此通过设置 --windTypesites,每个窗口将被设置为包含固定数量的 SNP。通过这种方式划分窗口,它们在染色体上的绝对大小将随 SNP 密度而变化。每个窗口的开始和结束位置将记录在输出文件中。

最后,还有如何运行 Phyml 的选项。这里我们只需要设置 --optimise n 来关闭最大似然,并用 --model HYK85 定义替换模型,因为这是模拟序列的模型。

使用循环运行脚本,每次设置不同的窗口大小

for x in 20 50 100 500
do
echo "Inferring trees with window size $x"

python genomics_general-0.3/phylo/phyml_sliding_windows.py \
-g twisst-0.2/examples/msms_4of10_l50k_r500_sweep.seqgen.SNP.geno.gz \
--prefix msms_4of10_l50k_r500_sweep.seqgen.SNP.w$x.phyml_bionj \
--windType sites -w $x  --model HKY85 --optimise n

done

每次运行时,脚本都会生成两个输出文件: .trees.gz 文件包含每个窗口的树,采用 Newick 格式。

我们现在可以使用树文件作为输入来计算染色体上的权重。

使用为每个不同窗口大小生成的树文件运行 twisst

for x in 20 50 100 500
do
echo "Running Twisst for window size $x"

python twisst-0.2/twisst.py \
-t msms_4of10_l50k_r500_sweep.seqgen.SNP.w$x.phyml_bionj.trees.gz \
-w msms_4of10_l50k_r500_sweep.seqgen.SNP.w$x.phyml_bionj.weights.tsv \
-g A 1,2,3,4,5,6,7,8,9,10 \
-g B 11,12,13,14,15,16,17,18,19,20 \
-g C 21,22,23,24,25,26,27,28,29,30 \
-g D 31,32,33,34,35,36,37,38,39,40 \
--outgroup D

done

绘制推断权重

我们现在可以绘制这些推断树在染色体上的权重。这可以在与之前相同的 R 脚本中完成。

再次打开 R(如果您已重新启动 R,则可能需要重新加载plot_twisst.R 脚本)。

source("twisst-0.2/plot_twisst.R")

和之前一样,我们读入权重和窗口数据文件。这次我们将从模拟谱系中加载原始真实权重,以及我们刚刚计算的推断权重的四个文件。

weights_files <- c('msms_4of10_l50k_r500_sweep.weights.tsv.gz', #true weights file from Part 1
                   'msms_4of10_l50k_r500_sweep.seqgen.SNP.w20.phyml_bionj.weights.tsv',
                   'msms_4of10_l50k_r500_sweep.seqgen.SNP.w50.phyml_bionj.weights.tsv',
                   'msms_4of10_l50k_r500_sweep.seqgen.SNP.w100.phyml_bionj.weights.tsv',
                   'msms_4of10_l50k_r500_sweep.seqgen.SNP.w500.phyml_bionj.weights.tsv')

window_data_files <- c('twisst-0.2/examples/msms_4of10_l50k_r500_sweep.data.tsv.gz',
                      'msms_4of10_l50k_r500_sweep.seqgen.SNP.w20.phyml_bionj.data.tsv',
                      'msms_4of10_l50k_r500_sweep.seqgen.SNP.w50.phyml_bionj.data.tsv',
                      'msms_4of10_l50k_r500_sweep.seqgen.SNP.w100.phyml_bionj.data.tsv',
                      'msms_4of10_l50k_r500_sweep.seqgen.SNP.w500.phyml_bionj.data.tsv')

加载测量和窗口数据。请注意,当给定多个输入文件时,import.twisst 函数会将它们解释为单独的染色体。

twisst_data <- import.twisst(weights_files, window_data_files,
                             names=c("True weights", "20 SNP windows", "50 SNP windows", "100 SNP windows", "500 SNP windows"))

现在我们再次绘图以比较真实权重和推断权重。 (您可能需要扩展绘图窗口才能正确显示多个绘图)。

pdf("simulted_and_inferred_trees_weights_comparison.pdf", width=8, height=8)
plot.twisst(twisst_data, show_topos=FALSE, include_region_names=T)
dev.off()

这表明两种拓扑占主导地位。一种是拓扑 3,您会注意到它是“物种”拓扑,其中 cydno (chi) 与 timareta (txn) 组合在一起,并且两个 melpomene 种群(ros 和 ama)组合在一起。另一种是拓扑 11(粉色),其中 txn 与 ama 分组(嵌套在 melpomene 对内)。这告诉我们,基因渗入的主要方向是从 H. melpomene amaryllis 进入 H. timareta thelxinoe。这符合我们目前对这个群体的理解,在这个群体中,提马雷塔沿着安第斯山脉的东坡扩张,与墨尔波烯杂交,并获得了每个地区偏爱的警告模式等位基因。

未完待续!

本文由mdnice多平台发布

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

推荐阅读更多精彩内容