phylosignal_M {phylosignalDB} | R Documentation |
Measure and test phylogenetic signal with M statistic
Description
phylosignal_M
computes the M statistic for trait(s) and evaluates
its statistical significance through a random permutation test.
The M statistic is a unified method for detecting phylogenetic signals in continuous traits,
discrete traits, and multi-trait combinations.
Blomberg and Garland (2002) provided a widely accepted statistical definition of
the phylogenetic signal, which is the "tendency for related species to resemble
each other more than they resemble species drawn at random from the tree".
The M statistic strictly adheres to the definition of phylogenetic signal,
formulating an index and developing a method of testing in strict accordance
with the definition, instead of relying on correlation analysis or evolutionary models.
The novel method equivalently expressed the textual definition of the phylogenetic signal
as an inequality equation of the phylogenetic and trait distances and constructed the M statistic.
Usage
phylosignal_M(
trait_dist = NULL,
phy = NULL,
reps = 999,
auto_multi2di = TRUE,
output_M_permuted = FALSE,
cores = 1
)
Arguments
trait_dist |
A distance object of class |
phy |
A phylogenetic tree of class |
reps |
An integer. The number of random permutations. |
auto_multi2di |
A logical switch, |
output_M_permuted |
A logical switch, |
cores |
Number of cores to be used in parallel processing.
Default is 1, indicating no parallel computation is performed.
If set to 0, parallel computation is executed using |
Value
A list object containing two components.
Component $permuted
is the vector of M values obtained after random permutation for reps
times;
component $observed
is the value of M statistic obtained from the original input data.
References
Blomberg, S.P. & Garland, T., Jr (2002) Tempo and mode in evolution: phylogenetic inertia, adaptation and comparative methods. Journal of Evolutionary Biology, 15(6): 899-910.
See Also
Examples
data("turtles")
# Continuous trait
trait_df <- data.frame(M1 = turtles$traits$M1, row.names = turtles$traits$specie)
trait_dist <- gower_dist(x = trait_df)
phylosignal_M(trait_dist, turtles$phylo, reps = 99) # reps=999 better
# Nominal discrete trait
trait_df <- data.frame(B1 = turtles$traits$B1, row.names = turtles$traits$specie)
trait_dist <- gower_dist(x = trait_df, type = list(factor = 1))
phylosignal_M(trait_dist, turtles$phylo, reps = 99) # reps=999 better
# Ordinal discrete trait
trait_df <- data.frame(CS1 = turtles$traits$CS1, row.names = turtles$traits$specie)
trait_dist <- gower_dist(x = trait_df, type = list(ordered = 1))
phylosignal_M(trait_dist, turtles$phylo, reps = 99) # reps=999 better
# Multi-trait Combinations
trait_df <- data.frame(turtles$traits[, c("M1", "M2", "M3", "M4", "M5")],
row.names = turtles$traits$specie)
trait_dist <- gower_dist(x = trait_df, type = list(factor = c("M4", "M5")))
phylosignal_M(trait_dist, turtles$phylo, reps = 99) # reps=999 better