Type: Package
Title: Bayesian Fitting of Ornstein-Uhlenbeck Models to Phylogenies
Version: 2.3.2
Date: 2026-02-04
Maintainer: Josef C. Uyeda <juyeda@vt.edu>
Description: Fits and simulates multi-optima Ornstein-Uhlenbeck models to phylogenetic comparative data using Bayesian reversible-jump methods. See Uyeda and Harmon (2014) <doi:10.1093/sysbio/syu057>.
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Depends: ape (≥ 3.0-6), coda, geiger(≥ 2.0), phytools, R (≥ 2.15.0)
Imports: assertthat, denstrip, fitdistrplus, foreach, graphics, grDevices, MASS, Matrix, mnormt, Rcpp (≥ 0.10.3), stats
Suggests: doParallel, testthat
LinkingTo: Rcpp, RcppArmadillo
Encoding: UTF-8
RoxygenNote: 7.3.2
NeedsCompilation: yes
Packaged: 2026-02-11 17:53:47 UTC; juyeda
Author: Josef C. Uyeda ORCID iD [aut, cre], Jon Eastman [ctb], Luke Harmon ORCID iD [ctb], Abhishek Hari [ctb]
Repository: CRAN
Date/Publication: 2026-02-13 17:50:15 UTC

Bayesian Fitting of Ornstein-Uhlenbeck Models to Phylogenies

Description

A package for inferring adaptive evolution to phylogenetic comparative data using Bayesian reversible-jump estimation of multi-optima Ornstein-Uhlenbeck models.

Details

bayou-package

Author(s)

Josef C Uyeda


Return a posterior of shift locations

Description

Return a posterior of shift locations

Usage

Lposterior(chain, tree, burnin = 0, simpar = NULL, mag = TRUE)

Arguments

chain

A bayouMCMC chain

tree

A tree of class 'phylo'

burnin

A value giving the burnin proportion of the chain to be discarded

simpar

An optional bayou formatted parameter list giving the true values (if data were simulated)

mag

A logical indicating whether the average magnitude of the shifts should be returned

Value

A data frame with rows corresponding to postordered branches. pp indicates the posterior probability of the branch containing a shift. magnitude of theta2 gives the average value of the new optima after a shift. naive SE of theta2 gives the standard error of the new optima not accounting for autocorrelation in the MCMC and rel location gives the average relative location of the shift on the branch (between 0 and 1 for each branch).


Function for calculating likelihood of an OU model in bayou using pruning algorithm or matrix inversion

Description

Function for calculating likelihood of an OU model in bayou using pruning algorithm or matrix inversion

Usage

OU.lik(pars, tree, X, SE = 0, model = "OU", invert = FALSE)

Arguments

pars

A list of parameters to calculate the likelihood

tree

A phylogenetic tree of class 'phylo'

X

A named vector giving the tip data

SE

A named vector or single number giving the standard errors of the data

model

Parameterization of the OU model. Either "OU", "QG" or "OUrepar".

invert

A logical indicating whether the likelihood should be solved by matrix inversion, rather than the pruning algorithm. This is primarily present to test that calculation of the likelihood is correct.

Details

This function can be used for calculating single likelihoods using previously implemented methods. It is likely to become deprecated and replaced by bayou.lik in the future, which is based on phylolm's threepoint algorithm, which works on non-ultrametric trees and is substantially faster.

Value

A list returning the log likelihood ("loglik"), the weight matrix ("W"), the optima ("theta"), the residuals ("resid") and the expected values ("Exp").


Calculates the alpha and sigma^2 from a parameter list with supplied phylogenetic half-life and stationary variance

Description

Calculates the alpha and sigma^2 from a parameter list with supplied phylogenetic half-life and stationary variance

Usage

OU.repar(pars)

Arguments

pars

A bayou formatted parameter list with parameters halflife (phylogenetic halflife) and Vy (stationary variance)

Value

A list with values for alpha and sig2.


Experimental phenogram plotting function for set of model of model parameters

Description

Experimental phenogram plotting function for set of model of model parameters

Usage

OUphenogram(pars, tree, dat, SE = 0, regime.col = NULL, ...)

Arguments

pars

A bayou formatted parameter list

tree

A tree of class 'phylo'

dat

A named vector of tip data

SE

Standard error of the tip states

regime.col

A named vector of colors equal in length to the number of regimes

...

Optional arguments passed to phenogram()

Details

This is an experimental plotting utility that can plot a phenogram with a given regime painting from a parameter list. Note that it uses optimization of internal node states using matrix inversion, which is very slow for large trees. However, what is returned is the maximum likelihood estimate of the internal node states given the model, data and the parameter values.

Value

No return value. This function generates a phenogram plot as a side effect.

Examples


tree <- sim.bdtree(n=50)
tree$edge.length <- tree$edge.length/max(branching.times(tree))
prior <- make.prior(tree, dists=list(dk="cdpois", dsig2="dnorm",
           dtheta="dnorm"), param=list(dk=list(lambda=5, kmax=10),
             dsig2=list(mean=1, sd=0.01), dtheta=list(mean=0, sd=3)),
               plot.prior=FALSE)
pars <- priorSim(prior, tree, plot=FALSE, nsim=1)$pars[[1]]
pars$alpha <- 4
dat <- dataSim(pars, model="OU", phenogram=FALSE, tree)$dat
OUphenogram(pars, tree, dat, ftype="off")



Converts OUwie data into bayou format

Description

OUwie2bayou Converts OUwie formatted data into a bayou formatted parameter list

Usage

OUwie2bayou(tree, trait)

Arguments

tree

A phylogenetic tree with states at internal nodes as node labels

trait

A data frame in OUwie format

Value

A bayou formatted parameter list


Calculates the alpha parameter from a QG model

Description

Calculates the alpha parameter from a QG model

Usage

QG.alpha(pars)

Arguments

pars

A bayou formatted parameter list with parameters h2 (heritability), P (phenotypic variance) and w2 (width of adaptive landscape)

Value

An alpha value according to the equation alpha = h2*P/(P+w2+P).


Calculates the sigma^2 parameter from a QG model

Description

Calculates the sigma^2 parameter from a QG model

Usage

QG.sig2(pars)

Arguments

pars

A bayou formatted parameter list with parameters h2 (heritability), P (phenotypic variance) and Ne (Effective population size)

Value

