Nothing
#' Sample alpha conditional on partition and K using an
#' Metropolis-Hastings step with log-normal proposal.
#'
#' @description Sample \eqn{\alpha} conditional on the current
#' partition and value of \eqn{K} using an Metropolis-Hastings
#' step with log-normal proposal.
#' @param N A number; indicating the sample size.
#' @param Nk An integer vector; indicating the group sizes in the partition.
#' @param K A number; indicating the number of components.
#' @param alpha A numeric value; indicating the value for \eqn{\alpha}.
#' @param s0_proposal A numeric value; indicating the standard deviation of the random walk.
#' @param log_pAlpha A function; evaluating the log prior of \eqn{\alpha}.
#' @return A named list containing:
#' * `"alpha"`: a numeric, the new \eqn{\alpha} value.
#' * `"acc"`: logical indicating acceptance.
sampleAlpha <- function(N, Nk, K, alpha, s0_proposal, log_pAlpha) {
log_post_alpha <- function(x)
lgamma(x) - lgamma(N+x) + sum(lgamma(Nk+x/K) - lgamma(x/K)) +
log_pAlpha(x)
lalpha_p <- log(alpha) + rnorm(1, 0, s0_proposal)
alpha_p <- exp(lalpha_p)
lalpha1 <- log_post_alpha(alpha_p) - log_post_alpha(alpha) +
log(alpha_p) - log(alpha)
alpha1 <- exp(lalpha1)
acc <- FALSE
if (runif(1) <= alpha1) {
alpha <- alpha_p
acc <- TRUE
}
return(list(alpha = alpha, acc = acc))
}
#' Sample e0 conditional on partition and K using an
#' Metropolis-Hastings step with log-normal proposal.
#'
#' @description Sample \eqn{e_0} conditional on the current partition
#' and value of \eqn{K} using an Metropolis-Hastings step with
#' log-normal proposal.
#'
#' @param K A number; indicating the number of components.
#' @param Kp A number; indicating the number of filled components \eqn{K_+}.
#' @param N A number; indicating the sample size.
#' @param Nk An integer vector; indicating the group sizes in the partition.
#' @param s0_proposal A numeric value; indicating the standard deviation of the random walk proposal.
#' @param e0 A numeric value; indicating the current value of \eqn{e_0}.
#' @param log_p_e0 A function; evaluating the log prior of \eqn{e_0}.
#' @return A named list containing:
#' * `"e0"`: a numeric, the new \eqn{e_0} value.
#' * `"acc"`: logical indicating acceptance.
sampleE0 <- function(K, Kp, N, Nk, s0_proposal, e0, log_p_e0) {
log_post_e0 <- function(x)
lgamma(K+1) - lgamma(K+1-Kp) + lgamma(K*x) -
lgamma(N+K*x) + sum(lgamma(Nk+x) - lgamma(x)) +
log_p_e0(x)
le0_p <- log(e0) + rnorm(1, 0, s0_proposal)
e0_p <- exp(le0_p)
lalpha1 <- log_post_e0(e0_p) - log_post_e0(e0) + log(e0_p) - log(e0)
alpha1 <- min(exp(lalpha1), 1)
acc <- FALSE
if (runif(1) <= alpha1) {
e0 <- e0_p
acc <- TRUE
}
return(list(e0 = e0, acc = acc))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.