在 GitHub 上编辑此页面

与“最大似然法系统发育分析”(PAML) 软件包接口。

此模块提供与 PAML(最大似然法系统发育分析)程序包的接口。目前,已包含对 codemlbasemlyn00 程序以及 chi2 的 Python 重新实现的接口。

可用性

此模块在 Biopython 1.58 及更高版本中可用。

要使用此模块,您必须在系统上安装 PAML 4.1 或更高版本。

codeml

codeml 接口在以下模块中提供

from Bio.Phylo.PAML import codeml

Codeml 对象

初始化

该接口以对象的形式实现,该对象维护程序选项。为了运行 codeml,通常提供一个控制文件,该文件指示比对文件、树文件和输出文件的位置,以及一系列指示如何运行软件的选项。在 Codeml 对象中,三个文件位置存储为字符串属性。这三个文件位置以及所需工作目录的位置可以在 Codeml 构造函数中指定,如下所示

cml = codeml.Codeml(
    alignment="align.phylip",
    tree="species.tree",
    out_file="results.out",
    working_dir="./scratch",
)

它们也可以单独设置

cml = codeml.Codeml()
cml.alignment = "align.phylip"
cml.tree = "species.tree"
cml.out_file = "results.out"
cml.working_dir = "./scratch"

请注意,所有文件位置都转换为相对于工作目录的位置。PAML 程序对文件位置字符串的长度有限制;转换为相对位置将缩短这些字符串,通常允许您避开此限制。

选项

codeml 运行时选项存储在一个字典对象中,该对象以选项名称为键。有关这些选项用法的更多信息,请参阅 PAML 用户手册。

可以打印完整的选项集及其当前值

>>> cml.print_options()
verbose = None
CodonFreq = None
cleandata = None
fix_blength = None
NSsites = None
fix_omega = None
clock = None
ncatG = None
runmode = None
fix_kappa = None
fix_alpha = None
Small_Diff = None
method = None
Malpha = None
aaDist = None
RateAncestor = None
aaRatefile = None
icode = None
alpha = None
seqtype = None
omega = None
getSE = None
noisy = None
Mgene = None
kappa = None
model = None
ndata = None

将选项设置为 None 值将导致 codeml 忽略它(它将从最终的控制文件中省略)。选项可以通过 set_option() 函数设置,它们的值可以通过 get_option() 函数检索

>>> cml.set_options(clock=1)
>>> cml.set_options(NSsites=[0, 1, 2])
>>> cml.set_options(aaRatefile="wag.dat")
>>> cml.get_option("NSsites")
[0, 1, 2]

NSsites 选项值得特别注意:在 codeml 控制文件中,NSsites 模型以空格分隔的数字列表形式输入,例如 0 1 2,而在 Codeml 对象中,它以 Python 列表形式存储。

最后,可以从现有的 codeml 控制文件中读取选项,也可以写入新文件。写入文件不是必需的,因为在执行 run() 方法时会自动完成此操作(见下文)。要读取的控制文件作为 read_ctl_file() 方法的参数提供,而 write_ctl_file() 方法写入 Codeml 对象的 ctl_file 属性

>>> cml.read_ctl_file("codeml.ctl")
>>> cml.print_options()
verbose = 1
CodonFreq = 2
cleandata = 1
fix_blength = None
NSsites = 0
fix_omega = 0
clock = 0
ncatG = 8
runmode = 0
fix_kappa = 0
fix_alpha = 1
Small_Diff = 5e-07
method = 0
Malpha = 0
aaDist = 0
RateAncestor = 1
aaRatefile = dat/jones.dat
icode = 0
alpha = 0.0
seqtype = 2
omega = 0.4
getSE = 0
noisy = 9
Mgene = 0
kappa = 2
model = 2
ndata = None

>>> cml.ctl_file = "control2.ctl"
>>> cml.write_ctl_file()

运行程序

执行对象的 run() 方法将运行 codeml,并使用当前选项,并将解析后的结果返回到字典对象中(见下文)。您还可以向 run() 方法传递一些可选参数

如果 codeml 进程以错误退出,则会引发 PamlError 异常。

read() 和结果

如前所述,Codeml.run() 方法返回一个字典,其中包含从 codeml 的主要输出文件中解析的结果。或者,可以使用 read() 函数解析现有的输出文件

results = codeml.read()

结果字典按层次结构组织,并且(在大多数情况下)根据输出文件中使用的术语进行键控。数值会自动转换为数值 Python 类型。由于 codeml 的输出根据使用的参数而变化很大,因此结果字典的内容也会相应变化。同样,在运行时错误的情况下,结果字典可能是空的或缺少内容。因此,建议使用 Python 的 dict.get(key) 方法而不是 dict[key],以优雅地处理缺少的元素。

结果字典的所有可能键按以下方式组织

baseml & yn00

basemlyn00 的接口在以下模块中提供

from Bio.Phylo.PAML import baseml, yn00

bml = baseml.Baseml()
yn = yn00.Yn00()

BasemlYn00Codeml 共享相同的方法和属性,因此以相同的方式使用。但是,应该注意,Yn00 没有树属性,因为 yn00 不需要树文件。

Baseml

在 Baseml 选项中可用的参数是

>>> bml.print_options()
verbose = None
cleandata = None
fix_blength = None
nparK = None
model_options = None
clock = None
ncatG = None
runmode = None
fix_kappa = None
fix_alpha = None
noisy = None
method = None
fix_rho = None
Malpha = None
nhomo = None
RateAncestor = None
icode = None
rho = None
alpha = None
getSE = None
Small_Diff = None
Mgene = None
kappa = None
model = None
ndata = None

Baseml 结果文件的所有可能内容是

Yn00

Yn00 选项中可用的参数是

>>> yn.print_options()
commonf3x4 = None
weighting = None
icode = None
ndata = None
verbose = None

Yn00 结果文件的所有可能内容是

chi2

chi2 模块提供了一种简单的方法来从卡方累积分布函数中检索似然比检验的 p 值,这些检验在使用 PAML 程序时经常执行。在当前版本的 PAML 中,chi2 程序不允许将检验统计量和自由度作为命令行参数传递。因此, chi2 模块目前包含 Ziheng Yang 的原始代码的纯 Python 重新实现。在大多数情况下,这不会影响您,但是使用非常大的自由度(例如在 codeml 中的 FMutSel 与 FMutSel0 模型测试中(41 个自由度)),此 Python 版本的运行速度明显慢于原始版本。

要检索 p 值,只需导入模块

from Bio.Phylo.PAML.chi2 import cdf_chi2

并使用 cdf_chi2() 函数

>>> df = 2
>>> statistic = 7.21
>>> cdf_chi2(df, statistic)
0.027187444813595696