
节选了其中的部分内容进行翻译 。此文章的原文可在Kate dNA的博客上找到: http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( 二 )/ 。
第一部分 : http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档(一)/
第三部分 : http://stupidbeauty.com/KNA/2011/04/ phylip3-69文档翻译:主文档( 三 )/
菜单是很直观的。一般是这样的 (这个是 Dnapars 的菜单):
|
DNA parsimony algorithm, version 3.6 Setting for this run: U Search for best tree? Yes S Search option? More thorough search V Number of trees to save? 10000 J Randomize input order of sequences? No. Use input order O Outgroup root? No, use as outgroup species 1 T Use Threshold parsimony? No, use ordinary parsimony N Use Transversion parsimony? No, count all steps W Sites weighted? No M Analyze multiple data sets? No I Input sequences interleaved? Yes 0 Terminal type (IBM PC, ANSI, none)? ANSI 1 Print out the data at start of run No 2 Print indications of progress of run Yes 3 Print out tree Yes 4 Print out steps in each site No 5 Print sequences at all nodes of tree No 6 Write out trees onto tree file? Yes Y to accept these or type the letter for one to change |
如果你准备接受这些默认选项(在上面的例子中 ,它们已经显示出来咯 ),那么你可以输入 Y ,再按回车 ( Enter ) 键。如果你想要改变什么选项的话 ,就输入菜单中相应条目左边的字母。例如,要设置阈值 ,就输入 T 。小写的字母也可以的 。对于很多选项,程序都会询问更多的信息,例如阈值的具体值。
注意 Terminal type (终端类型)条目,所有程序的菜单中都会有这个 。它允许你指明你的屏幕的终端类型 。选项包括:IBM PC屏幕、ANSI标准终端或者none (无) 。输入零( 0 )就会在这 3个选项中循环 切换,每输入一次 0 就切换一次 。如果其中的某一个正适合你的终端的话 ,就会在显示菜单之前清屏 。如果没有哪一个是适合的 ,那么就应当选择 none 选项。程序应当会自动选择一个合适的终端选项 ,但是万一它们没有选中正确的那个勒,就该你出马手动选择一个咯。这对Retree 程序尤其重要 ,它会在屏幕上显示一棵树-如果终端类型是错误的,那么显示出来的树就是惨不忍睹的。
其它的一些数字选项控制的是各种各样的信息是显示到屏幕上还是输出到文件里。 Print indications of progress of run (输出运行进度的信息) 这个选项会显示出一些进度信息 ,例如在将物种添加到树中时输出物种的名字 ,以及输出重新组织树时的进度。你通常是需要看到这个的 ,以确认程序还是在正常运行,并且估计一下程序将要运行多久。但是如果你以 “后台”方式运行这个程序,比如在一个多任务和多用户系统中运行 ,但是又没有将这个程序放到它自己的窗口中去 ,那么你可能要关掉这个选项 ,这样的话它就不会在运行的时候打扰你咯 。另外注意菜单中的选项3 ,"Print out tree(显示出树)"。当你在多个数据集上运行程序 ,并且将要使用输出的树文件中的树的时候,这个选项就会有用 。在那种情况下 ,可能就要关掉这个选项咯 ,尤其是当那些文件会很大的时候。
大部分程序(通常)将它们的输出内容写入到一个outfile 文件中,而生成的树一般会输出到 outtree 文件中 。
输出文件的内容,对于不同的程序是不同的,而且也跟你设置的选项有关。对于很多程序来说 ,如果你把所有可能的输出选项都选中咯 ,那么输出内容将包含 :(1)程序的名字和版本号;(2)某些输入信息;(3)一系列的系统发生史结果,某些还会带有附加信息 ,它们会指出在每个字符上或者在树的每个部分发生咯多大的变化。一个典型的有根树是这样的 : (使用等宽字体来看)
|
+-------------------Gibbon +----------------------------2 ! ! +------------------Orang ! +------4 ! ! +---------Gorilla +-----3 +--6 ! ! ! +---------Chimp ! ! +----5 --1 ! +-----Human ! ! ! +-----------------------------------------------Mouse ! +------------------------------------------------Bovine |
对这个树的解读是很直观的:它从左向右 “生长”。那些分叉处的数字是随机的 ,(如果有的话)只是用来区分不同的分叉的。很多程序产生的树都是无根的 。有根树与无根树看起来的样子差不多 ,但是在无根树中会有这样一个警告 :
remember: this is an unrooted tree! (记住,这是一棵无根树!)
以提示这是一棵无根树,并警告用户不要太在意树的根的位置。(数学家把无根树叫做树,然而不幸的是某些分类学家用 “网络” 这个术语来称呼无根树 。这与标准的数学用法是冲突的 ,因为 “网络”这个名字是用来称呼另一种完全不同的图的)。这棵树的根可以在任何地方 ,比如说引出 Mouse 的那条线 。作为练习 , 看看你能不能确定下面这棵树与上面那棵树是否等价的 :
|
+-----------------------------------------------Mouse ! +---------4 +------------------Orang ! ! +------3 ! ! ! ! +---------Chimp ---6 +----------------------------1 ! +----2 ! ! +--5 +-----Human ! ! ! ! ! +---------Gorilla ! ! ! +-------------------Gibbon ! +-------------------------------------------Bovine remember: this is an unrooted tree! |
(它们是相同的)。还有一点很 重要 ,所输出的树中的片段的长度可能是无意义的 :某些片断表示的可能是长度为零的分支,因为没有证据证明那些分支的长度是大于 0的。在某些树中 ,会尝试按照估计的分支长度的比例来输出长度 ,但是在其它的一些树中那些长度的调整不过是为咯让拓扑显示得更直观而已。你需要仔细阅读对应的程序的文档,以搞清楚树中的分支长度所代表的意义 。上面的那棵树中 ,尝试着准确地显示出分支的长度。但是甚至在那些情况下 ,某些短分支的长度也有可能被刻意拉长以让树的拓扑显得更清晰。下面是Dnapars 中的一棵树 ,没有按照估计的分支长度来绘制那些线的长度 :
|
+--Human +--5 +--4 +--Chimp ! ! +--3 +-----Gorilla ! ! +--2 +--------Orang ! ! +--1 +-----------Gibbon ! ! --6 +--------------Mouse ! +-----------------Bovine remember: this is an unrooted tree! |
当一棵树有分支长度时,就会有一个伴随的表格 ,在其中显示出每个分支中末端的节点的编号 (或者名字),以及那个分支的长度。对于上面的第一棵树 ,对应的表格是:
|
Between And Length Approx. Confidence Limits ------- --- ------ ------- ---------- ------ 1 Bovine 0.90216 ( 0.50346, 1.30086) ** 1 Mouse 0.79240 ( 0.42191, 1.16297) ** 1 2 0.48553 ( 0.16602, 0.80496) ** 2 3 0.12113 ( zero, 0.24676) * 3 4 0.04895 ( zero, 0.12668) 4 5 0.07459 ( 0.00735, 0.14180) ** 5 Human 0.10563 ( 0.04234, 0.16889) ** 5 Chimp 0.17158 ( 0.09765, 0.24553) ** 4 Gorilla 0.15266 ( 0.07468, 0.23069) ** 3 Orang 0.30368 ( 0.18735, 0.41999) ** 2 Gibbon 0.33636 ( 0.19264, 0.48009) ** * = significantly positive, P < 0.05 ** = significantly positive, P < 0.01 |
无视那些星号和近似置信限(approximate confidence limit),那些东西将在 Dnaml 的文档里说明 ,我们就可以看到这个表格给出咯一个更精确的关于分支长度的概念。类似的表格还存在于距离矩阵程序、似然性程序 、以及简约法程序Dnapars 和Pars 中。
软件包中的某些简约法程序可以输出一个表格,其中是这棵树里不同的字符 (或者位点)所需要的步数。刚开始,这个表格可能不是很直观。下面是一个典型的例子:
|
steps in each site: 0 1 2 3 4 5 6 7 8 9 *----------------------------------------- 0! 2 2 2 2 1 1 2 2 1 10! 1 2 3 1 1 1 1 1 1 2 20! 1 2 2 1 2 2 1 1 1 2 30! 1 2 1 1 1 2 1 3 1 1 40! 1 |
顶部和侧面的数字指明咯当前指的是哪个位点。所以位点23就是"20"这一行的"3"这一列 ,它的步数是1。
在输出文件中还会有很多其它类型的信息。不同的程序有不同的信息 ,我们将在特定程序的文档里描述它们。
在多数程序的输出中,还会将一棵树的信息写入到树文件 outtree 中 。那棵树是用嵌套的括号来表示的 ,括号里面包含的是名字,名字是由逗号隔开的。我们在下面描述这种表示方法。如果在名字中有任何的空格的话 ,它们必须被替换成下划线" _ "。名字末尾的空格可能会被无视 。 括号的模式表明咯树的模式 : 每对括号都将一个单元组的全部成员包括在其中。下面是个树文件的例子 :
|
((Mouse,Bovine),(Gibbon,(Orang,(Gorilla,(Chimp,Human))))); |
在这棵树中,第一个分叉将 Mouse 和 Bovine 所在的线与其它物种所在的线分开咯 。在后一个组中 ,一个分叉将 Gibbon 与其它部分分开咯,等等等等。整棵树是被最外一层括号包起来的 。树的最后以一个分号结尾。在某些程序中 ,例如Dnaml、Fitch和Contml,树是无根的。一棵无根树最下面的分叉应该是一个三分叉 ,就是二个逗号隔开三个组:
|
(A,(B,(C,D)),(E,F)); |
在这个例子中,底部节点的三个组是 A 、(B,C,D)和(E,F) 。那个三路的分叉对应着无根树的某个内部节点 (可以是树中的任意一个内部节点)。当你从第一个节点移开你的目光时 ,就会注意到其它的分叉咯。在某些新的程序中 ,是可以允许剩下的分叉也是多叉 (多路分叉) 的 。你可以看看你使用的程序的文档 ,确认一下它生成的树会是什么样子。注意 ,很多实际上处理无根树的程序 (比如Dnapars)会在树文件中以有根树的形式输出 !这样做的原因是 ,会存在随机的内部记录。树根的位置是随意确定的。我们正 在努力让所有的程序能够读取所有的树 ,无论是有根的还是无根的 、 多叉的还是二叉的 ,并且让它们能够做出正确的行为 。但这是一个长期目标,目前还没实现。
对于那些会推断分支长度的程序,也会在树文件中输出分支长度,它们是以实数的方式输出的,跟在冒号后面,并且放在组从分支中下降的地方 。下面是一个有分支长度的典型的树 :
|
((cat:47.14069,(weasel:18.87953,((dog:25.46154,(raccoon:19.19959, bear:6.80041):0.84600):3.87382,(sea_lion:11.99700, seal:12.00300):7.52973):2.09461):20.59201):25.0,monkey:75.85931); |
注意,树文件可能在除咯一个名字中间或者除咯一个分支长度的中间以外的任何地方换行,当然咯 ,在写入到树文件中去的树里,只会在逗号后面换行。
这种表示树的方法是某个标准的一个子集,那个标准是在1986 年 6 月 24 日由进化学会 (Society for the Study of Evolution) 的一个非正式的委员会 (它的最后一次会议是在 Newick 的 龙虾餐馆开的 -所以名叫Newick 标准) 在一次口头会议上确定的 ,这个委员会包括Wayne Maddison (MacClade 的作者)、David Swofford (PAUP)、F. James Rohlf (NTSYS-PC)、Chris Meacham (COMPROB和原始的PHYLIP 画树程序)、James Archie、William H.E. Day和我。这个标准是 PHYLIP的格式的一般化 ,它本身是基于一个著名的用括号模式来表示树的方法的 ,这个方法源自于著名的数学家Arthur Cayley ,它已经存在咯大约一个世纪。这个标准现在被很多系统发生推论程序采用 ,但是遗憾的是还没有正式的文档来描述它 。由我和Gary Olsen 写的描述可以在网站上找到 :
http://evolution.gs.washington.edu/phylip/newicktree.html
大部分程序都有各种各样的选项,它们控制着向程序提供哪些信息以及程序对这些信息做什么。在菜单中选择那些选项。
菜单中的以下选项是广泛使用的,所以放在这里来说明: U (用户树)、 G (全局)、 J (混杂(Jumble))、 O (另外分组(Outgroup))、 W (权重)、 T (阈值)、 M (多个数据集)和树输出选项。
U ( 用户树 ) 选项 。这个选项在默认设置和用户树设置之间切换。默认设置允许程序搜索最佳树。而用户树设置会从输入的树文件里面读入一棵或者多棵树( “用户树” ),并且评估它们。输入的树文件的默认文件名是 intree 。在很多情况下 ,那些程序还会允许在最开始有一行里面说明树的个数 :
|
((Alligator,Bear),((Cow,(Dog,Elephant)),Ferret)); ((Alligator,Bear),(((Cow,Dog),Elephant),Ferret)); ((Alligator,Bear),((Cow,Dog),(Elephant,Ferret))); |
以前,是必须在开头有一行来说明树的个数的,但是现在可以省略这個东西咯。某些程序要求输入有根树 ,某些要求无根树,还有些能够处理多叉树。你应当阅读那些程序的文档 ,搞清楚它们的要求。可以用Retree 程序来将树在那些形式之间转换 (在Retree 中保存一棵树时,会询问你是要保存成有根的还是无根的)。
如果使用用户树选项的话,就要仔细检查括号的匹配。那些程序不一定总能识别出一棵树是否是正确的 ,而如果它不是正确的树的话可能就会导致崩溃 (希望如此,但不是必然发生的 ,那样的话就会有一条错误消息指明所发生的错误 )。由程序输出的树一般都是有正确的格式的 。
G ( 全局 ) 选项 。在那些构造树的程序中(除咯Neighbor 、那些 "...penny"程序 、 Clique和那些由你亲自来构造树的"...move"程序之外),当所有的物种都添加到树里面去之后 ,会有一个重排(rearrangement)步骤。在大部分程序中 ,重排是自动以全局模式进行的 ,在这种模式下 ,子树会从树中删除并且放置到所有可能的地方 ,以增加找到一个更优的树的机会。由于这很耗时间 (大概会使时间变成三倍),所以在某些程序中是由一个选项来控制的 ,尤其是Contml、Fitch和Dnaml。在这些程序中 ,G菜单选项能够在默认的局部重排与全局重排之间切换。下面将会更细致地说明重排过程。
J ( 混乱 ) 选项 。在大部分的树构造程序(除咯那些"...penny"程序和Clique 以外)中,搜索不同的树的具体过程依赖于物种输入的顺序。在这些程序中 ,可以使用 J 选项来让程序依据一个随机数生成器来选择输入物种的顺序。可以通过在菜单中选择 J 来切换这个选项 。接下来程序会让你为随机数生成器输入一个 “种子”。种子必须是1 到2 32 -3 (4,294,967,293) 之间的一个整数 ,而且必须是 4 n +1 的形式,也就是说它被4 除时余数为1 。可以通过观察那个数的最后两位数字来判断 (例如,在上面给出的上限中 ,最后两位数字是93,它是4 n +1 这个形式的 )。每个不同的种子都会导致在添加物种时的一个不同的序列。通过简单地改变随机数种子并且重新运行程序 ,你就可以找到其它的更好的树。如果输入的种子不是奇数,那么程序不会继续执行 ,而是询问另一个种子。
混乱选项还会询问你要重新启动程序多少次。如果你回答的是 10 的话 ,那么程序会尝试按照 10种不同的顺序来添加物种,构造树,并且输出的结果会反映出整个搜索过程 (就是说 ,在整个 10次运行过程中的最优树会被输出,而不是每次运行过程中的最优树 )。
有些人问过,用什么值做随机数的种子比较好呢 。随机数种子是用来启动那个选择 “随机”(实际上是伪随机的)数的过程的,那个过程起来好像是不可预测地从0 到2 32 -1 (就是4,294,967,295)之间随机选择咯数字。你可以输入133 ,就会发现下一个随机数是221,381,825。由于它们是足够不可预测的 ,所以没有哪个数是比另一个数好一些的 ,只要那些数是 4 n +1 的形式就行咯 。然而,如果重复使用某个随机数种子的话 ,那么得到的随机数序列将与前一次相同 ,导致对物种的顺序的选择也是完全相同的 ,这可能不是你想要的。
O ( 单独分组 ) 选项 。这个选项指定的是将哪个物种放到树的根部的线上。例如 ,如果单独分组选项的值是"Mouse"的话 ,那么树的根就会位于连接到这个物种的分支的中间 ,Mouse 所在的分支位于根节点的一个子节点 ,而树的其它部分位于另一个子节点 。可通过在菜单中选择 O (是字母 O ,而不是数字 0 ) 来切换这个选项 。当这个选项被激活时 ,程序就会提示你输入单独分组的物种的编号 (物种的编号是按照它们在输入文件中的顺序来的)。如果你输入 6 再按回车键的话 ,就会指定将数据中的第 6 个物种(如果有多个数据集 ,则是第1个数据集中的第 6 个物种 )作为单独分组的物种 。在以下情况下 , 单独分组选项可能不会被程序采用 :依据另外方面的考虑已经为这棵树构建咯一个根 ,或者这是一棵用户自 定义的树 。所以像 Dollop 这样只产生有根树的程序不提供单独分组选项 。还有Kitsch 、 Dnamlk和Clique 这些程序也不提供 。当这个选项被使用时 ,那棵树在打印时仍然是无根树 ,只是那个单独分组物种被连接到最底部的节点上咯 ,这样就可以轻易地将它转换成有根树。
T ( 阈值 ) 选项 。 这个选项为那些简约法程序设置咯一个阈值 ,如果某个字符的步数超过咯阈值的话 ,就会用阈值来作为它的值 ,而不是使用实际的步数。默认阈值是一个足够大的数 ,这样它永远不会被超过(在这种情况下那些步数都会被老老实实地记录)。使用菜单中的 T 选项来切换这个 ,并且会要求用户提供一个阈值。使用阈值来形成一种位于简约法和兼容性法之间的折衷方法 ,这是在我的1981b 论文里描述的。当 T 选项有效时 ,程序会询问一个数值来作为阈值。这应当是一个大于1 的正实数 。在Mix 、 Move 、 Penny 、 Protpars 、 Dnapars 、 Dnamove和Dnapenny 这些程序中 ,不要使用小于或者等于1.0 的阈值,因为它们没有意义,并且将导致生成的树只取决于物种的输入顺序 ,而根本不会取决于字符的状态数据 !在Dollop 、 Dolmove和Dolpenny 这些程序中 ,阈值永远不要小于或等于0.0 ,原因是一样的。 T选项是一个重要并且没有被充分使用的选项:例如,它是这个软件包中唯一 (除咯Dnacomp 程序之外)的一个能够在数据不全的情况下进行兼容法分析的途径。它是一个将频繁出现的字符降权的方法。我希望有更多的人了解到它的属性。
M ( 多数据集 ) 选项 。在很多程序中都有一个M 菜单选项,它使用你可以启用多数据集选项 。程序会询问你 ,将会有多少数据集。那些数据集都与第一个数据集的格式相同。这是一个 (很小的)输入文件,其中有2个数据集,每个当中有5个物种:
|
5 6 Alpha CCACCA Beta CCAAAA Gamma CAACCA Delta AACAAC Epsilon AACCCA 5 6 Alpha CACACA Beta CCAACC Gamma CAACAC Delta GCCTGG Epsilon TGCAAT |
这个选项的主要作用是允许这些程序中所有的方法都被引导(bootstrapped)。使用Seqboot 程序 ,你可以读入任意数量的DNA、蛋白质、限制性位点、基因频率或者二进制字符数据集,并且通过自举来制造出多个数据集。可以使用选项 M 来为所有的这些数据产生树 。如果那些选项有效的话 ,它们就会被写入到输出的树文件里去 。然后可以在Consense 程序中把那个树文件当作输入文件来使用 。得到的结果是一个多数规则一致性树 ,可以用来计算置信区间 。在当前版本的软件包中 ,允许使用Seqboot、Consense 和M 选项来对软件包中的很多方法进行引导。
Dnaml、Dnapars和Pars 这些程序可以输入多个权重。然后它们就可以做引导咯 :诗篇一个数据集 ,以及一个权重文件,这个文件会展示出在每次引导采样中每个字符 (或者位点)是如何被重新计算权重 的 。所以 ,在一个引导采样中被无视的位点相当于拥有的权重为0,而一个被双倍复制的位点相当于拥有的权重为2 。Seqboot有一个菜单选项,可以自动产生那个记录着权重信息的文件 ,而不是产生一个记录着多个数据集的文件。它可以重命名 ,再用作输入的权重文件。
W ( 权重 ) 选项 。这个选项告诉程序:除咯那个数据集之外,你还想读入一系列的权重 ,它们指出咯每个字符被计数咯多少次 。如果某个字符的权重是零 ( 0 ),那么那个字符就相同于在评估树的时候被无视咯 。如果是( 1 )的话 ,那个字符的计数就是1.某些程序还允许权重大于1 。这些权重的效果就是 ,那个字符相当于出现了那么多次 ,所以 ,一个为 4 的权重表示那个字符被计数咯4 次。0-9 的值表示的权重是0 从到9 ,而A-Z 的值表示的权重是10 从到35。通过使用权重 ,我们可以给某些字符赋予压倒性的权重,这样就可以在分析过程中将其它字符无视咯。在那些分子序列程序中 ,只允许0 和1 两个权值。
权重可以用来分析那些字符中的子集,还可以用来在自举和剪切式重采样中对数据进行重采样 。对于那些允许大于1的权重的程序来说 ,它们还可以用来对某些字符的信息进行加强 。当然,你必须有根据地做这件事 。
权重是以一个数字序列的方式提供的。所以它们可能是这样的
10011111100010100011110001100
默认地,权重是在一个叫 weights 的文件里提供的。在那个文件里 ,权重就是一个简单的由数字组成的字符串。文件中的空白被跳过 ,并且权重可以写在多行里。像 Seqboot 这样的程序还可以输出一个包含权重的文件,输入权重的文件的默认文件名是 inweights ,输出权重的文件的默认文件名是 outweights 。
权重可用来分析那些字符中的不同的子集(将余下的部分的权重设为 零 ) 。另外,在那些离散字符程序中 ,它们还可以用来强制使用一组特定的物种出现在系统发生史中 (相当于限制在只包含那个组的系统发生史中)。是这样做到的 :加上一个想象的字符 ,它对于那个组中的成员的权重都是1,而对其它物种是 0.然后 ,给那个假想的字符赋予最大的权重:结果就是 ,任何不包含那个组的系统发生史都会被重重地罚分 ,以至于不会 (除非在最极端的情况下)被考虑。当然,新的字符向树中带来咯额外的步数 ,但是它们的值都是可以提前计算出来的 ,这样在报告结果的时候可以从总数中减掉。对权重的使用很重要 ,而可悲的是 , 它被很多可以从中获益的用户忽略掉咯 。对于分子序列 勒,我们无法以这种方式使用权重,所以 ,要想强制让某个组出现的话,我们需要添加一个很大的额外的位点片断到分子上,针对那个组使用 (比如说)A,针对其它物种使用C。
用来向一个树文件中输出树的选项 。这个选项表示,你希望这个程序不仅将树输出到常规的输出设备上 ,还要输出到一个文件中 ,并且使用嵌套式括号格式(前面介绍过)。这个选项很有用 ,所以在允许这个选项的程序中都是默认启用的 。你可以将它关掉 ,只需要输入菜单中对应的数字 (在不同程序中是不一样的)就行咯。这个选项是用来创建可以直接被其它程序读取的树文件的 ,这些程序包括一致性树程序 、树距离程序和树绘图程序。
输出的树文件的默认名字是outtree 。
( 0 ) 终端类型选项。(是数字0 ,不是字母 O )。程序会采用一个特定的默认值 (对于Linux 、 Unix或者Mac OS X 就是ANSI ,对于 Windows 就是 IBM PC)。你可以自己选择 ,换成IBM PC,或者空 (nothing) 。这个选项会影响这些东西 :程序在显示菜单的时候清屏的能力 ,以及在Dnamove 、 Move 、 Dolmove和Retree 这些程序中用来显示树的图形字符 。在Windows 系统中 ,无 论选择IBM PC 还是ANSI ,屏幕都能正确地清除,但是Move 、 Dnamove 、 Dolmove或者Retree 这些程序所需要的图形字符只有在采用IBM PC 设置的情况下才能正确显示 。
HxLauncher: Launch Android applications by voice commands