Learn R Programming

phytools (version 2.3-0)

phylosig: Compute phylogenetic signal with two methods

Description

Calculate phylogenetic signal using two different methods (Pagel, 1999; Blomberg et al., 2003).

Usage

phylosig(tree, x, method="K", test=FALSE, nsim=1000, se=NULL, start=NULL,
   control=list(), niter=10)
# S3 method for phylosig
plot(x, ...)

Value

The function returns an object of class "phylosig". With default arguments (method="K", test=FALSE, and se=NULL), this will be a single numeric value. Otherwise, if (method="K"), it will consist of a list with up to the following elements:

K

value of the K-statistic.

sig2

rate of evolution, \(\sigma^2\), for estimation with sampling error.

logL

log-likelihood, for estimation with sampling error.

P

optionally, the P-value from the randomization test.

If (method="lambda"), it will be a list with up to the following elements:

lambda

fitted value of \(\lambda\).

sig2

rate of evolution, \(\sigma^2\), for estimation with sampling error.

logL

log-likelihood.

logL0

log-likelihood for \(\lambda=0\).

P

P-value of the likelihood ratio test.

convergence

value for convergence, for estimation with sampling error only. (See optim).

message

message from optim, for estimation with sampling error only.

Arguments

tree

a phylogenetic tree in "phylo" format.

x

vector containing values for a single continuously distributed trait. In the case of the plot method, x is an object of class "phylosig".

method

method to compute signal: can be "K" or "lambda".

test

logical indicating whether or not to conduct a hypothesis test of "K" or "lambda".

nsim

for method="K", number of simulations in randomization test.

se

named vector containing the standard errors for each species.

start

vector of starting values for optimization of (respectively) \(\sigma^2\) and \(\lambda\). Only used in method="lambda" and se!=NULL.

control

list of control parameters for multidimensional optimization, implemented in optim. Only used in method="lambda" and se!=NULL.

niter

number of iterations for likelihood optimization of \(\lambda\) (if se!=NULL), or the number of intervals between 0 and the maximum possible value of \(\lambda\) for univariate optimization of \(\lambda\) (if se==NULL).

...

optional arguments for plot method.

Author

Liam Revell liam.revell@umb.edu

Details

This function computes phylogenetic signal using two different methods. It can also conduct the hypothesis tests for significant phylogenetic signal, and estimate phylogenetic signal incorporating sampling error following Ives et al. (2007).

\(\lambda\) optimization is performed using optimize with the range of \(\lambda\) set between 0 and the theoretical upper limit of \(\lambda\) (determined by the relative height of the most recent internal node on the tree).

plot.phylosig creates either a plot of the null distribution of K or a likelihood surface, depending on the value of method.

References

Blomberg, S. P., T. Garland Jr., and A. R. Ives (2003) Testing for phylogenetic signal in comparative data: Behavioral traits are more labile. Evolution, 57, 717-745.

Ives, A. R., P. E. Midford, and T. Garland Jr. (2007) Within-species variation and measurement error in phylogenetic comparative biology. Systematic Biology, 56, 252-270.

Pagel, M. (1999) Inferring the historical patterns of biological evolution. Nature, 401, 877-884.

Revell, L. J. (2024) phytools 2.0: an updated R ecosystem for phylogenetic comparative methods (and other things). PeerJ, 12, e16505.

Examples

Run this code
## load data from Garland et al. (1992)
data(mammal.tree)
data(mammal.data)
## extract characters of interest
ln.bodyMass<-log(setNames(mammal.data$bodyMass,
    rownames(mammal.data)))
ln.homeRange<-log(setNames(mammal.data$homeRange,
    rownames(mammal.data)))
## compute phylogenetic signal K
K.bodyMass<-phylosig(mammal.tree,ln.bodyMass,
    test=TRUE)
print(K.bodyMass)
plot(K.bodyMass)
K.homeRange<-phylosig(mammal.tree,ln.homeRange,
    test=TRUE)
print(K.homeRange)
plot(K.homeRange)
## compute phylogenetic signal lambda
lambda.bodyMass<-phylosig(mammal.tree,ln.bodyMass,
    method="lambda",test=TRUE)
print(lambda.bodyMass)
plot(lambda.bodyMass)
lambda.homeRange<-phylosig(mammal.tree,ln.homeRange,
    method="lambda",test=TRUE)
print(lambda.homeRange)
plot(lambda.homeRange)

Run the code above in your browser using DataLab