Understanding patterns of phenotypic evolution among sets of taxa must include an accounting for the lack of independence among species due to shared ancestry. When observations are species means, for example, one’s data cannot be treated as independent because phylogenetic relation creates an expected covariance (see Adams & Collyer (2018) for further information).
As such, linear models such as the Procrustes ANOVA
must be performed in a phylogenetic context in such situations. Similar
to procD.lm, the procD.pgls function allows
the user to perform an ANOVA/regression with morphometric variables with
the added feature that it accounts for the expected similarity among
species as a result of phylogenetic relatedness. This is done via a
phylogenetic transformation matrix, estimated under a Brownian motion
model, that is used to transform the X and Y variables.
procD.pgls() (Expand for more details)
This function performs a Procrustes ANOVA in a phylogenetic framework. The required input is a data frame, although the more specific geomorph data frame is recommended. Please note that some of the arguments for this function are not addressed here, but can be found in the Advanced Options section below.
With respect to the sums of squares (SS.type) argument, one’s choice should be determined in large part by one’s data. Each of the three SS types assign variation to variables in different ways. Type I (sequential) SS generally should not be used when one has two or more independent variables (factorial designs) because, as the name suggests, variation will be assigned in the order in which they appear in the formula and do not account for one another. With more than one independent variable, this could incorrectly inflate the importance of the first variable. Type II (hierarchical) sums of squares is best used when there is no interaction term in one’s formula. Finally, type III (marginal/partial) SS returns the effect of each variable as if it were entered last in the formula in a standard type I analysis.
The approach to using this function is essentially the same as for procD.lm. We begin by aligning our landmark
data, and creating a geomorph data frame.
Y.gpa <- gpagen(plethspecies$land, print.progress = F)
gdf <- geomorph.data.frame(Y.gpa, phy = plethspecies$phy)
Now we perform the fit:
fit <- procD.pgls(coords ~ Csize, phy = phy, data = gdf, print.progress = F)
To view a summary of the overall results, simply use this code:
summary(fit)
##
## Analysis of Variance, using Residual Randomization
## Permutation procedure: Randomization of null model residuals
## Number of permutations: 1000
## Estimation method: Generalized Least-Squares (via OLS projection)
## Sums of Squares and Cross-products: Type I
## Effect sizes (Z) based on F distributions
##
## Df SS MS Rsq F Z Pr(>F)
## Csize 1 0.006812 0.0068121 0.15732 1.3068 0.55586 0.299
## Residuals 7 0.036490 0.0052129 0.84268
## Total 8 0.043302
##
## Call: procD.lm(f1 = coords ~ Csize, iter = iter, seed = seed, RRPP = TRUE,
## SS.type = SS.type, effect.type = effect.type, int.first = int.first,
## Cov = Cov, data = data, print.progress = print.progress)
Here, each row corresponds to one of the comparisons specified in our formula, and each column is a result for that comparison.
Further, this function produces an object of class “procD.pgls”, which is a list containing the following:
procD.pgls Output
The following is the full output for the procD.pgls
function. Any of these subsets can be accessed using the $
operator.