#' Specify prior on \eqn{K}. #' #' @description Obtain a function to evaluate the log prior #' specified for \eqn{K}. #' @param P A character indicating which specification should be #' used. See Details for suitable values. #' @param K A numeric or integer scalar specifying the fixed (if `P` #' equals `"fixedK"`) or maximum value (if `P` equals `"Unif"`) of #' \eqn{K}. #' @return A named list containing: #' * `"log_pK"`: a function of the log prior of \eqn{K}. #' * `"param"`: a list with the parameters. #' #' @details #' The following prior specifications are supported: #' * `"fixedK"`: K has the fixed value K (second argument). #' * `"Unif"`: \eqn{K \sim} Unif\eqn{[1,K]}, where the upper limit is given by K (second argument). #' * `"BNB_111"`: \eqn{K-1 \sim} BNB(1,1,1), i.e., \eqn{K-1} follows a beta-negative binomial distribution with parameters \eqn{(1,1,1)}. #' * `"BNB_121"`: \eqn{K-1 \sim} BNB(1,2,1), i.e., \eqn{K-1} follows a beta-negative binomial distribution with parameters \eqn{(1,2,1)}. #' * `"BNB_143"`: \eqn{K-1 \sim} BNB(1,2,1), i.e., \eqn{K-1} follows a beta-negative binomial distribution with parameters \eqn{(1,4,3)}. #' * `"BNB_443"`: \eqn{K-1 \sim} BNB(4,4,3), i.e., \eqn{K-1} follows a beta-negative binomial distribution with parameters \eqn{(4,4,3)}. #' * `"BNB_943"`: \eqn{K-1 \sim} BNB(9,4,3), i.e., \eqn{K-1} follows a beta-negative binomial distribution with parameters \eqn{(9,4,3)}. #' * `"Pois_1"`: \eqn{K-1 \sim} pois(1), i.e., \eqn{K-1} follows a Poisson distribution with rate 1. #' * `"Pois_4"`: \eqn{K-1 \sim} pois(4), i.e., \eqn{K-1} follows a Poisson distribution with rate 4. #' * `"Pois_9"`: \eqn{K-1 \sim} pois(9), i.e., \eqn{K-1} follows a Poisson distribution with rate 9. #' * `"Geom_05"`: \eqn{K-1 \sim} geom(0.5), i.e., \eqn{K-1} follows a geometric distribution with success probability \eqn{p=0.5} and density \eqn{f(x)=p(1-p)^x}. #' * `"Geom_02"`: \eqn{K-1 \sim} geom(0.2), i.e., \eqn{K-1} follows a geometric distribution with success probability \eqn{p=0.2} and density \eqn{f(x)=p(1-p)^x}. #' * `"Geom_01"`: \eqn{K-1 \sim} geom(0.1), i.e., \eqn{K-1} follows a geometric distribution with success probability \eqn{p=0.1} and density \eqn{f(x)=p(1-p)^x}. #' * `"NB_11"`: \eqn{K-1 \sim} nbinom(1,0.5), i.e., \eqn{K-1} follows a negative-binomial distribution with \eqn{size=1} and \eqn{p=0.5}. #' * `"NB_41"`: \eqn{K-1 \sim} nbinom(4,0.5), i.e., \eqn{K-1} follows a negative-binomial distribution with \eqn{size=4} and \eqn{p=0.5}. #' * `"NB_91"`: \eqn{K-1 \sim} nbinom(9,0.5), i.e., \eqn{K-1} follows a negative-binomial distribution with \eqn{size=9} and \eqn{p=0.5}. #' priorOnK_spec <- function(P = c("fixedK", "Unif", "BNB_111", "BNB_121", "BNB_143", "BNB_443", "BNB_943", "Pois_1", "Pois_4", "Pois_9", "Geom_05", "Geom_02", "Geom_01", "NB_11", "NB_41", "NB_91"), K) { P <- match.arg(P) if (P %in% c("fixedK", "Unif")) { stopifnot(is.numeric(K), length(K) == 1, K >= 1) K <- as.integer(K) } if (P == "fixedK") { param <- list(K_0 = K) log_pK <-function (x) log(x == K) } if (P == "Unif") { param <- list(Kmax = K) log_pK <-function (x) log(1/K) } if (P == "BNB_111") { alpha.B <- 1 a_pi <- 1 b_pi <- 1 param <- list(alpha.B = alpha.B, a_pi = a_pi, b_pi = b_pi) log_pK <- function (x) dbnbinom(x, size = alpha.B, alpha = a_pi, beta = b_pi, log = TRUE) - log(0.5) } if (P == "BNB_212") { alpha.B <- 2 a_pi <- 1 b_pi <- 2 param <- list(alpha.B = alpha.B, a_pi = a_pi, b_pi = b_pi) log_pK <- function (x) dbnbinom(x-1, size = alpha.B, alpha = a_pi, beta = b_pi, log = TRUE) } if (P == "BNB_143") { alpha.B <- 1 a_pi <- 4 b_pi <- 3 param <- list(alpha.B = alpha.B, a_pi = a_pi, b_pi = b_pi) log_pK <- function (x) dbnbinom(x-1, size = alpha.B, alpha = a_pi, beta = b_pi, log = TRUE) } if (P == "BNB_443") { alpha.B <- 4 a_pi <- 4 b_pi <- 3 param <- list(alpha.B = alpha.B, a_pi = a_pi, b_pi = b_pi) log_pK <- function (x) dbnbinom(x-1, size = alpha.B, alpha = a_pi, beta = b_pi, log = TRUE) } if (P == "BNB_943") { alpha.B <- 9 a_pi <- 4 b_pi <- 3 param <- list(alpha.B = alpha.B, a_pi = a_pi, b_pi = b_pi) log_pK <- function (x) dbnbinom(x-1, size = alpha.B, alpha = a_pi, beta = b_pi, log = TRUE) } if (P == "Pois_1") { lambda <- 1 param <- list(lambda = lambda) log_pK <- function(x) dpois(x-1, lambda, log = TRUE) } if (P == "Pois_4") { lambda <- 4 param <- list(lambda = lambda) log_pK <- function(x) dpois(x-1, lambda, log = TRUE) } if (P == "Pois_9") { lambda <- 9 param <- list(lambda = lambda) log_pK <- function(x) dpois(x-1, lambda, log = TRUE) } if (P == "Geom_05") { p_geom <- 0.5 param <- list(p_geom = p_geom) log_pK <- function(x) dgeom(x-1, p_geom, log = TRUE) } if (P == "Geom_02") { p_geom <- 0.2 param <- list(p_geom = p_geom) log_pK <- function(x) dgeom(x-1, p_geom, log = TRUE) } if (P == "Geom_01") { p_geom <- 0.1 param <- list(p_geom = p_geom) log_pK <- function(x) dgeom(x-1, p_geom, log = TRUE) } if (P == "NB_11") { alpha.nb <- 1 beta.nb <- 1 param <- list(alpha.nb = alpha.nb, beta.nb = beta.nb) log_pK <- function (x) dnbinom(x-1, size = alpha.nb, prob = beta.nb/(beta.nb+1), log = TRUE) } if (P == "NB_41") { alpha.nb <- 4 beta.nb <- 1 param <- list(alpha.nb = alpha.nb, beta.nb = beta.nb) log_pK <- function (x) dnbinom(x-1, size = alpha.nb, prob = beta.nb/(beta.nb+1), log = TRUE) } if (P == "NB_91") { alpha.nb <- 9 beta.nb <- 1 param <- list(alpha.nb = alpha.nb, beta.nb = beta.nb) log_pK <- function (x) dnbinom(x-1, size = alpha.nb, prob = beta.nb/(beta.nb+1), log = TRUE) } return(list(log_pK = log_pK, param = param)) }