此模块提供与 PAML(最大似然法系统发育分析)程序包的接口。目前,已包含对 codeml、baseml 和 yn00 程序以及 chi2 的 Python 重新实现的接口。
此模块在 Biopython 1.58 及更高版本中可用。
要使用此模块,您必须在系统上安装 PAML 4.1 或更高版本。
codeml 接口在以下模块中提供
from Bio.Phylo.PAML import 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()
方法传递一些可选参数
verbose
(布尔值):默认情况下,codeml 的屏幕输出被抑制;将此参数设置为 True
以查看生成的所有输出。如果 codeml 失败并且您需要查看其错误消息,这很有用。parse
(布尔值):设置为 False
以跳过解析结果。 run()
将改为返回 None
ctl_file
(字符串):提供现有控制文件的路径以执行。该文件不会被解析并读取到 Codeml
的选项字典中。如果设置为 None
(默认值),选项字典将写入控制文件,然后由 codeml 使用。command
(字符串):提供 codeml 可执行文件的路径。默认情况下,此值设置为“codeml”,因此,如果该程序在您的系统路径中,则应该足够。如果它不在您的系统路径中,或者例如,如果您使用多个版本的 PAML,您可以改为提供可执行文件的完整路径。如果 codeml 进程以错误退出,则会引发 PamlError
异常。
如前所述,Codeml.run()
方法返回一个字典,其中包含从 codeml 的主要输出文件中解析的结果。或者,可以使用 read()
函数解析现有的输出文件
results = codeml.read()
结果字典按层次结构组织,并且(在大多数情况下)根据输出文件中使用的术语进行键控。数值会自动转换为数值 Python 类型。由于 codeml 的输出根据使用的参数而变化很大,因此结果字典的内容也会相应变化。同样,在运行时错误的情况下,结果字典可能是空的或缺少内容。因此,建议使用 Python 的 dict.get(key)
方法而不是 dict[key]
,以优雅地处理缺少的元素。
结果字典的所有可能键按以下方式组织
对 baseml 和 yn00 的接口在以下模块中提供
from Bio.Phylo.PAML import baseml, yn00
bml = baseml.Baseml()
yn = yn00.Yn00()
Baseml
和 Yn00
与 Codeml
共享相同的方法和属性,因此以相同的方式使用。但是,应该注意,Yn00
没有树属性,因为 yn00 不需要树文件。
在 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
选项中可用的参数是
>>> yn.print_options()
commonf3x4 = None
weighting = None
icode = None
ndata = None
verbose = None
Yn00
结果文件的所有可能内容是
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