Fits models for trait evolution of discrete (binary) characters, evaluating sampling uncertainty.

samp_discrete(
  data,
  phy,
  n.sim = 30,
  breaks = seq(0.1, 0.5, 0.1),
  model,
  transform = "none",
  bounds = list(),
  n.cores = NULL,
  track = TRUE,
  ...
)

Arguments

data

Data vector for a single binary trait, with names matching tips in phy.

phy

A phylogeny (class 'phylo') matching data.

n.sim

The number of times species are randomly deleted for each break.

breaks

A vector containing the percentages of species to remove.

model

The Mkn model to use (see Details).

transform

The evolutionary model to transform the tree (see Details). Default is none.

bounds

settings to constrain parameter estimates. See fitDiscrete

n.cores

number of cores to use. If 'NULL', number of cores is detected.

track

Print a report tracking function progress (default = TRUE)

...

Further arguments to be passed to fitDiscrete

Value

The function tree_discrete returns a list with the following components:

call: The function call

data: The original full data vector

optpar: Transformation parameter used (e.g. lambda, kappa etc.)

full.model.estimates: Parameter estimates (transition rates q12 and q21), AICc and the optimised value of the phylogenetic transformation parameter (e.g. lambda) for the full model without deleted species.

break.summary.tab: Summary per break of the mean and median effects of species removal on percentage and absolute change in parameters q12 and q21.

sensi.estimates: Parameter estimates (transition rates q12 and q21),(percentual) difference in parameter estimate compared to the full model (DIFq12, sigsq.q12,sDIFq12, DIFq21, optpar.q21,sDIFq21), AICc and the optimised value of the phylogenetic transformation parameter (e.g. lambda) for each analysis with a species deleted.

optpar: Transformation parameter used (e.g. lambda, kappa etc.)

Details

This function randomly removes a given percentage of species (controlled by breaks), fits different models of discrete character evolution using fitDiscrete, repeats this this many times (controlled by n.sim), stores the results and calculates the effects on model parameters Currently, only binary discrete traits are supported.

Different character model from fitDiscrete can be used, including ER (equal-rates), SYM (symmetric), ARD (all-rates-different) and meristic (stepwise fashion).

Transformations to the phylogenetic tree from fitDiscrete can be used, i.e. none, EB, lambda, kappa anddelta.

See fitDiscrete for more details on character models and tree transformations.

Output can be visualised using sensi_plot.

References

Paterno, G. B., Penone, C. Werner, G. D. A. sensiPhy: An r-package for sensitivity analysis in phylogenetic comparative methods. Methods in Ecology and Evolution 2018, 9(6):1461-1467

Yang Z. 2006. Computational Molecular Evolution. Oxford University Press: Oxford.

Harmon Luke J, Jason T Weir, Chad D Brock, Richard E Glor, and Wendell Challenger. 2008. GEIGER: investigating evolutionary radiations. Bioinformatics 24:129-131.

Werner, G.D.A., Cornwell, W.K., Sprent, J.I., Kattge, J. & Kiers, E.T. (2014). A single evolutionary innovation drives the deep evolution of symbiotic N2-fixation in angiosperms. Nature Communications, 5, 4087.

See also

Examples

if (FALSE) { #Load data: data("primates") #Create a binary trait factor adultMass_binary<-ifelse(primates$data$adultMass > 7350, "big", "small") adultMass_binary<-as.factor(as.factor(adultMass_binary)) names(adultMass_binary)<-rownames(primates$data) #Model trait evolution accounting for sampling size samp_binary<-samp_discrete(data = adultMass_binary,phy = primates$phy[[1]], n.sim=25,breaks=seq(.1,.3,.1),model = "SYM",transform = "none",n.cores = 2,track = TRUE) #Print summary statistics summary(samp_binary) sensi_plot(samp_binary) sensi_plot(samp_binary,graphs=1) sensi_plot(samp_binary,graphs=2) #Use a different evolutionary model or transformation samp_binary2<-samp_discrete(data = adultMass_binary,phy = primates$phy[[1]], n.sim=25,breaks=seq(.1,.3,.1),model = "ARD",transform = "lambda",n.cores = 2,track = TRUE) summary(samp_binary2) sensi_plot(samp_binary2) sensi_plot(samp_binary2,graphs=1) sensi_plot(samp_binary2,graphs=3) }