Scripts for calculating , a phylogenetic analog of the Shannon entropy for measuring the degreed of phylogenetic signal between a categorical trait (trait vector) and a phylogeny (metric-tree).
Make sure you have the ape package installed before running the examples or using these scripts. Also, load the code.R.
library(ape)
source(code.R)
Upload your phylogenetic tree. We exemplify with the newick format:
newick_tree <- "PASTE_NETWICK_TREE_HERE"
tree <- read.tree(text=newick_tree)
plot(tree)
It is important to guarantee that all the branches are positive as this method requires a metric-tree (i.e., branch_lengths > 0). Here, we take 1% of the 1% quantile to fill in the null branches:
tree$edge.length[tree$edge.length==0] <- quantile(tree$edge.length,0.1)*0.1
Now, we need to define the trait vector. Confirm that the trait order follows the species order in the tree; # you can see the species order by typing: tree$tip.label.
trait <- c(PASTE_YOUR_TRAIT_VECTOR_HERE)
Now, we calculate delta:
deltaA <- delta(trait,tree,0.1,0.0589,10000,10,100)
When running the delta function you may experience this warning message: Warning message: In sqrt(diag(solve(h))) : NaNs produced. Don't worry about it; it just tells me that the standard deviations of some of your rate parameters could not be calculated, and these aren't used anyways.
We can also calculate p-values. Here, we shuffle the trait vector using the function delta (for 100 iterates) and create a vector of random deltas that will work as our null hypothesis. Then we compute the probability p(random_delta>deltaA) in the null distribution, which returns the p-value.
random_delta <- rep(NA,100)
for (i in 1:100){
rtrait <- sample(trait)
random_delta[i] <- delta(rtrait,tree,0.1,0.0589,10000,10,100)
}
p_value <- sum(random_delta>deltaA)/length(random_delta)
boxplot(random_delta)
abline(h=deltaA,col="red")
- if p-value < level_of_test (generally 0.05), there is evidence of phylogenetic signal between the trait and the character
- if p-value > level_of_test there is no evidence for phylogenetic signal or the trait is saturated
Rui Borges, João Paulo Machado, Cidália Gomes, Ana Paula Rocha, Agostinho Antunes; Measuring phylogenetic signal between categorical traits and phylogenies, Bioinformatics, https://doi.org/10.1093/bioinformatics/bty800