An sig2 value according to the equation alpha = h2*P/(Ne).


Deprecated functions in package bayou.

Description

The functions listed below are deprecated and will be defunct in the near future. When possible, alternative functions with similar functionality are also mentioned. Help pages for deprecated functions are available at help("-deprecated").

Value

This documentation does not return a value. It serves as a reference for deprecated functions in the bayou package.


Function for checking parameter lists, prior and models are consistent and error-free

Description

Function for checking parameter lists, prior and models are consistent and error-free

Usage

bayou.checkModel(
  pars = NULL,
  tree,
  dat,
  pred = NULL,
  SE = 0,
  prior,
  model = "OU",
  autofix = TRUE,
  verbose = TRUE
)

Arguments

pars

A list of parameters that will be specified as starting parameter

tree

An object of class “phylo”

dat

A named data vector that matches the tip lables in the provided tree

pred

A matrix or data frame with named columns with predictor data represented in the specified formula

SE

The standard error of the data. Either a single value applied to all the data, or a vector of length(dat).

prior

A prior function made using make.prior

model

Either one of c("OU", "QG" or "OUrepar") or a list specifying the model to be used.

autofix

A logical that indicates whether certain errors should be automatically fixed.

verbose

Determines whether information is outputted to the console for the user to view

Details

A series of checks are performed, run internally within bayou.makeMCMC, but can also be run on provided inputs prior to this. Errors are reported.

If autofix == TRUE, then the following errors will be automatically corrected:

Branch lengths == 0; any branches of length 0 will be given length .Machine$double.eps is.binary(tree) == FALSE; runs multi2di pars do not match prior$fixed; parameters are resimulated from prior

Value

A list of results of the checks and if 'autofix==TRUE', then ..$autofixed returns a list of all the input elements, with corrections.


Function for calculating likelihood of an OU model in bayou using the threepoint algorithm

Description

Function for calculating likelihood of an OU model in bayou using the threepoint algorithm

Usage

bayou.lik(pars, cache, X, model = "OU")

Arguments

pars

A list of parameters to calculate the likelihood

cache

A bayou cache object generated using .prepare.ou.univariate

X

A named vector giving the tip data

model

Parameterization of the OU model. Either "OU", "QG" or "OUrepar".

Details

This function implements the algorithm of Ho and Ane (2014) implemented in the package phylolm for the OUfixedRoot model. It is faster than the equivalent pruning algorithm in geiger, and can be used on non- ultrametric trees (unlike OU.lik, which is based on the pruning algorithm in geiger).

Value

A list containing:

loglik

The log-likelihood value of the fitted OU model.

theta

A vector of estimated optima for each evolutionary regime.

resid

The residuals, i.e., the differences between observed and expected values.

comp

A list of computed values from the three-point algorithm, including necessary likelihood calculations.

transf.phy

The transformed phylogenetic tree with modified branch lengths based on the model parameters.


Builds a bayouMCMCFn object that can run MCMC and stepping stone analyses.

Description

Runs a reversible-jump Markov chain Monte Carlo on continuous phenotypic data on a phylogeny, sampling possible shift locations and shift magnitudes, and shift numbers.

Usage

bayou.makeMCMC(
  tree,
  dat,
  pred = NULL,
  SE = 0,
  model = "OU",
  prior,
  samp = 10,
  chunk = 100,
  control = NULL,
  tuning = NULL,
  file.dir = tempdir(),
  plot.freq = 500,
  outname = "bayou",
  plot.fn = phenogram,
  ticker.freq = 1000,
  startpar = NULL,
  moves = NULL,
  control.weights = NULL,
  lik.fn = NULL,
  perform.checks = TRUE,
  verbose = TRUE
)

Arguments

tree

a phylogenetic tree of class 'phylo'

dat

a named vector of continuous trait values matching the tips in tree

pred

A matrix or data frame with named columns with predictor data represented in the specified formula

SE

The standard error of the data. Either a single value applied to all the data, or a vector of length(dat).

model

The parameterization of the OU model used. Either "OU" for standard parameterization with alpha and sigma^2; "OUrepar" for phylogenetic half-life and stationary variance (Vy), or "QG" for the Lande model, with parameters h^2 (heritability), P (phenotypic variance), omega^2 (width of adaptive landscape), and Ne (effective population size)

prior

A prior function of class 'priorFn' that gives the prior distribution of all parameters

samp

The frequency at which Markov samples are retained

chunk

The number of samples retained in memory before being written to a file

control

A list providing a control object governing how often and which proposals are used

tuning

A named vector that governs how liberal or conservative proposals are that equals the number of proposal mechanisms.

file.dir

If a character string, then results are written to that working directory. If NULL, then results are not saved to files, but instead held in memory. Default is 'tempdir()', which writes to an R temporary directory.

plot.freq

How often plots should be made during the mcmc. If NULL, then plots are not produced

outname

The prefix given to files created by the mcmc

plot.fn

Function used in plotting, defaults to phytools::phenogram

ticker.freq

How often a summary log should be printed to the screen

startpar

A list with the starting parameters for the mcmc. If NULL, starting parameters are simulated from the prior distribution

moves

A named list providing the proposal functions to be used in the mcmc. Names correspond to the parameters to be modified in the parameter list. See 'details' for default values.

control.weights

A named vector providing the relative frequency each proposal mechanism is to be used during the mcmc

lik.fn

Likelihood function to be evaluated. Defaults to bayou.lik.

perform.checks

A logical indicating whether to use bayou.checkModel to validate model inputs.

verbose

A logical that determines whether information is outputted to the console for the user to view

Details

By default, the alpha, sig2 (and various reparameterizations of these parameters) are adjusted with multiplier proposals, theta are adjusted with sliding window proposals, and the number of shifts is adjusted by splitting and merging, as well as sliding the shifts both within and between branches. Allowed shift locations are specified by the prior function (see make.prior()).

Value

A bayouMCMCFn object (list).


Converts bayou data into OUwie format

Description

bayou2OUwie Converts a bayou formatted parameter list into OUwie formatted tree and data table that can be analyzed in OUwie

Usage

bayou2OUwie(pars, tree, dat)

Arguments

pars

A list with parameter values specifying sb = the branches with shifts, loc = the location on branches where a shift occurs and t2 = the optima to which descendants of that shift inherit

tree

A phylogenetic tree

dat

A vector of tip states

Value

