This set of functions steps the chains forward one iteration
of the within-chain component of the ptMCMC algorithm. step_chains
is the main function, comprised of a proposal (made by prop_step
),
an evaluation of that proposal (made by eval_step
), and then an
update of the configuration (made by take_step
).
This set of functions was designed to work within TS
and
specifically est_changepoints
. They are still hardcoded to
do so, but have the capacity to be generalized to work with any
estimation via ptMCMC with additional coding work.
step_chains(i, cpts, inputs) propose_step(i, cpts, inputs) eval_step(i, cpts, prop_step, inputs) take_step(cpts, prop_step, accept_step)
i |
|
---|---|
cpts |
|
inputs | Class |
prop_step | Proposed step output from |
accept_step |
|
step_chains
: list
of change points, log-likelihoods,
and logical indicators of acceptance for each chain.
propose_step
: list
of change points and
log-likelihood values for the proposal.
eval_step
: logical
vector indicating if each
chain's proposal was accepted.
take_step
: list
of change points, log-likelihoods,
and logical indicators of acceptance for each chain.
For each iteration of the ptMCMC algorithm, all of the chains have the potential to take a step. The possible step is proposed under a proposal distribution (here for change points we use a symmetric geometric distribution), the proposed step is then evaluated and either accepted or not (following the Metropolis-Hastings rule; Metropolis, et al. 1953, Hasting 1960, Gupta et al. 2018), and then accordingly taken or not (the configurations are updated).
Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. 2018. Evaluation of parallel tempering to accelerate Bayesian parameter estimation in systems biology. link.
Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains and their applications. Biometrika 57:97-109. link.
Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. Teller. 1953. Equations of state calculations by fast computing machines. Journal of Chemical Physics 21: 1087-1092. link.
# \donttest{ data(rodents) document_term_table <- rodents$document_term_table document_covariate_table <- rodents$document_covariate_table LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] data <- document_covariate_table data$gamma <- LDA_models@gamma weights <- document_weights(document_term_table) data <- data[order(data[,"newmoon"]), ] saves <- prep_saves(1, TS_control()) inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) ids <- prep_ids(TS_control()) for(i in 1:TS_control()$nit){ steps <- step_chains(i, cpts, inputs) swaps <- swap_chains(steps, inputs, ids) saves <- update_saves(i, saves, steps, swaps) cpts <- update_cpts(cpts, swaps) ids <- update_ids(ids, swaps) } # within step_chains() cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) i <- 1 prop_step <- propose_step(i, cpts, inputs) accept_step <- eval_step(i, cpts, prop_step, inputs) take_step(cpts, prop_step, accept_step) # }