我是MATLAB的新手,如果这个问题很简单,请耐心等待。
我最近遇到了函数seqneighborjoin
。我正在努力找出它的伪代码解释,并找出函数调用返回值的数据结构到底是什么。
例如,z = seqneighborjoin(D, treemethod)
。什么是z
?我知道所有这些都可以通过检查函数seqneighborjoin
本身来回答。但功能本身有点复杂。
我在这里发帖,只是想知道有没有其他方法可以获得明确的伪代码解释?我感谢你的时间和关注。
编辑:好的。这就是我今天所做的。这是代码。names=arrayfun ( @num2str, 1:4, 'unif', 0);
d=[0,2,5,4,5,5];
z=seqneighjoin(d,'equivar',names);
get(z,'pointers')
squareform(pdist(z))
这就是我得到的:
ans =
2 3
1 5
4 6
ans =
0 3.0000 3.5000 5.0000
3.0000 0 0.5000 5.0000
3.5000 0.5000 0 5.5000
5.0000 5.0000 5.5000 0
我理解第一个矩阵在那里做什么。令我惊讶的是,对于第二矩阵,即使节点1和2之间的距离为0,这里该矩阵的(1,2)对根本不为零。有谁理解为什么?我们有两个完全相同的物种(序列),如果稍后应用集群功能,它们是否有机会进入不同的集群?
答案 0 :(得分:0)
seqneighjoin
的文档页面提供了三个参考资料,详细解释了它使用的算法:
[1] Saitou,N。和Nei,M。(1987)。邻接法:一种重建系统发育树的新方法。分子生物学与进化4(4),406-425。
[2] Gascuel,O。(1997)。 BIONJ:基于简单的序列数据模型的NJ算法的改进版本。分子生物学与进化14 685-695。
[3] Studier,J.A.,Keppler,K.J。 (1988)。关于Saitou和Nei的邻接算法的注记。分子生物学与进化5(6)729-731。
seqneighjoin
的输出是phytree
对象,其中包含有关树结构,叶子和分支的名称,距离等的所有信息。
如果您输入doc phytree
,您会找到一个描述如何直接构建phytree
对象的页面(而不是seqneighjoin
);在页面底部,您会找到一个链接phytree object
,该链接提供phytree
对象本身的文档,例如如何从中提取上述信息,如何查看,等等上。
答案 1 :(得分:0)
NJ假设可加性(从i到j的距离应等于树中从i到j的路径的分支长度之和)。 在您的情况下,d(a,b)= 0,但d(a,c)= 2不等于d(b,c)= 4。因此矩阵不是加法的,并且得到的树不准确。