A list with an OUwie formatted tree with mapped regimes and an OUwie formatted data table


Conditional Poisson distribution

Description

cdpois calculates the probability density of a value k from a Poisson distribution with a maximum kmax. rdpois draws random numbers from a conditional Poisson distribution.

Usage

cdpois(k, lambda, kmax, log = TRUE)

rdpois(n, lambda, kmax, ...)

Arguments

k

random variable value

lambda

rate parameter of the Poisson distribution

kmax

maximum value of the conditional Poisson distribution

log

log transformed density

n

number of samples to draw

...

additional parameters passed to dpois or rpois

Value

A numeric value representing the probability (or log-probability) of observing 'k' under the truncated Poisson distribution, or a vector of random values drawn from a truncated Poisson distribution.

Examples

cdpois(10,1,10)
cdpois(11,1,10)
rdpois(5,10,10)

Combine mcmc chains

Description

Combine mcmc chains

Usage

combine.chains(chain.list, thin = 1, burnin.prop = 0)

Arguments

chain.list

The first chain to be combined

thin

A number or vector specifying the thinning interval to be used. If a single value, then the same proportion will be applied to all chains.

burnin.prop

A number or vector giving the proportion of burnin from each chain to be discarded. If a single value, then the same proportion will be applied to all chains.

Value

A combined bayouMCMC chain


Simulates data from bayou models

Description

This function simulates data for a given set of parameter values.

Usage

dataSim(
  pars,
  model,
  tree,
  map.type = "pars",
  SE = 0,
  phenogram = TRUE,
  verbose = TRUE,
  ...
)

Arguments

pars

A bayou formated parameter list

model

The type of model specified by the parameter list (either "OU", "OUrepar" or "QG").

tree

A tree of class 'phylo'

map.type

Either "pars" if the regimes are taken from the parameter list, or "simmap" if taken from the stored simmap in the tree

SE

A single value or vector equal to the number of tips specifying the measurement error that should be simulated at the tips

phenogram

A logical indicating whether or not the simulated data should be plotted as a phenogram

verbose

Determines whether information is outputted to the console for the user to view

...

Optional parameters passed to phenogram(...).

Details

dataSim Simulates data for a given bayou model and parameter set

Value

A list with the following components:

W

Weight matrix based on the OU model and simulated shifts.

E.th

Expected trait values for each tip given the parameter set.

dat

A named vector of simulated continuous trait values.


Half cauchy distribution taken from the R package LaplacesDemon (Hall, 2012).

Description

dhalfcauchy returns the probability density for a half-Cauchy distribution

Usage

dhalfcauchy(x, scale = 25, log = FALSE)

phalfcauchy(q, scale = 25)

qhalfcauchy(p, scale = 25)

rhalfcauchy(n, scale = 25)

Arguments

x

A parameter value for which the density should be calculated

scale

The scale parameter of the half-Cauchy distributoin

log

A logical indicating whether the log density should be returned

q

A vector of quantiles

p

A vector of probabilities

n

The number of observations

Value

A numeric vector:

If 'log = FALSE'

The probability density of 'x' under the half-Cauchy distribution.

If 'log = TRUE'

The logarithm of the probability density.


Probability density function for the location of the shift along the branch

Description

Since unequal probabilities are incorporated in calculating the density via dsb, all branches are assumed to be of unit length. Thus, the dloc function simply returns 0 if log=TRUE and 1 if log=FALSE.

Usage

dloc(loc, min = 0, max = 1, log = TRUE)

rloc(k, min = 0, max = 1)

Arguments

loc

The location of the shift along the branch

min

The minimum position on the branch the shift can take

max

The maximum position on the branch the shift can take

log

A logical indicating whether the log density should be returned

k

The number of shifts to return along a branch

Details

dloc calculates the probability of a shift occuring at a given location along the branch assuming a uniform distribution of unit length rloc randomly generates the location of a shift along the branch

Value

A numeric vector:

If 'log = TRUE'

Returns '0', as the log probability of a uniform distribution is always 'log(1) = 0'.

If 'log = FALSE'

Returns '1', indicating a uniform probability distribution along the branch.


Probability density functions for bayou

Description

This function provides a means to specify the prior for the location of shifts across the phylogeny. Certain combinations are not allowed. For example, a maximum shift number of Inf on one branch cannot be combined with a maximum shift number of 1 on another. Thus, bmax must be either a vector of 0's and Inf's or a vector of 0's and 1's. Also, if bmax == 1, then all probabilities must be equal, as bayou cannot sample unequal probabilities without replacement.

Usage

dsb(sb, ntips = ntips, bmax = 1, prob = 1, log = TRUE)

rsb(k, ntips = ntips, bmax = 1, prob = 1, log = TRUE)

Arguments

sb

A vector giving the branch numbers (for a post-ordered tree)

ntips

The number of tips in the phylogeny

bmax

A single integer or a vector of integers equal to the number of branches in the phylogeny indicating the maximum number of shifts allowable in the phylogeny. Can take values 0, 1 and Inf.

prob

A single value or a vector of values equal to the number of branches in the phylogeny indicating the probability that a randomly selected shift will lie on this branch. Can take any positive value, values need not sum to 1 (they will be scaled to sum to 1)

log

A logical indicating whether the log probability should be returned. Default is 'TRUE'

k

The number of shifts to randomly draw from the distribution

Details

dsb calculates the probability of a particular arrangement of shifts for a given set of assumptions.

Value

The log density of the particular number and arrangement of shifts.

Examples

n=10
tree <- sim.bdtree(n=n)
tree <- reorder(tree, "postorder")
nbranch <- 2*n-2
sb <- c(1,2, 2, 3)

# Allow any number of shifts on each branch, with probability
# proportional to branch length
dsb(sb, ntips=n, bmax=Inf, prob=tree$edge.length)

# Disallow shifts on the first branch, returns -Inf because sb[1] = 1
dsb(sb, ntips=n, bmax=c(0, rep(1, nbranch-1)), prob=tree$edge.length)

# Set maximum number of shifts to 1, returns -Inf because two shifts
# are on branch 2
dsb(sb, ntips=n, bmax=1, prob=1)

# Generate a random set of k branches
rsb(5, ntips=n, bmax=Inf, prob=tree$edge.length)

Calculate Gelman's R statistic

Description

Calculate Gelman's R statistic

Usage

