The Neighbor-Joining algorithm is
another quick clustering technique, which attempts to approximate
the least squares tree, this time relying strongly on the
additivity (and its implied corollaries) but without resorting to the assumption of a molecular
clock. The idea here is to join clusters that are not only close
to one another, but are also far from the rest. In each iteration,
the algorithm attempts to find the direct ancestor of two species
in the tree. For node i, its distance ui from the rest of the
tree is estimated using the formula:
.
In order to minimize the sum of all branch
lengths, also known as the minimum-evolution criterion,
the nodes i and j that are clustered next are those for which
Di,j - ui - uj is
smallest as can see in figure 8.10 (the reader is referred to [11] for a more elaborate explanation on this
issue). The lengths
dk,(ij) of the new branches are calculated by solving the same
system of linear equations mentioned earlier in section 8.3.1.
The solutions are written below, in equations 8.8 and
8.9.
Neighbor-Joining has a running time of O(n2), like UPGMA.
Choose the i and j for which
Di,j - ui - uj is smallest.
3.
Join clusters i and j to a new cluster - (ij), with a corresponding
node in T. Calculate the branch lengths from i and j to the new node as:
(7)
4.
Compute the distances between the new cluster and each other cluster:
(8)
5.
Delete clusters i and j from the tables, and replace them by (ij).
6.
If more than two nodes (clusters) remain, go back to
1. Otherwise, connect the two remaining nodes by a
branch of length Di,j.
Figure 8.10:Di,j - ui - uj is the smallest, which means they are close to one anather and far from the rest of the tree, therefore the neighbor-joining algorithm will cluster them together.