# NOT RUN {
## Load test data
data(Anolis_traits)
data(Anolis_tree)
data(Anolis_map)
## JIVE object to run jive with single regimes
my.jive <- make_jive(phy = Anolis_tree, traits = Anolis_traits[,-3],
model.priors = list(mean = "BM", logvar= c("OU", "root")))
## JIVE object to run jive with multiple regimes
my.jive <- make_jive(Anolis_tree, Anolis_traits[,-3], map = Anolis_map,
model.priors =list(mean = "BM", logvar = c("OU", "theta", "alpha")))
## JIVE object to run jive from an ancestral state reconstruction (stochastic mapping)
# First generate simmap object
library(phytools)
n= length(Anolis_tree$tip.label)
trait = rep(0,n)
trait[c(4,3,14,16, 6,5)] = 1
names(trait) = Anolis_tree$tip.label
mapped_tree=make.simmap(Anolis_tree, trait, model='SYM')
plotSimmap(mapped_tree)
my.jive <- make_jive(mapped_tree, Anolis_traits[,-3]
, model.priors = list(mean = "OU" , logvar = c("OU", "theta")))
## Jive object using another model of trait evolution (EB from mvMORPH)
library(mvMORPH)
early_burst <- function(tree, x, pars){
suppressMessages(mvEB(tree, x, method = "inverse", optimization = "fixed",
echo = FALSE)$llik(pars, root.mle = FALSE))
}
my.jive <- make_jive(phy = Anolis_tree, traits = Anolis_traits[,-3]
, model.priors = list(mean = early_burst , logvar = c("OU", "root")))
initial.values <- c(0.1, 1, 50)
window.size <- c(0.1, 0.2, 1)
proposals <- list("slidingWin", "slidingWin", "slidingWin")
hyperprior <- list(hpfun("Gamma", hp.pars = c(1.1, 5)), hpfun("Gamma", hp.pars = c(3, 5)),
hpfun("Uniform", hp.pars = c(30, 80)))
names(initial.values) <- names(window.size) <- c("sigma_sq", "beta", "root")
names(proposals) <- names(hyperprior) <- c("sigma_sq", "beta", "root")
my.jive <- control_jive(jive = my.jive, level = "prior", intvar = "mean",
pars = names(initial.values), window.size = window.size,
initial.values = initial.values, proposals = proposals, hyperprior = hyperprior)
## Jive object using another model of intraspecific variation (uniform model)
lik_unif <- function(pars.lik, traits, counts){
if(!"mid" %in% names(pars.lik)) stop("'mid' parameter cannot be found in model.priors")
if(!"logrange" %in% names(pars.lik)){
stop("'logrange' parameter cannot be found in model.priors")
}
min.sp <- pars.lik$mid - 1/2*exp(pars.lik$logrange)
max.sp <- pars.lik$mid + 1/2*exp(pars.lik$logrange)
log.lik.U <- sapply(1:length(traits), function(i){
sum(dunif(traits[[i]], min.sp[i], max.sp[i], log = TRUE))
})
if (is.na(sum(log.lik.U))) {
return(-Inf)
} else {
return(log.lik.U)
}
}
init_unif <- sapply(Anolis_tree$tip.label, function(sp){
logrange <- log(diff(range(Anolis_traits[Anolis_traits[,1] == sp, 3])) + 2)
mid <- mean(range(Anolis_traits[Anolis_traits[,1] == sp, 3]))
c(mid = mid, logrange = logrange)
})
my.jive <- make_jive(phy = Anolis_tree, traits = Anolis_traits[,-2],
model.priors = list(mid = "BM" , logrange = c("OU", "root")),
lik.f = lik_unif, init = init_unif)
# }
Run the code above in your browser using DataLab