gelman.R(parameter, chain1, chain2, freq = 20, start = 1, plot = TRUE, ...)

Arguments

parameter

The name or number of the parameter to calculate the statistic on

chain1

The first bayouMCMC chain

chain2

The second bayouMCMC chain

freq

The interval between which the diagnostic is calculated

start

The first sample to calculate the diagnostic at

plot

A logical indicating whether the results should be plotted

...

Optional arguments passed to gelman.diag(...) from the coda package

Value

A data frame with two columns giving the R statistic and its 95 percent upper CI.


Identify shifts on branches of a phylogenetic tree

Description

This is a convenience function for mapping regimes interactively on the phylogeny. The method locates the nearest branch to where the cursor is clicked on the plot and records the branch number and the location selected on the branch.

Usage

identifyBranches(tree, n, fixed.loc = TRUE, plot.simmap = TRUE)

Arguments

tree

An object of class 'phylo'

n

The number of shifts to map interactively onto the phylogeny

fixed.loc

A logical indicating whether the exact location on the branch should be returned, or the shift will be free to move along the branch

plot.simmap

A logical indicating whether the resulting painting of regimes should be plotted following the selection shift location.

Details

identifyBranches opens an interactive phylogeny plot that allows the user to specify the location of shifts in a phylogenetic tree.

Value

Returns a list with elements "sb" which contains the branch numbers of all selected branches with length "n". If "fixed.loc=TRUE", then the list also contains a vector "loc" which contains the location of the selected shifts along the branch.


Loads a bayou object

Description

load.bayou loads a bayouFit object that was created using bayou.mcmc()

Usage

load.bayou(
  bayouFit,
  saveRDS = TRUE,
  file = NULL,
  cleanup = FALSE,
  ref = FALSE,
  verbose = TRUE
)

Arguments

bayouFit

An object of class bayouFit produced by the function bayou.mcmc()

saveRDS

A logical indicating whether the resulting chains should be saved as an *.rds file

file

An optional filename (possibly including path) for the saved *.rds file

cleanup

A logical indicating whether the files produced by bayou.mcmc() should be removed.

ref

A logical indicating whether a reference function is also in the output

verbose

Determines whether information is outputted to the console for the user to view

Details

If both save.Rdata is FALSE and cleanup is TRUE, then load.bayou will trigger a warning and ask for confirmation. In this case, if the results of load.bayou() are not stored in an object, the results of the MCMC run will be permanently deleted.

Value

A list of class '"bayouMCMC"' containing:

gen

A numeric vector of sampled MCMC generations.

lnL

A numeric vector of log-likelihood values.

prior

A numeric vector of prior probabilities.

sb

A list of shift locations sampled across the MCMC chain.

loc

A list of relative shift locations on branches.

t2

A list of new optima values after shifts.

rjpars

A list of reversible-jump parameters sampled at each step.

(Other parameters)

Additional parameters specific to the model used in 'bayou.mcmc()'.


Makes a power posterior function in bayou

Description

This function generates a power posterior function for estimation of marginal likelihood using the stepping stone method

Usage

make.powerposteriorFn(Bk, priorFn, refFn, model)

Arguments

Bk

The sequence of steps to be taken from the reference function to the posterior

priorFn

The prior function to be used in marginal likelihood estimation

refFn

The reference function generated using make.refFn() from a preexisting mcmc chain

model

A string specifying the model type ("OU", "OUrepar", "QG") or a model parameter list

Details

For use in stepping stone estimation of the marginal likelihood using the method of Fan et al. (2011).

Value

A function of class "powerposteriorFn" that returns a list of four values: result (the log density of the power posterior), lik (the log likelihood), prior (the log prior), ref the log reference density.


Make a prior function for bayou

Description

This function generates a prior function to be used for bayou according to user specifications.

Usage

make.prior(
  tree,
  dists = list(),
  param = list(),
  fixed = list(),
  plot.prior = TRUE,
  model = "OU"
)

Arguments

tree

A tree object of class "phylo"

dists

A list providing the function names of the distribution functions describing the prior distributions of parameters (see details). If no distributions are provided for a parameter, default values are given. Note that the names are provided as text strings, not the functions themselves.

param

A list providing the parameter values of the prior distributions (see details).

fixed

A list of parameters that are to be fixed at provided values. These are removed from calculation of the prior value.

plot.prior

A logical indicating whether the prior distributions should be plotted.

model

One of three specifications of the OU parameterization used. Takes values "OU" (alpha & sig2), "QG" (h2, P, w2, Ne), or "OUrepar" (halflife,Vy)

Details

Default distributions and parameter values are given as follows: OU: list(dists=list("dalpha"="dlnorm","dsig2"="dlnorm", "dk"="cdpois","dtheta"="dnorm","dsb"="dsb","dloc"="dunif"), param=list("dalpha"=list(),"dsig2"=list(),"dtheta"=list(), "dk"=list(lambda=1,kmax=2*ntips-2),"dloc"=list(min=0,max=1),"dsb"=list())) QG: list(dists=list("dh2"="dbeta","dP"="dlnorm","dw2"="dlnorm","dNe"="dlnorm", "dk"="cdpois","dtheta"="dnorm","dsb"="dsb","dloc"="dunif"), param=list("dh2"=list(shape1=1,shape2=1),"dP"=list(),"dw2"=list(),"dNe"=list(),"dtheta"=list(), "dk"=list(lambda=1,kmax=2*ntips-2),"dloc"=list(min=0,max=1),"dsb"=list())) OUrepar: list(dists=list("dhalflife"="dlnorm","dVy"="dlnorm", "dk"="cdpois","dtheta"="dnorm","dsb"="dsb","dloc"="dunif"), param=list("dhalflife"=list("meanlog"=0.25,"sdlog"=1.5),"dVy"=list("meanlog"=1,"sdlog"=2), "dk"=list(lambda=1,kmax=2*ntips-2),"dtheta"=list(),"dloc"=list(min=0,max=1)),"dsb"=list())

dalpha, dsig2, dh2, dP, dw2, dNe, dhalflife, and dVy must be positive continuous distributions and provide the parameters used to calculate alpha and sigma^2 of the OU model. dtheta must be continuous and describes the prior distribution of the optima. dk is the prior distribution for the number of shifts. For Poisson and conditional Poisson (cdpois) are provided the parameter lambda, which provides the total number of shifts expected on the tree (not the rate per unit branch length). Otherwise, dk can take any positive, discrete distribution. dsb indicates the prior probability of a given set of branches having shifts, and is generally specified by the "dsb" function in the bayou package. See the documentation for dsb for specifying the number of shifts allowed per branch, the probability of a branch having a shift, and specifying constraints on where shifts can occur."dloc" indicates the prior probability of the location of a shift within a single branch. Currently, all locations are given uniform density. All distributions are set to return log-transformed probability densities.

