Phylogenetic signal analysis with the phylosignal package

Data

First, we load the package phylosignal and the dataset carnivora from adephylo.

library(phylosignal)
library(adephylo)
library(ape)
library(phylobase)
data(carni19)

Here is a phylogenetic tree of 19 carnivora species.

tre <- read.tree(text=carni19$tre)

And we create a dataframe of 3 traits for the 19 carnivora species. - Body mass - Random values - Simulated values under a Brownian Motion model along the tree

dat <- list()
dat$mass <- carni19$bm
dat$random <- rnorm(19, sd = 10)
dat$bm <- rTraitCont(tre)
dat <- as.data.frame(dat)

We can combine phylogeny and traits into a phylo4d object.

p4d <- phylo4d(tre, dat)

Visualizing the data

barplot.phylo4d(p4d, tree.type = "phylo", tree.ladderize = TRUE)

Measuring and testing the signal for each trait and different methods

phyloSignal(p4d = p4d, method = "all")
## $stat
##             Cmean          I          K     K.star       Lambda
## mass    0.5493887  0.3921068 0.71277467 0.71549137 9.640762e-01
## random -0.3354830 -0.2511157 0.08616936 0.08755503 6.846792e-05
## bm      0.3203271  0.2564642 0.44872615 0.45260713 9.954983e-01
## 
## $pvalue
##        Cmean     I     K K.star     Lambda
## mass   0.001 0.001 0.001  0.001 0.00100000
## random 0.984 0.984 0.915  0.934 1.00000000
## bm     0.021 0.009 0.001  0.002 0.01228289

Assessing the behavior of these methods with this phylogeny along a Brownian-Motion influence gradient

phylosim <- phyloSim(tree = tre, method = "all", nsim = 100, reps = 99)
plot(phylosim, stacked.methods = FALSE, quantiles = c(0.05, 0.95))

plot.phylosim(phylosim, what = "pval", stacked.methods = TRUE)

Assessing the signal depth with correlograms

mass.crlg <- phyloCorrelogram(p4d, trait = "mass")
random.crlg <- phyloCorrelogram(p4d, trait = "random")
bm.crlg <- phyloCorrelogram(p4d, trait = "bm")

plot(mass.crlg)

plot(random.crlg)

plot(bm.crlg)

Locating the signal with LIPA

carni.lipa <- lipaMoran(p4d)
carni.lipa.p4d <- lipaMoran(p4d, as.p4d = TRUE)

barplot.phylo4d(p4d, bar.col=(carni.lipa$p.value < 0.05) + 1, center = FALSE , scale = FALSE)

barplot.phylo4d(carni.lipa.p4d, bar.col = (carni.lipa$p.value < 0.05) + 1, center = FALSE, scale = FALSE)