View source: R/fitMCMC_bdRho.R
fitMCMC_bdRho | R Documentation |
Fits the birth-death rho model (a constant-time homogeneous birth-death model under Bernoulli sampling) to a rooted ultrametric phylogeny using Bayesian inference. The birth-death process is conditioned on the starting time of the process tot_time
and the survival of the process at present time. The inference can be done specifying the sampling probability or integrating over it according to a specified sampling probability distribution (either uniform: unif = TRUE
or beta distribution: beta = TRUE
). This function can fit the birth-death rho model on a stem or crown phylogeny or a set of phylogenies assuming common or specific diversification rates. It is by default parametrised on the net diversification rate and the turnover rate but can be reparametrised on the product y*λ and the net diversification rate r. This function is specifically adapted for diversification analysis on phylogenies on which the sampling probability is unknown.
fitMCMC_bdRho( phylo, tot_time, y = NULL, reparam = FALSE, common = TRUE, beta = FALSE, unif = TRUE, a = 0, b = 1, afix = TRUE, bfix = TRUE, cond = "crown", YULE = FALSE, dt = 0, rel.tol = 1e-10, tuned_dichotomy = TRUE, brk = 2000, savedBayesianSetup = NULL, mcmcSettings = NULL, prior = NULL, parallel = FALSE, save_inter = NULL, index_saving = NULL )
phylo |
Object of class |
tot_time |
Numeric vector. The stem or crown age (also called MRCA) of the phylogenie(s) depending on the conditioning of the process specified (see |
y |
Numeric vector. The sampling probabilitie(s) typically calculated as k/N where |
reparam |
Logical. If |
common |
Logical. This argument is only used when a set of phylogenies are provided in the |
beta |
Logical. This argument is only used if |
unif |
Logical. This argument is only used if |
a |
Numeric. This argument is only used if |
b |
Numeric. This argument is only used if |
afix |
Logical. This argument is only used if |
bfix |
Logical. This argument is only used if |
cond |
Character. Specifying the conditioning of the birth-death process. Two conditioning are available, either |
YULE |
Logical. If |
dt |
Numeric. This argument is only used if |
rel.tol |
Numeric. This argument is only used if |
tuned_dichotomy |
Logical. This argument is only used if |
brk |
Numeric. This argument is only used if |
savedBayesianSetup |
BayesianOutput. A BayesianOutput created by |
mcmcSettings |
List. A list of settings for the Bayesian inference using the sampler |
prior |
Prior or function. Either a prior class (see |
parallel |
Numeric or logical. If |
save_inter |
Numeric vector. A vector specifying the timings at which the MCMC chains should be saved for checkpointing. This can be computed using the following example : |
index_saving |
Factor. A factor specifying the name of the MCMC chains saved during the checkpointing. The MCMC chains will be saved as a RDS file in your working directory and will have the following syntax |
This function will fit different birth-death models depending on the arguments chosen:
If a unique phylogeny is used and the corresponding sampling probability is given in y
, then the classical birth-death-sampling model is used and the function will infer the net diversification rate and the turnover rate.
If a unique phylogeny is used, y = NULL
and the model is set for being reparametrised reparam = TRUE
, then the reparametrised birth-death-sampling model is used and the function will infer the net diversification rate and the product of the sampling probability and speciation rate y*λ.
If a unique phylogeny is used, y = NULL
and reparam = FALSE
, then the birth-death∫ρ model is used and the function will infer the net diversification rate, the turnover rate, and hyperparameters of the sampling probability distribution a
and b
depending if they are set to be fixed or not (see afix
and bfix
arguments). Make sure the desired sampling probability distribution is chosen (see beta
and unif
arguments). See phi
for more details).
If a unique phylogeny is used and YULE = TRUE
, then the corresponding model will be used with one parameter less since the turnover rate will be fixed to 0 and thus will not be inferred. Note that this option is not available if the model is reparametrised.
If a set of phylogenies are used for fitting the model and common = TRUE
, then the birth-death∫ρ_mult model is used and the function will infer the same number of parameters as birth-death∫ρ depending on whether the hyperparameters are set to be fixed or not (see afix
and bfix
arguments).
If a set of phylogenies are used for fitting the model and common = FALSE
, then the birth-death∫ρ_mult_x model is used and the function will infer the specific net diversification rate per phylogenies, the turnover rate per phylogenies and the hyperparameters depending on whether they are set to be fixed or not (see afix
and bfix
arguments).
Note that depending on the model chosen, the number of parameters inferred can vary thus the prior
and the mcmcSettings
should be adapted to the number of parameters and the parameters should be ordered as described above. This function is specifically intended to be used on phylogenies with unknown or highly uncertain global diversity estimates (the sampling probability is not known with accuracy). Note that the sampling probability is never estimated and that this function is not able to evaluate negative rates.
Returns an object of class MCMC_bd
. This MCMC_bd
object is a list containing the name of the birth-death model performed and an object of class "mcmcSampler" "bayesianOutput"
(see the output of BayesianTools::runMCMC()
). This second object contains the MCMC chains and the information about the MCMC run. For analysis of the chains, it can be converted to a coda
object (BayesianTools::getSample()
) or used in line with the appropriate functions e.g. BayesianTools::MAP()
.
Sophia Lambert
likelihood_bdRho
and fitMCMC_bdK
# Creating a phylogeny with 0.05 net diversification rate and 0.5 turnover rate. set.seed(1234) tree1 <- TESS::tess.sim.age(1, 100, lambda = 0.1, mu = 0.05, MRCA = TRUE, samplingProbability = 0.5)[[1]] plot(tree1, root.edge = TRUE) # Creating variables to give to arguments tot_time <- max(TreeSim::getx(tree1)) Ntips <- ape::Ntip(tree1) lamb_moments <- log(Ntips)/tot_time ysim <- 0.5 # Creating setting for MCMC densityTest4 = function(x) { sum(dunif(x[1], min = 0, max = 1, log =TRUE)) + sum(dunif(x[2], min = 0, max = 1, log =TRUE)) } samplerTest4 = function(n=1){ s1 = runif(n, min = 0, max = 1) s2 = runif(n, min = 0, max = 1) return(cbind(s1,s2)) } priorTest4 <- BayesianTools::createPrior(density = densityTest4, sampler = samplerTest4, lower = c(0,0), upper = c(1,1), best = NULL) StartValueDTest4 = c(lamb_moments, runif(2, min = 0, max = 0.1)) StartValueEpsiTest4 = runif(3, min = 0, max = 1) startValueTest4 = matrix(data = c(StartValueDTest4, StartValueEpsiTest4), nrow = 3, ncol = 2) # Parameters for the checkpointing nbIter <- 20000 maxTime <- 60*60*19.3 # 20 hours max (tiny less because of some processing issues) stopTime <- 60*60*20 freqTime <- 60*60*3.21 # save every 3 hours previousMCMC = NULL # Fitting the birth-death∫rho model res_fitMCMC_M1 <- fitMCMC_bdRho(phylo = tree1, tot_time = tot_time, y = NULL, reparam = FALSE, common = FALSE, beta = FALSE, unif = TRUE, a = 0, b = 1, afix = TRUE, bfix =TRUE, cond = "crown", YULE = FALSE, dt = 0, rel.tol = 1e-10, tuned_dichotomy = TRUE, brk = 2000, savedBayesianSetup = previousMCMC, mcmcSettings = list(iterations = 3*nbIter, startValue = startValueTest4), prior = priorTest4, parallel = FALSE, save_inter = c(seq(from = proc.time()[3], to = maxTime, by = freqTime),stopTime), index_saving = as.factor("M1_tree1")) plot(res_fitMCMC_M1$mcmc) # Fitting the classical birth-death-sampling model res_fitMCMC_M5 <- fitMCMC_bdRho(phylo = tree1, tot_time = tot_time, y = ysim, reparam = FALSE, common = FALSE, beta = FALSE, unif = FALSE, a = NULL, b = NULL, afix = NULL, bfix =NULL, cond = "crown", YULE = FALSE, dt = 0, rel.tol = 1e-10, tuned_dichotomy = TRUE, brk = 2000, savedBayesianSetup = previousMCMC, mcmcSettings = list(iterations = 3*nbIter, startValue = startValueTest4), prior = priorTest4, parallel = FALSE, save_inter = c(seq(from = proc.time()[3], to = maxTime, by = freqTime),stopTime), index_saving = as.factor("M5_tree1")) plot(res_fitMCMC_M5$mcmc)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.