This function handles the among-chain swapping based on
temperatures and likelihood differentials.
This function was designed to work within TS
and
specifically est_changepoints
. It is still hardcoded to do
so, but has the capacity to be generalized to work with any estimation
via ptMCMC with additional coding work.
swap_chains(chainsin, inputs, ids)
chainsin | Chain configuration to be evaluated for swapping. |
---|---|
inputs | Class |
ids | The vector of integer chain ids. |
list
of updated change points, log-likelihoods, and chain
ids, as well as a vector of acceptance indicators for each swap.
The ptMCMC algorithm couples the chains (which are taking their own walks on the distribution surface) through "swaps", where neighboring chains exchange configurations (Geyer 1991, Falcioni and Deem 1999) following the Metropolis criterion (Metropolis et al. 1953). This allows them to share information and search the surface in combination (Earl and Deem 2005).
Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, applications, and new perspectives. Physical Chemistry Chemical Physics 7: 3910-3916. link.
Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for zeolite structure solution. Journal of Chemical Physics 110: 1754-1766. link.
Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. In Computing Science and Statistics: Proceedings of the 23rd Symposium on the Interface. pp 156-163. American Statistical Association, New York, USA. 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) } # }