Value

returns a prior function of class "priorFn" that calculates the log prior density for a set of parameter values provided in a list with correctly named values.

Examples

## Load data
data(chelonia)
tree <- chelonia$phy
dat <- chelonia$dat

#Create a prior that allows only one shift per branch with equal probability 
#across branches
prior <- make.prior(tree, dists=list(dalpha="dlnorm", dsig2="dlnorm",
           dsb="dsb", dk="cdpois", dtheta="dnorm"), 
             param=list(dalpha=list(meanlog=-5, sdlog=2), 
               dsig2=list(meanlog=-1, sdlog=5), dk=list(lambda=15, kmax=200), 
                 dsb=list(bmax=1,prob=1), dtheta=list(mean=mean(dat), sd=2)))
             
#Evaluate some parameter sets
pars1 <- list(alpha=0.1, sig2=0.1, k=5, ntheta=6, theta=rnorm(6, mean(dat), 2), 
                 sb=c(32, 53, 110, 350, 439), loc=rep(0.1, 5), t2=2:6)
pars2 <- list(alpha=0.1, sig2=0.1, k=5, ntheta=6, theta=rnorm(6, mean(dat), 2),
                 sb=c(43, 43, 432, 20, 448), loc=rep(0.1, 5), t2=2:6)
prior(pars1) 
prior(pars2) #-Inf because two shifts on one branch

#Create a prior that allows any number of shifts along each branch with probability proportional 
#to branch length
prior <- make.prior(tree, dists=list(dalpha="dlnorm", dsig2="dlnorm",
           dsb="dsb", dk="cdpois", dtheta="dnorm"), 
             param=list(dalpha=list(meanlog=-5, sdlog=2), 
               dsig2=list(meanlog=-1, sdlog=5), dk=list(lambda=15, kmax=200), 
                 dsb=list(bmax=Inf,prob=tree$edge.length), 
                   dtheta=list(mean=mean(dat), sd=2)))
prior(pars1)
prior(pars2)

#Create a prior with fixed regime placement and sigma^2 value
prior <- make.prior(tree, dists=list(dalpha="dlnorm", dsig2="fixed", 
           dsb="fixed", dk="fixed", dtheta="dnorm", dloc="dunif"), 
             param=list(dalpha=list(meanlog=-5, sdlog=2), 
               dtheta=list(mean=mean(dat), sd=2)), 
                 fixed=list(sig2=1, k=3, ntheta=4, sb=c(447, 396, 29)))
                 
pars3 <- list(alpha=0.01, theta=rnorm(4, mean(dat), 2), loc=rep(0.1, 4))
prior(pars3)

##Return a list of functions used to calculate prior
attributes(prior)$functions

##Return parameter values used in prior distribution
attributes(prior)$parameters

Make a reference function in bayou

Description

This function generates a reference function from a mcmc chain for use in marginal likelihood estimation.

Usage

make.refFn(chain, model, priorFn, burnin = 0.3, plot = TRUE)

Arguments

chain

An mcmc chain produced by bayou.mcmc() and loaded with load.bayou()

model

A string specifying the model ("OU", "QG", "OUrepar") or a model parameter list

priorFn

The prior function used to generate the mcmc chain

burnin

The proportion of the mcmc chain to be discarded when generating the reference function

plot

Logical indicating whether or not a plot should be created

Details

Distributions are fit to each mcmc chain and the best-fitting distribution is chosen as the reference distribution for that parameter using the method of Fan et al. (2011). For positive continuous parameters alpha, sigma^2, halflife, Vy, w2, Ne, Log-normal, exponential, gamma and weibull distributions are fit. For continuous distributions theta, Normal, Cauchy and Logistic distributions are fit. For discrete distributions, k, negative binomial, poisson and geometric distributions are fit. Best-fitting distributions are determined by AIC.

Value

Returns a reference function of class "refFn" that takes a parameter list and returns the log density given the reference distribution. If plot=TRUE, a plot is produced showing the density of variable parameters and the fitted distribution from the reference function (in red).


This function makes a bayou model object that can be used for customized allometric regression models.

Description

This function makes a bayou model object that can be used for customized allometric regression models.

Usage

makeBayouModel(
  f,
  rjpars,
  tree,
  dat,
  pred,
  prior,
  SE = 0,
  slopechange = "immediate",
  impute = NULL,
  startpar = NULL,
  moves = NULL,
  control.weights = NULL,
  D = NULL,
  shiftpars = c("sb", "loc", "t2"),
  model = "OU"
)

Arguments

f

A formula describing the relationship between the data and one or more predictors (use 'dat' for the dependent variable)

rjpars

A character vector of parameters to split at the mapped shifts on the tree

tree

A phylogenetic tree

dat

A named vector of trait data (dependent variable)

pred

A matrix or data frame with named columns with predictor data represented in the specified formula

prior

A prior function made by the 'make.prior' function

SE

A single value or vector of measurement error estimates

slopechange

"immediate", "alphaWeighted" or "fullPGLS"

impute

The name of a single predictor for which missing values will be imputed using BM (see details). Default is NULL.

startpar

An optional list of starting parameters for the model. If not provided, the model will simulate starting values from the prior function.

moves

An optional list of moves to be passed on to bayou.makeMCMC.

control.weights

An optional list of control weights to be passed on to bayou.makeMCMC.

D

A vector of tuning parameters to be passed on to bayou.makeMCMC.

shiftpars

The names of the parameters defining the map of shifts (for now, always c("sb", "loc", "t2")).

model

The parameterization of the OU model, either "OU", "OUrepar" or "QG".

Details

This function generates a list with the '$model', which provides the specifications of the regression model and '$startpar', which provides starting values to input into bayou.makeMCMC. Note that this model assumes that predictors immediately affect trait values at a shift. In other words, regardless of the past history of the predictor, only the current value affects the current expected trait value. This is only reasonable for allometric models, although it may be appropriate for other models if phylogenetic inertia is very low (short half-lives).

