不完全谱系分选(Incomplete lineage sorting; ILS)及其分析方法

不完全谱系分选(Analysis of incomplete lineage sorting ; ILS)指的是由于基因组中不同片段的进化速率和保守性不同,通过不同片段构建的系统发育关系可能与真实系统发育关系差别较大。例如通过全基因组筛选出的若干orthologs基因建的树,其中部分可能与全基因组建树的拓扑差别很大。

在Hobolth A等人的研究中,他们构建了一个HCOM(人类、黑猩猩、猩猩以及外类群猕猴,分别代表四个字母)的alignment,并沿着HCOM alignemnt构建了隐马尔可夫模型(hiden Markov model, HMM),其中的“隐藏状态”是从数据集中预测的。观测的状态就是alignment中的每一列(column),隐藏状态就是未知的谱系。HC1状态和HC2状态都表示人类与黑猩猩首先coalescent的状态(情况),前者早于猩猩的speciation而后者晚于猩猩的speciation。HO状态表示人类先与猩猩coalescent。CO表示黑猩猩和猩猩先coalescent。核酸替换模型是GTR模型GAMMA分布。最后根据后验概率,找到每一个位点上最有可能的隐藏状态。


HCOMJ体系中位点系统发育类型/隐藏状态统计表

如果不清楚HMM模型可见文末图解。

如此,就可以得知基因组上每一个位点的系统发育类型,以及不符合进化树的基因组片段比例,也就是ILS比例。在HCOM体系中,ILS大抵占基因组的1%。

不完全的谱系分选很可能导致选择信号模糊。ILS比例较大的个体可能参与了较大的杂交事件。

CoalHMM软件操作:

a maximum likelihood approach that allows the simultaneous estimate of ILS, divergence time, and ancestral effective population size.
https://github.com/birc-aeh/coalhmm

(Hobolth A, Dutheil JY, Hawks J, Schierup MH, Mailund T. Incomplete lineage sorting patterns among human, chimpanzee, and orangutan suggest recent orangutan speciation and widespread selection. Genome Res. 2011;21:349–56.)

注意:在使用coalHMM时需要先安装pyZipHMM(ZipHMM软件),并导入环境变量。

1、安装

conda install coalhmm

2、文件结构解析

在coalhmm的示例中,analysis.sh脚本包含了分析的所有代码。其存放在test_data文件夹中。同一文件夹还有“I和”IM“文件夹,分别包含用于isolation模型的alignment数据以及用于isolation-with-migration模型的alignment数据。

test_data文件夹示例

“I”文件夹如下:


“I”文件夹

数字0-9是将alignment拆成10个chrunk分开来跑,如下:


sim_I_0.gz文件

2、利用script文件夹中的prepare-alignments.py脚本将alignment文件转换为HMM格式

此处的hmm文件格式其实是沿用了ziphmm软件中的格式(.hmm):

no_states
2
alphabet_size
3
pi
0.17
0.83
A
0.49 0.51
0.18 0.82
B
0.69 0.06 0.25
0.03 0.51 0.46

其中,no_states是HMM模型中的隐藏状态,在alignment数据中,有多少个位点就有多少no_states(也就是序列长度)。alphabet_size指的是HMM模型中每一个隐藏状态包含的可见状态数量(也就是说编码所用字符的类型数),例如序列文件如果是ATCGGCTA,那么alphabet_size=4;如果序列文件是0122102220(类似于ped文件,0代表缺失,1代表与ref相同,2代表与ref不同),则alphabet_size=3。pi是最初状态概率;A为状态之间的转换概率(transition probabilities);B为从隐藏状态到某一可见状态到输出概率(emission probabilities)。

以上这些都不需要手动编辑,prepare-alignments.py可以直接转换:

#以isolation模型为例,也就是I文件夹
I_alignments=`ls I/*.gz`
##输入I文件夹中数据的文件名
for algn in $I_alignments; do
    out=`basename $algn .gz`
    cmd="python ../scripts/prepare-alignments.py $algn fasta analysis/${out}.ziphmm"
    echo $cmd
    $cmd
##运行脚本逐个转换
done

3、使用isolation和isolation-migration模型进行分析

运行HMM:

python ../scripts/estimate-using-I-model.py --verbose --header \
--out=I-results-I.txt analysis/sim_I_*
##isolation模型

python ../scripts/estimate-using-IM-model.py --verbose --header \
--out=I-results-IM.txt analysis/sim_IM_*
##isolation-migration模型

检查模型适合度:

echo "Model checking for isolation model:"
IlogL=`tail -n 1 I-results-I.txt | cut -f1`
IMlogL=`tail -n 1 I-results-IM.txt | cut -f1`
IAIC=`bc -q <( echo "2 * (3 - $IlogL)"  ; echo quit )`
IMAIC=`bc -q <( echo "2 * (5 - $IMlogL)"  ; echo quit )`
Delta=`bc -q <( echo $IlogL - $IMlogL ; echo quit )`

echo "I AIC = $IAIC, IM AIC = $IMAIC, DeltaAIC = $Delta"

AIC:赤池信息准则,越小模型越好,负值

4、计算后验概率

结合I-results-IM.txt以及I-results-I.txt,使用posterior-analysis.sh计算后验概率,筛选后验概率最高的隐藏状态,并计算与参考基因组相同的位点所占的比例,就得到了ILS的结果。


写在最后:

如果不了解HMM模型,可以这么看


一个骰子就是一个隐藏状态,每个骰子的每一面就是一个可见状态
HMM模型图示

隐含状态(骰子)之间存在转换概率(transition probability)
隐含状态(骰子)和可见状态(面)之间有一个概率叫做输出概率(emission probability)

参考资料:https://www.cnblogs.com/skyme/p/4651331.html

你可能感兴趣的:(不完全谱系分选(Incomplete lineage sorting; ILS)及其分析方法)