Function quantifies the degree of modularity between two or more hypothesized modules of Procrustes shape variables and compares this to patterns found by randomly assigning landmarks into subsets
modularity.test(
A,
partition.gp,
iter = 999,
CI = FALSE,
seed = NULL,
opt.rot = TRUE,
print.progress = TRUE
)
A 3D array (p x k x n) containing Procrustes shape variables for all specimens, or a matrix (n x variables)
A list of which landmarks (or variables) belong in which partition: (e.g. A, A, A, B, B, B, C, C, C)
Number of iterations for significance testing
A logical argument indicating whether bootstrapping should be used for estimating confidence intervals
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.
A logical argument for whether the optimal rotation for CR should be used for landmark data (default = TRUE)
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 "CR" is a list containing the following
Covariance ratio: The estimate of the observed modular signal.
The bootstrapped 95 percent confidence intervals of the CR, if CI = TRUE.
The bootstrapped CR values, if CI = TRUE
The empirically calculated P-value from the resampling procedure.
The multivariate effect size associated with sigma.d.ratio.
For more than two partitions, the pairwise CRs among partitions.
The CR calculated in each of the random permutations of the resampling procedure.
The number of random permutations used in the resampling procedure.
The match call.
The function quantifies the degree of modularity in two or more hypothesized modules of Procrustes shape variables,
and compares this to what is expected under the null hypothesis of random assignment
of variables to partitions (i.e., neither modular nor integrated structure).
Input may be either a 2D matrix of phenotypic values, or a 3D array of Procrustes shape variables. It
is assumed that the landmarks have previously been aligned using Generalized Procrustes Analysis (GPA); e.g.,
with gpagen
. The degree of modularity is quantified using the CR coefficient (Adams 2016). If more than
two modules are defined, the average pairwise CR coefficient is utilized. The CR coefficient for the observed modular
hypothesis is then compared to a distribution of values obtained by randomly assigning landmarks into subsets, with the
restriction that the number of landmarks in each subset is identical to that observed in each of the original partitions.
A significant modular signal is found when the observed CR coefficient is small relative to this distribution (see Adams 2016).
Such a result implies that there is significantly greater independence among modules than is expected under the null
hypothesis of random associations of variables (neither modular nor integrated structure). This
result is consistent with the identification of significant modular structure in the data.
In addition, a multivariate effect size describing the strength of the effect is
estimated from the empirically-generated sampling distribution (see details in Adams and Collyer 2019).
A histogram of coefficients obtained via
resampling is presented, with the observed value designated by an arrow in the plot. For landmark data, the CR coefficient
found from the average CR across a 90 degree rotation of the data is used as the test statistic (see Adams 2016). For all
data, the CR coefficient is returned, and (optionally) its 95
for landmark data, estimation of the CI can take some time to compute.
Landmark groups can be defined using define.modules
, or made by hand (see example below).
To use this method with other data (i.e., a set of length measurements), the input A should be a matrix
of n rows of specimens and variables arranged in columns.
In this case, the partition.gp input should have each variable assigned to a partition.
The generic functions, print
, summary
, and plot
all work with modularity.test
.
The generic function, plot
, produces a histogram of random CR values associated with the resampling procedure.
Adams, D.C. 2016.Evaluating modularity in morphometric data: Challenges with the RV coefficient and a new test measure. Methods in Ecology and Evolution 7:565-572.
Adams, D.C. and M.L. Collyer. 2019. Comparing the strength of modular signal, and evaluating alternative modular hypotheses, using covariance ratio effect sizes with morphometric data. Evolution. 73:2352-2367.
two.b.pls
, integration.test
, phylo.modularity
, and
phylo.integration
# NOT RUN {
data(pupfish)
Y.gpa<-gpagen(pupfish$coords, print.progress = FALSE) #GPA-alignment
#landmarks on the body and operculum
land.gps<-rep('a',56); land.gps[39:48]<-'b'
MT <- modularity.test(Y.gpa$coords,land.gps,CI=FALSE,iter=49)
## NOTE: for actual analysis one should increase iterations!
summary(MT) # Test summary
plot(MT) # Histogram of CR sampling distribution
# Result implies modularity present
# }
Run the code above in your browser using DataLab