Skip to contents

Calculate the path distance between rooted or unrooted trees.

Usage

PathDist(tree1, tree2 = NULL)

Arguments

tree1, tree2

Trees of class phylo, with leaves labelled identically, or lists of such trees to undergo pairwise comparison. Where implemented, tree2 = NULL will compute distances between each pair of trees in the list tree1 using a fast algorithm based on Day1985;textualTreeDist.

Value

PathDist() returns a vector or distance matrix of distances between trees.

Details

This function is a faster alternative to the function path.dist() in the phangorn package, which can crash if the internal representation of trees does not conform to certain (unspecified) expectations, and which treats all trees as unrooted.

The path distance is calculated by tabulating the cladistic difference (= topological distance) between each pair of tips in each tree. A precursor to the path distance Farris1969TreeDist took the mean squared difference between the elements of each tree's tabulation (Farris, 1973); the method used here is that proposed by Steel1993;textualTreeDist, which takes the square root of this sum. Other precursor measures are described in Williams1971;textualTreeDist and Phipps1971;textualTreeDist.

If a root node is present, trees are treated as rooted. To avoid counting the root edge twice, use UnrootTree(tree) before calculating the path distance.

Use of the path distance is discouraged as it emphasizes shallow relationships at the expense of deeper (and arguably more fundamental) relationships Farris1973TreeDist.

References

Examples

library("TreeTools")

# Treating the two edges to the root node as distinct
PathDist(BalancedTree(7), PectinateTree(7))
#> [1] 5.656854

# Counting those two edges once
PathDist(UnrootTree(BalancedTree(7)), UnrootTree(PectinateTree(7)))
#> [1] 4.690416

PathDist(BalancedTree(7), as.phylo(0:2, 7))
#> [1] 8.944272 8.124038 8.944272
PathDist(as.phylo(0:2, 7), PectinateTree(7))
#> [1] 7.745967 8.246211 8.124038

PathDist(list(bal = BalancedTree(7), pec = PectinateTree(7)),
        as.phylo(0:2, 7))
#>          [,1]     [,2]     [,3]
#> [1,] 8.944272 8.124038 8.944272
#> [2,] 7.745967 8.246211 8.124038

PathDist(as.phylo(30:33, 8))
#>          1        2        3
#> 2 3.872983                  
#> 3 3.872983 3.464102         
#> 4 5.567764 6.928203 6.928203