One predictor variable may include missing data (coded as "NA"). The model will assume the maximum-likelihood best-fit BM model and simulate the missing predictor values throughout the course of the MCMC. These values will then be used to calculate the likelihood given the parameters for each MCMC step.

Value

A list with two elements:

model

A list containing MCMC settings, likelihood functions, monitoring functions, and other parameters for the Bayesian OU model.

startpar

A list of starting parameter values for the model. If missing data is imputed, it includes 'missing.pred'.


Make a color transparent (Taken from an answer on StackOverflow by Nick Sabbe)

Description

Make a color transparent (Taken from an answer on StackOverflow by Nick Sabbe)

Usage

makeTransparent(someColor, alpha = 100)

Arguments

someColor

A color, either a number, string or hexidecimal code

alpha

The alpha transparency. The maxColorValue is set to 255.

Value

A character vector of colors in hexadecimal format with the specified transparency applied.


Bayou Models

Description

Default bayou models. New models may be specified by providing a set of moves, control weights, tuning parameters, parameter names, RJ parameters and a likelihood function.

Usage

model.OU

Format

An object of class list of length 9.


Calculate the weight matrix of a set of regimes on a phylogeny

Description

These functions calculate weight matrices from regimes specified by a bayou formatted parameter list parmap.W calculates the weight matrix for a set of regimes from a phylogeny with a stored regime history. .parmap.W calculates the same matrix, but without checks and is generally run internally.

Usage

parmap.W(tree, pars)

Arguments

tree

either a tree of class "phylo" or a cache object produced by bayOU's internal functions. Must include list element 'maps' which is a simmap reconstruction of regime history.

pars

a list of the parameters used to calculate the weight matrix. Only pars$alpha is necessary to calculate the matrix, but others can be present.

Details

.parmap.W is more computationally efficient within a mcmc and is used internally.

Value

A matrix where rows correspond to branches in the phylogenetic tree, and columns correspond to the different evolutionary regimes. Each entry in the matrix represents the weight of a given regime on a given branch.


Convert a bayou parameter list into a simmap formatted phylogeny

Description

This function converts a bayou formatted parameter list specifying regime locations into a simmap formatted tree that can be plotted using plotSimmap from phytools or the plotRegimes function from bayou.

Usage

pars2simmap(pars, tree)

Arguments

pars

A list that contains sb (a vector of branches with shifts), loc (a vector of shift locations), t2 (a vector of theta indices indicating which theta is present after the shift).

tree

A tree of class 'phylo'

Details

pars2simmap takes a list of parameters and converts it to simmap format

Value

A list with elements: tree A simmap formatted tree, pars bayou formatted parameter list, and cols A named vector of colors.

Examples

tree <- reorder(sim.bdtree(n=100), "postorder")

pars <- list(k=5, sb=c(195, 196, 184, 138, 153), loc=rep(0, 5), t2=2:6)
tr <- pars2simmap(pars, tree)
plotRegimes(tr$tree, col=tr$col)

Plot a pheongram with the posterior density for optima values

Description

Plots a phenogram and the posterior density for optima values

Usage

phenogram.density(
  tree,
  dat,
  burnin = 0,
  chain,
  colors = NULL,
  pp.cutoff = NULL,
  K = NULL,
  ...
)

Arguments

tree

A phylogeny of class 'phylo'

dat

A named vector of tip data

burnin

The initial proportion of the MCMC to be discarded

chain

A bayouMCMC object that contains the results of an MCMC chain

colors

An optional named vector of colors to assign to regimes, NULL results in no regimes being plotted.

pp.cutoff

The posterior probability cutoff value. Branches with posterior probabilities of having a shift above this value will have the average location of the regime shift painted onto the branches.

K

A list with the values of K to be plotted. If NULL all values of K are combined and a total posterior produced. This allows separate lines to be plotted for different numbers of shifts so that the location of optima can be compared, for example, between all samples that have 1 vs. 2 shifts in the posterior.

...

Additional parameters passed to phenogram(...)

Value

No return value, called for side effects. This function generates a phenogram plot with posterior density overlays for optima values, visualizing the distribution of evolutionary regimes across a phylogenetic tree.


S3 method for plotting bayouMCMC objects

Description

S3 method for plotting bayouMCMC objects

Usage

## S3 method for class 'bayouMCMC'
plot(x, ...)

Arguments

x

A mcmc chain of class 'bayouMCMC' produced by the function bayou.mcmc and loaded into the environment using load.bayou

...

Additional arguments passed to plot.mcmc from the coda package

Value

No return value, called for side effects. This function generates diagnostic trace and density plots for MCMC chains of class 'bayouMCMC' to assess convergence and parameter distributions.


S3 method for plotting ssMCMC objects

Description

S3 method for plotting ssMCMC objects

Usage

## S3 method for class 'ssMCMC'
plot(x, ...)

Arguments

x

An 'ssMCMC' object

...

Additional arguments passed to plot

Details

Produces 4 plots. The first 3 plot the prior, reference function and likelihood. Different colors indicate different power posteriors for each. These chains should appear to be well mixed. The final plot shows the sum of the marginal likelihood across each of the steps in the stepping stone algorithm.

Value

No return value, called for side effects. This function generates diagnostic plots for an 'ssMCMC' object, including log-likelihood, log-prior, log-reference function, and cumulative marginal likelihood across power posteriors.


Plot parameter list as a simmap tree

Description

Plot parameter list as a simmap tree

Usage

plotBayoupars(pars, tree, ...)

Arguments

pars

A bayou formatted parameter list

tree

A tree of class 'phylo'

...

Additional arguments passed to plotRegimes

Value

No return value, called for side effects. This function generates a visualization of a phylogenetic tree with mapped regimes or other parameters.


A function to plot a heatmap of reconstructed parameter values on the branches of the tree

Description

A function to plot a heatmap of reconstructed parameter values on the branches of the tree

Usage

plotBranchHeatMap(
  tree,
  chain,
  variable,
  burnin = 0,
  nn = NULL,
  pal = heat.colors,
  legend_ticks = NULL,
  legend_settings = list(plot = TRUE),
  ...
)

Arguments

tree

A phylogenetic tree

chain

A bayou MCMC chain

variable

The parameter to reconstruct across the tree

burnin

The initial proportion of burnin samples to discard

nn

The number of discrete categories to divide the variable into

pal

