Nothing
      #' Create a Beta mixing distribution.
#'
#' See \code{\link{DirichletProcessBeta}} for the default prior and hyper prior distributions.
#'
#' @param priorParameters The prior parameters for the base measure.
#' @param mhStepSize The Metropolis Hastings step size. A numeric vector of length 2.
#' @param maxT The upper bound of the Beta distribution. Defaults to 1 for the standard Beta distribution.
#' @param hyperPriorParameters The parameters for the hyper prior.
#' @return A mixing distribution object.
#' @export
BetaMixtureCreate <- function(priorParameters = c(2, 8), mhStepSize = c(1, 1), maxT = 1,
                              hyperPriorParameters = c(1, 0.125)) {
  mdObj <- MixingDistribution("beta",
                              priorParameters, "nonconjugate",
                              mhStepSize, hyperPriorParameters)
  mdObj$maxT <- maxT
  return(mdObj)
}
#' @export
#' @rdname Likelihood
Likelihood.beta <- function(mdObj, x, theta) {
  maxT <- mdObj$maxT
  x <- as.vector(x, "numeric")
  mu <- theta[[1]][, , , drop = TRUE]
  tau <- theta[[2]][, , , drop = TRUE]
  a <- (mu * tau)/maxT
  b <- (1 - mu/maxT) * tau
  #cat(c(mu, tau, a, b), '\n')
  # numerator <- (a - 1) * log(x) + (b - 1) * log(maxT - x)
  # numerator <- numerator - lbeta(a, b) - (tau - 1) * log(maxT)
  # y <- exp(numerator)
  y <- 1/maxT * dbeta(x/maxT, a, b)
  return(as.numeric(y))
}
#' @export
#' @rdname PriorDraw
PriorDraw.beta <- function(mdObj, n = 1) {
  priorParameters <- mdObj$priorParameters
  mu <- runif(n, 0, mdObj$maxT)
  nu <- 1/rgamma(n, priorParameters[1], priorParameters[2])
  theta <- list(mu = array(mu, c(1, 1, n)), nu = array(nu, c(1, 1, n)))
  return(theta)
}
#' @export
#' @rdname PriorDensity
PriorDensity.beta <- function(mdObj, theta) {
  priorParameters <- mdObj$priorParameters
  muDensity <- dunif(theta[[1]], 0, mdObj$maxT)
  nuDensity <- dgamma(1/theta[[2]], priorParameters[1], priorParameters[2])
  thetaDensity <- muDensity * nuDensity
  return(as.numeric(thetaDensity))
}
# PosteriorDraw.beta <- function(mdObj, x, n=100, start_pos){
# if(missing(start_pos)){ start_pos <- PriorDraw(mdObj) } mh_result <-
# MetropolisHastings(x, start_pos, mdObj, no_draws=n) theta <-
# list(mu=array(mh_result$parameter_samples[[1]], dim=c(1,1,n)),
# nu=array(mh_result$parameter_samples[[2]], dim=c(1,1,n))) return(theta) }
#' @export
#' @rdname PriorParametersUpdate
PriorParametersUpdate.beta <- function(mdObj, clusterParameters, n = 1) {
  hyperPriorParameters <- mdObj$hyperPriorParameters
  priorParameters <- mdObj$priorParameters
  numClusters <- dim(clusterParameters[[1]])[3]
  posteriorShape <- hyperPriorParameters[1] + priorParameters[1] * numClusters
  posteriorRate <- hyperPriorParameters[2] + sum(1/clusterParameters[[2]])
  newGamma <- rgamma(n, posteriorShape, posteriorRate)
  newPriorParameters <- matrix(c(priorParameters[1], newGamma), ncol = 2)
  mdObj$priorParameters <- newPriorParameters
  return(mdObj)
}
#' @export
#' @rdname MhParameterProposal
MhParameterProposal.beta <- function(mdObj, old_params) {
  mhStepSize <- mdObj$mhStepSize
  new_params <- old_params
  new_params[[1]] <- old_params[[1]] + mhStepSize[1] * rnorm(1, 0, 2.4)
  if (new_params[[1]] > mdObj$maxT | new_params[[1]] < 0) {
    new_params[[1]] <- old_params[[1]]
  }
  new_params[[2]] <- abs(old_params[[2]] + mhStepSize[2] * rnorm(1, 0, 2.4))
  return(new_params)
}
#' @export
#' @rdname PenalisedLikelihood
PenalisedLikelihood.beta <- function(mdObj, x){
  optimStartParams <- c(mdObj$maxT/2, 2)
  optimParams <- tryCatch(optim(optimStartParams, function(params){
    ll <- sum(log(Likelihood(mdObj, x, VectorToArray(params))))
    ll <- ll + log(PriorDensity(mdObj, VectorToArray(params)))
    if (is.infinite(ll)) ll <- -1e30
    return(-ll)
  }, method="L-BFGS-B", lower=c(0,0), upper=c(mdObj$maxT, Inf)), error = function(e) list(par=optimStartParams))
  optimParamsRet <- VectorToArray(optimParams$par)
  return(optimParamsRet)
}
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.