大型多序列比对异常点的灵活识别、可视化和剔除模块
spruceup的Python项目详细描述
整修
A
TCG
ACGTA
T
用于发现、可视化和删除大型多序列比对中异常序列的工具。
如果您正在使用此程序,请引用本出版物:
此脚本使用numpy,scipy,matplotlib,psutil,tqdm,和treeswift
安装和要求
您可以下载一个压缩的github存储库,如果您的系统上安装了git,则可以克隆它,或者使用pip安装(推荐)从python包索引
spruceup
要求您使用python 3.6或更高版本。您可以在Python3.7的早期版本中使用spruceup
,但从今天(2019年8月12日)起,如果使用Python3.7.4,您可能会遇到安装问题。应自动安装依赖项。如果您的系统没有python 3.6或更新版本,则需要下载并安装它。在类似linux的系统(包括ubuntu)上,您可以使用
sudo apt-get install python3.6
最好在安装spruceup之前创建一个新环境,可以使用venv
:
python3 -m venv spruceup
或者如果您有conda:
conda create --name spruceup python=3.6
现在激活您的环境(使用conda您可以键入conda activate spruceup)并安装:
pip install spruceup
接口
成功安装spruceup
后,您将需要1)在fasta
、phylip
或nexus
格式中对齐,2)(可选)在newick
格式中对齐的指导树,以及3)配置文件来运行程序。要从命令行运行程序,可以键入:
spruceup.py my-configuration-file.conf
目录示例
包含模板配置文件。它有以下字段:
[输入]
输入
类别定义输入对齐的参数及其类型。
输入文件名
是要处理的对齐的文件路径。
输入格式
指示对齐文件的格式。它可以是五种流行格式之一:fasta
,phylip
,phylip int
(交错phylip),nexus
,以及nexus int
。
数据类型
告诉程序您的比对是否包含氨基酸(AA
)或DNA核苷酸(NT
)。
距离对象文件
是现有距离对象的文件名。因为有时您需要调整截止值或截止标准,而计算距离是分析中最耗时的部分,spruceup
保存一个json
格式文件,其中包含与每个分析的距离。默认情况下,这是空的,但是如果您确实有一个与以前的分析有距离的文件,并且您想用新的截断来修剪对齐,请在这里提供json
文件名。spruceup
将使用新的修剪截断和/或标准运行,但无需重新计算距离。
指南树
是一个系统图或分类图newick
格式文件,用作指南树。树可以使用任何方法推断,并且可以完全解析或包含多原子。如果不提供指导树,程序仍将运行,但如果没有系统发育,则识别未对齐序列的信息将更少。这是特别小鬼Ortant在具有远相关样本的可变序列中,在这种情况下,很难区分真正可变序列和未对齐片段。如果您怀疑并主要关注具有伪长终端分支的样本,则可以提供仅拓扑(cladogram)导向树和/或在没有导向树的情况下运行程序。
[分析]
分析类定义用于分析和清理对齐的参数。
核
用于计算距离的CPU核数。
距离法
选择用未修正的
计算未修正的p-距离,或用jc
计算朱克斯-坎托修正的距离
窗口大小
选择要在计算距离的窗口中包含多少字符(a a/nt)。对大多数路线都有效的默认值是20
重叠
指示每个滑动窗口与前一个窗口重叠的字符数(aa/nt)。重叠15
和窗口大小20
意味着每个新窗口将向下移动5个位置,并与前一个窗口重叠15个字符。减少重叠将减少计算负担,因为将创建更少的窗口。默认值是15
(默认窗口大小的三分之二20
),但如果对齐非常大,并且您希望减少计算时间和内存使用,并且不介意牺牲精确到一定程度。
分数
表示将用于计算每个窗口中平均距离的otu/样本的比例。当分数设置为1.0
时,将根据校准中的所有其他OTU计算每个OTU的距离。分数设置为0.5
时,每个OTU的距离将根据代表路线中50%OTU的随机样本计算。降低这一数字将有助于加快与大量分类相一致的计算速度。
标准
选择如何确定异常值距离。如果使用mean
(推荐),则为每个otu计算的这些值的简单倍数将被视为确定异常值的截止值。lognorm
意味着alognormal distribution将适用于每个otu的距离数据,并通过指定观测分位数来确定截止值,高于该分位数的序列将被视为异常值。
截断
指定多个被视为截断的值。如果使用mean
作为标准,请使用这些值的倍数,例如5,30
等。对于lognorm
标准,请使用1
的分数,例如0.9,0.995
等。对于大多数路线,应使用的默认值为0.9,0.95,0.97,0.99,0.995,0.999
表示lognorm
和5,10,15,18,20,25,30
表示mean
。在初始分析之后,您始终可以使用其他条件和截止值进行修剪(请参见下面解释输出下的第5点)。如果对齐包含许多饱和或对齐不良的站点,则低设置可能会导致从原始对齐中修剪大量数据。这很耗时,在使用spruceup
或从列表中删除较低的截止值之前,您可能需要使用更严格的"块"方法修剪对齐。
手动切断阀
是一个可选设置,允许手动修改单个OTU的切断阀。如果只有一个或几个样本有相当比例的排列不好的序列,使它们的整体截止线倾斜,这样它们就不会被标记出来,那么它可能被证明是有用的。如果你发现这个是的,但是,您可能更应该检查您的数据和管道错误!
[输出]
输出
类别告诉程序如何以及在何处保存分析结果。
output_file_aln
是修剪输出对齐的名称。保存在您机器上的实际名称将有一个表示使用截止值的前缀。
输出格式
修剪对齐的文件格式。从fasta
,phylip
,phylip int
,nexus
或nexus int
中选择
报告
包含将序列标记为异常值的信息的文件的名称。实际名称的前缀表示使用的截止值。
日志
是所有分析屏幕输出的日志的名称。
示例和结果解释
要使用spruceup
您需要从命令行运行spruceup
脚本,并提供配置文件的名称作为参数:
spruceup.py ./examples/config_example.conf
运行脚本后,序列对齐将被划分为多个与指定大小和重叠的窗口。然后脚本将计算每个窗口中每个otu(样本/分类单元)的距离。默认情况下,这是按全部完成的,如果指定,则按OTU的小数部分完成。您将看到一些消息,其中包括一个进度条,它将显示迭代次数(窗口)和剩余时间,因为我们是用于计算距离的最大内存量。
计算完所有距离后,标准
和截止值
设置将确定哪些窗口被视为异常值,应从对齐中修剪。当使用lognorm
标准时,指定分位数0.99
意味着位于给定otu到该窗口中其他out的距离的99%以上的任何序列窗口都将被视为异常值,应将其删除。理论上,设置0.99
应该意味着每个otu将删除1%的所有序列窗口。实际上,这不是真的,因为现实生活中的序列数据并不完全符合对数正态分布。截止值为常数时,某些otu可能有许多离群(未对齐)序列片段和超过1%的序列数据被删除,而其他otu可能没有未对齐片段和离群值。
现在,您可以返回到配置文件并尝试其他截断或方法,而无需重新计算距离(除非您希望使用不同的校正或缩放)。使用[input]
类别下的distances\u object\u file
选项,简单地加载生成的json
文件(见下文)。
解释输出
spruceup
生成几种类型的输出:
以后缀
-report.txt
结尾的报表文件,其中一个文件是为指定的每个截断写入的,该截断由前缀表示(例如0.95
,0.99
等等)。这些文件包含每个otu的距离截止值,以及哪些序列窗口被确定为异常值并被删除。以后缀
-trimmed.fas/phylip/nexus结尾的修剪对齐文件,同样,每个截断值对应一个。这些是与已删除的异常值窗口的对齐。
距离分布
png
绘图,每个otu和截止值一个。这些图像可用于检查每个分类单元的距离分布,其与对数正态分布的拟合,以及在给定截止值的情况下放置在每个otu上的截止值。
下面是距离图的一个例子。头是otu的名称。X轴表示距离到其他otu,范围从0
到为otu找到的最大距离。y轴指定相对窗口数。蓝色条构成距离的柱状图。橙色线是拟合的对数正态分布(仅在使用lognorm
标准时显示),垂直虚线表示截止点,高于该点的任何窗口都将被视为异常值并被删除。
下面的第一个示例图显示了一个具有相对平滑的距离分布的otu和具有极值的几个序列窗口,它们都不大于0.2
。您可能无法将单个窗口距离视为可见的直方图条,因为分布包括数千(在这个小示例中)到几十万的距离。
下图显示了一个分布不太平滑的otu,由于缺少数据,总体序列减少了序列,如直方图条的高度和许多异常值窗口所示。
这两个例子都在相同的截断值下进行了处理,0.95,0.97,0.99
拟合对数正态分布的分位数,但在排列不好的数据中,最后一个落在计算距离值之外。这些曲线图,再加上对报告文件和路线的视觉检查,应该可以作为指导,告诉您哪些标准和截止值对您的数据集最有意义。
- 日志文件
这是一个日志文件,它将包含终端屏幕上显示的相同信息,不包括进度条。它将记录程序采取了哪些步骤,它们的时间,显示在每个截断处修剪了多少/多少比例的站点的信息,并输出写入的文件名。
- 距离python对象文件
使用spruceup
计算距离通常是过程中最耗时和最耗费内存的部分,尽管从对齐中修剪大量位置也可能需要很长时间。因此,每次从头开始运行分析时,spruceup都会编写一个json
格式文件,允许您稍后加载分析,并使用不同的标准或截止值进行修剪。请注意,距离对于每个窗口大小、重叠和分类单元部分都是特定的,如果要调整这些参数,则需要重新运行整个分析。请注意,json
文件可能相当大,每100000个窗口150 MB,100个分类单元。
问题与发展
如果在运行代码时遇到错误或问题,请在github上新建一个问题。我们鼓励每个人都贡献自己的力量。