A color palette function that produces nn colors

legend_ticks

The sequence of values to display a legend for

legend_settings

A list of legend attributes (passed to bayou:::.addColorBar)

...

Additional options passed to plot.phylo

Details

legend_settings is an optional list of any of the following:

legend - a logical indicating whether a legend should be plotted

x - the x location of the legend

y - the y location of the legend

height - the height of the legend

width - the width of the legend

n - the number of gradations in color to plot from the palette

adjx - an x adjustment for placing text next to the legend bar

cex.lab - the size of text labels next to the legend bar

text.col - The color of text labels

locator - if TRUE, then x and y coordinates are ignored and legend is placed interactively.

Value

No return value, called for side effects. This function generates a heatmap visualization of reconstructed parameter values on a phylogenetic tree.


A function to visualize a multi-optimum OU process evolving on a phylogeny

Description

A function to visualize a multi-optimum OU process evolving on a phylogeny

Usage

plotOUtreesim(pars, tree, ptsperunit = 100, pal = rainbow, aph = 255, lwd = 1)

Arguments

pars

A bayou parameter list to simulate the OU process from

tree

A phylogenetic tree

ptsperunit

A number giving the number of points to simulate per unit time

pal

A color palette function

aph

The alpha value for transparency of the lines

lwd

The width of the lines

Value

**No return value**, called for **side effects**. The function **generates a plot** showing the simulated trait evolution over time.


Function to plot the regimes from a simmap tree

Description

Function to plot the regimes from a simmap tree

Usage

plotRegimes(tree, col = NULL, lwd = 1, pal = rainbow, ...)

Arguments

tree

A simmap tree of class phylo or simmap with a tree$maps list

col

A named vector of colors to assign to character states, if NULL, then colors are generated from pal

lwd

A numeric value indicating the width of the edges

pal

A color palette function to generate colors if col=NULL

...

Optional arguments that are passed to plot.phylo

Details

This function uses plot.phylo to generate coordinates and plot the tree, but plots the 'maps' element of phytools' simmap format. This provides much of the functionality of plot.phylo from the ape package. Currently, only types 'phylogram', 'unrooted', 'radial', and 'cladogram' are allowed. Phylogenies must have branch lengths.

Value

**No return value**, called for **side effects**. The function **generates a plot** of the phylogenetic tree with color-coded regimes.


A function to plot a list produced by shiftSummaries

Description

A function to plot a list produced by shiftSummaries

Usage

plotShiftSummaries(
  summaries,
  pal = rainbow,
  ask = FALSE,
  single.plot = FALSE,
  label.pts = TRUE,
  ...
)

Arguments

summaries

A list produced by the function shiftSummaries

pal

A color palette function

ask

Whether to wait for the user between plotting each shift summary

single.plot

A logical indicating whether to summarize all shifts in a single plot.

label.pts

A logical indicating whether to label the scatter plot.

...

Additional parameters passed to the function par(...)

Details

For each shift, this function plots the taxa on the phylogeny that are (usually) in this regime (each taxon is assigned to the specified shifts, thus some descendent taxa may not always be in indicated regime if the shift if they are sometimes in another tipward shift with low posterior probability). The function then plots the distribution of phenotypic states and the predicted regression line, as well as density plots for the intercept and any regression coefficients in the model.

Value

**No return value**, called for **side effects**. The function **generates visualizations** of shift summaries, including:


