Function calculates net rates of shape evolution for two or more groups of species on a phylogeny from a set of Procrustes-aligned specimens
compare.evol.rates(A, phy, gp, iter = 999, seed = NULL,
method = c("simulation", "permutation"), print.progress = TRUE)
A 3D array (p x k x n) containing GPA-aligned coordinates for all specimens, or a matrix (n x variables)
A phylogenetic tree of class phylo - see read.tree
in library ape
A factor array designating group membership
Number of iterations for significance testing
An optional argument for setting the seed for random permutations of the resampling procedure. If left NULL (the default), the exact same P-values will be found for repeated runs of the analysis (with the same number of iterations). If seed = "random", a random seed will be used, and P-values will vary. One can also specify an integer for specific seed values, which might be of interest for advanced users.
One of "simulation" or "permutation", to choose which approach should be used to assess significance.
A logical value to indicate whether a progress bar should be printed to the screen. This is helpful for long-running analyses.
An object of class "evolrate" returns a list with the following components:
The ratio of maximum to minimum net evolutionary rates.
The significance level of the observed ratio.
The phylogenetic net evolutionary rate for each group of species on the phylogeny.
The sigma values found in random permutations of the resampling procedure.
The number of random permutations used.
The function compares net rates of morphological evolution for two or more groups of species on a phylogeny, under a
Brownian motion model of evolution. It is assumed that the landmarks have previously been aligned
using Generalized Procrustes Analysis (GPA) [e.g., with gpagen
]. The approach is based on the outer-product matrix of
between species differences in morphospace after phylogenetic transformation (Adams 2014). From the data the net rate of shape evolution
for each group in the multi-dimensional space is calculated, and a ratio of rates is obtained. If three or more groups of species are used, the ratio of
the maximum to minimum rate is used as a test statistic (see Adams 2014). The function can be used with univariate data (i.e.
centroid size) if imported as matrix with rownames giving the taxa names.
The generic functions, print
, summary
, and plot
all work with compare.evol.rates
.
The generic function, plot
, produces a histogram of random rate-ratios associated with
the resampling procedure.
Significance testing is now accomplished in one of two ways. First, phylogenetic simulation may be used, in which tips data are obtained under Brownian motion using a common evolutionary rate pattern for all species on the phylogeny. Specifically, the common evolutionary rate matrix for all species is used, with the multi-dimensional rate used along the diagonal elements (see Denton and Adams 2015). This procedure is more general than the original simulation procedure, and retains the desirable statistical properties of earlier methods, and under a wider array of data types. Second, significance may be accomplished via permutation, where data values at the tips are permuted relative to the (see Adams and Collyer 2018). This procedure is shown to retain all appropriate statistical properties, including rotation-invariance of significance levels (see results of Adams and Collyer 2018).
Adams, D.C. 2014. Quantifying and comparing phylogenetic evolutionary rates for shape and other high-dimensional phenotypic data. Syst. Biol. 63:166-177.
Denton, J.S.S., and D.C. Adams. 2015. A new phylogenetic test for comparing multiple high-dimensional evolutionary rates suggests interplay of evolutionary rates and modularity in lanternfishes (Myctophiformes; Myctophidae). Evolution. 69:2425-2440.
Adams, D.C. and M.L. Collyer. 2018. Multivariate comparative methods: evaluations, comparisons, and recommendations. Systematic Biology. 67:14-31.
# NOT RUN {
data(plethspecies)
Y.gpa<-gpagen(plethspecies$land) #GPA-alignment
gp.end<-factor(c(0,0,1,0,0,1,1,0,0)) #endangered species vs. rest
names(gp.end)<-plethspecies$phy$tip
ER<-compare.evol.rates(A=Y.gpa$coords, phy=plethspecies$phy,method="simulation",gp=gp.end,iter=999)
summary(ER)
plot(ER)
# }
Run the code above in your browser using DataLab