Plot a phylogenetic tree with posterior probabilities from a bayouMCMC chain (function adapted from phytools' plotSimmap)

Description

Plot a phylogenetic tree with posterior probabilities from a bayouMCMC chain (function adapted from phytools' plotSimmap)

Usage

plotSimmap.mcmc(
  chain,
  burnin = NULL,
  lwd = 1,
  edge.type = c("regimes", "theta", "none", "pp"),
  pal = rainbow,
  pp.cutoff = 0.3,
  circles = TRUE,
  circle.cex.max = 3,
  circle.col = "red",
  circle.pch = 21,
  circle.lwd = 0.75,
  circle.alpha = 100,
  pp.labels = FALSE,
  pp.col = 1,
  pp.alpha = 255,
  pp.cex = 0.75,
  edge.color = 1,
  parameter.sample = 1000,
  ...
)

Arguments

chain

A bayouMCMC chain

burnin

The proportion of runs to be discarded, if NULL, then the value stored in the bayouMCMC chain's attributes is used

lwd

The width of the edges

edge.type

Either "theta" (branches will be colored according to their median value of theta), "regimes" (clades will be assigned to distinct regimes if the posterior probability of a shift on that branch is > pp.cutoff), or "pp" (branches will be colored according to the probability of a shift on that branch). If "none" then edge.color will be assigned to all branches.

pal

A color palette function used to paint the branches (unless edge.type="none")

pp.cutoff

If edge.type=="regimes", the posterior probability above which a shift should be reconstructed on the tree.

circles

a logical value indicating whether or not a circle should be plotted at the base of the node with values that correspond to the posterior probability of having a shift.

circle.cex.max

The cex value of a circle with a posterior probability of 1

circle.col

The color used to fill the circles

circle.pch

the type of symbol used to plot at the node to indicate posterior probability

circle.lwd

the line width of the points plotted at the nodes

circle.alpha

a value between 0 and 255 that indicates the transparency of the circles (255 is completely opaque).

pp.labels

a logical indicating whether the posterior probability for each branch should be printed above the branch

pp.col

The color used for the posterior probability labels

pp.alpha

a logical or numeric value indicating transparency of posterior probability labels. If TRUE, then transparency is ramped from invisible (pp=0), to black (pp=1). If numeric, all labels are given the same transparency. If NULL, then no transparency is given.

pp.cex

the size of the posterior probability labels

edge.color

The color of edges if edge.type="none"

parameter.sample

When edge.type=="theta", the number of samples used to estimate the median "theta" value from each branch. Since this is computationally intensive, this enables you to downsample the chain.

...

Additional arguments passed to ape's plot.phylo

Value

**No return value**, called for **side effects**. The function generates a **phylogenetic tree visualization** with branches colored based on posterior probabilities, regimes, or estimated parameters.


S3 method for printing bayouFit objects

Description

S3 method for printing bayouFit objects

Usage

## S3 method for class 'bayouFit'
print(x, ...)

Arguments

x

A 'bayouFit' object produced by bayou.mcmc

...

Additional parameters passed to print

Value

**No return value**, called for **side effects**. This function prints a summary of a **bayou model fit**, including posterior probabilities, model parameters, and key statistics.


S3 method for printing bayouMCMC objects

Description

S3 method for printing bayouMCMC objects

Usage

## S3 method for class 'bayouMCMC'
print(x, ...)

Arguments

x

A mcmc chain of class 'bayouMCMC' produced by the function bayou.mcmc and loaded into the environment using load.bayou

...

Additional arguments

Value

**No return value**, called for **side effects**. This function prints a summary of a **bayouMCMC** object, including details about the MCMC run, burn-in proportion, and key parameter statistics.


S3 method for printing priorFn objects

Description

S3 method for printing priorFn objects

Usage

## S3 method for class 'priorFn'
print(x, ...)

Arguments

x

A function of class 'priorFn' produced by make.prior

...

Additional arguments passed to print

Value

**No return value**, called for **side effects**. This function prints a summary of a **priorFn** object, including the expected model, required parameter list, and prior distribution functions.


S3 method for printing refFn objects

Description

S3 method for printing refFn objects

Usage

## S3 method for class 'refFn'
print(x, ...)

Arguments

x

A function of class 'refFn' produced by make.refFn

...

Additional arguments passed to print

Value

**No return value**, called for **side effects**. This function prints a summary of a **refFn** object, including the expected model, required parameter list, and reference distribution functions.


S3 method for printing ssMCMC objects

Description

S3 method for printing ssMCMC objects

Usage

## S3 method for class 'ssMCMC'
print(x, ...)

Arguments

x

An ssMCMC object

...

Optional arguments passed to print

Value

**No return value**, called for **side effects**. This function prints a summary of an 'ssMCMC' object, including the estimated marginal likelihood, the number of power posteriors run, and the log marginal likelihood contributions across steps.


Simulates parameters from bayou models

Description

priorSim Simulates parameters from the prior distribution specified by make.prior

Usage

priorSim(prior, tree, plot = TRUE, nsim = 1, shiftpars = "theta", ...)

Arguments

prior

A prior function created by bayou::make.prior

tree

A tree of class 'phylo'

plot

A logical indicating whether the simulated parameters should be plotted

nsim

The number of parameter sets to be simulated

shiftpars

A vector of parameters that split upon a shift, default is "theta"

...

Parameters passed on to plotSimmap(...)

Value

A list of bayou parameter lists drawn from the prior.


Utility function for retrieving parameters from an MCMC chain

Description

Utility function for retrieving parameters from an MCMC chain

Usage

pull.pars(i, chain, model = "OU")

Arguments

i

An integer giving the sample to retrieve

chain

A bayouMCMC chain

model

The parameterization used, either "OU", "QG" or "OUrepar"

Value

A bayou formatted parameter list


Adds visualization of regimes to a plot

Description

Adds visualization of regimes to a plot

Usage

regime.plot(pars, tree, cols, type = "rect", transparency = 100)

Arguments

pars

A bayou formatted parameter list

tree

A tree of class 'phylo'

cols

A vector of colors to give to regimes, in the same order as pars$sb

type

Either "rect", "density" or "lines". "rect" plots a rectangle for the 95% CI for the stationary distribution of a regime. "density" varies the transparency of the rectangles according to the probability density from the stationary distribution. "lines" plots lines for the mean and 95% CI's without filling them.

transparency

The alpha transparency value for the maximum density, max value is 255.


Set the burnin proportion for bayouMCMC objects

Description

Set the burnin proportion for bayouMCMC objects

Usage

set.burnin(chain, burnin = 0.3)

Arguments

chain

A bayouMCMC chain or an ssMCMC chain

burnin

The burnin proportion of samples to be discarded from downstream analyses.

Value

A bayouMCMC chain or ssMCMC chain with burnin proportion stored in the attributes.


A function for summarizing the state of a model after a shift

Description

A function for summarizing the state of a model after a shift

Usage

shiftSummaries(chain, mcmc, pp.cutoff = 0.3, branches = NULL)

Arguments

chain

A bayouMCMC chain

mcmc

A bayou mcmc object

pp.cutoff

The threshold posterior probability for shifts to summarize, if 'branches' specified than this is ignored.

branches

The specific branches with shifts to summarize, assuming postordered tree

Details

shiftSummaries summarizes the immediate parameter values after a shift on a particular branch. Parameters are summarized only for the duration that the particular shift exists. Thus, even global parameters will be different for particular shifts.

Value

A list with elements: pars = a bayoupars list giving the location of shifts specified; tree = The tree; pred = Predictor variable matrix; dat = A vector of the data; SE = A vector of standard errors; PP = Posterior probabilities of the specified shifts; model = A list specifying the model used; variables = The variables summarized; cladesummaries = A list providing the medians and densities of the distributions of regression variables for each shift; descendents = A list providing the taxa that belong to each regime regressions = A matrix providing the regression coefficients for each regime.


Calculate the weight matrix of a set of regimes on a phylogeny

Description

These functions calculate weight matrices from regimes specified in phytools' simmap format. simmapW calculates the weight matrix for a set of regimes from a phylogeny with a stored regime history. .simmap.W calculates the same matrix, but without checks and is generally run internally.

Usage

simmapW(tree, pars)

Arguments

tree

either a tree of class "phylo" or a cache object produced by bayOU's internal functions. Must include list element 'maps' which is a simmap reconstruction of regime history.

pars

a list of the parameters used to calculate the weight matrix. Only pars$alpha is necessary to calculate the matrix, but others can be present.

Details

.simmap.W is more computationally efficient within a mcmc and is used internally. The value of TotExp is supplied to speed computation and reduce redundancy, and cache objects must be supplied as the phylogeny, and the parameter ntheta must be present in the list pars.

Value

A matrix where each row corresponds to a branch in the phylogenetic tree, and each column represents an evolutionary regime. The entries in the matrix indicate the weight of a given regime on a given branch.


S3 method for summarizing bayouMCMC objects

Description

S3 method for summarizing bayouMCMC objects

Usage

## S3 method for class 'bayouMCMC'
summary(object, ...)

Arguments

object

A bayouMCMC object

...

Additional arguments passed to print

Value

An invisible list with two elements: statistics which provides summary statistics for a bayouMCMC chain, and branch.posteriors which summarizes branch specific data from a bayouMCMC chain.