library(cubature) demo < - function() { write.cmd <- function(s) { cat(sprintf('> %s\n', s)); flush.console() } readln < - function()readline('Hit [ENTER] to continue...\n') write.cmd('print.config()') print.config() readln() write.cmd('plot.p0.posterior.density(k.data, n.data)') plot.p0.posterior.density(k.data, n.data) readln() write.cmd('p0.posterior.probability(0.2, 0.4, k.data, n.data)') print(p0.posterior.probability(0.2, 0.4, k.data, n.data)) readln() write.cmd('plot.p1.posterior.density(k.data, n.data)') plot.p1.posterior.density(k.data, n.data) readln() write.cmd('p1.posterior.probability(0.2, 0.4, k.data, n.data)') print(p1.posterior.probability(0.2, 0.4, k.data, n.data)) readln() write.cmd('plot.delta1.posterior.density(k.data, n.data)') plot.delta1.posterior.density(k.data, n.data) readln() write.cmd('delta1.posterior.probability(0, 1, k.data, n.data)') print(delta1.posterior.probability(0, 1, k.data, n.data)) readln() write.cmd('plot.p2.posterior.density(k.data, n.data)') plot.p2.posterior.density(k.data, n.data) readln() write.cmd('p2.posterior.probability(0.2, 0.4, k.data, n.data)') print(p2.posterior.probability(0.2, 0.4, k.data, n.data)) readln() write.cmd('plot.delta2.posterior.density(k.data, n.data)') plot.delta2.posterior.density(k.data, n.data) readln() write.cmd('delta2.posterior.probability(0, 1, k.data, n.data)') print(delta2.posterior.probability(0, 1, k.data, n.data)) readln() write.cmd('plot.p3.posterior.density(k.data, n.data)') plot.p3.posterior.density(k.data, n.data) readln() write.cmd('p3.posterior.probability(0.2, 0.4, k.data, n.data)') print(p3.posterior.probability(0.2, 0.4, k.data, n.data)) readln() write.cmd('plot.delta3.posterior.density(k.data, n.data)') plot.delta3.posterior.density(k.data, n.data) readln() write.cmd('delta3.posterior.probability(0, 1, k.data, n.data)') print(delta3.posterior.probability(0, 1, k.data, n.data)) readln() invisible(NULL) } ###################################################################### # Configuration: control parameters, prior parameters, and data ###################################################################### # A very small positive number eps <- 1e-12 # Relative tolerance for computing integrals rel.tol <- 1e-3 # each wave is two weeks long w <- 2 # drift standard deviation s.sigma <- 0.105 * sqrt(2) # a large number far out in the right tail of the prior for sigma, # the drift standard deviation. inf.sigma <- 4 * s.sigma # standard deviation for prior on alpha0 s.alpha <- 1.6 # sample sizes and numbers of positive response for time-steps 0 to 3 n.data <- c(100, 50, 63, 45) k.data <- c( 25, 15, 22, 18) print.config <- function() { cat(sprintf('eps <- %g\n', eps)) cat(sprintf('rel.tol <- %g\n', rel.tol)) cat(sprintf('w <- %d\n', w)) cat(sprintf('s.sigma <- %g\n', s.sigma)) cat(sprintf('inf.sigma <- %g\n', inf.sigma)) cat(sprintf('s.alpha <- %g\n', s.alpha)) cat(sprintf('n.data <- c(%s)\n', paste(n.data, collapse=', '))) cat(sprintf('k.data <- c(%s)\n', paste(k.data, collapse=', '))) } ###################################################################### # Utilities ###################################################################### logit <- function(p)log(p/(1-p)) # RETURNS: A vector of the midpoints of the N equal-length subintervals of the # interval from a to b. # midpoints <- function(a, b, N) { a + ((1:N) - 0.5)/N * (b - a) } # RETURNS: # INTEGRAL lo[n] to hi[n] : ... : INTEGRAL lo[1] to hi[1]: # f(x1, ..., xn) d x1 ... d xn # where n is the length of lo and hi. # multivariate.integrate <- function(f, lo, hi) { x <- adaptIntegrate(f, lo, hi, tol=rel.tol) stopifnot(x$returnCode == 0 && x$error < 2 * rel.tol) x$integral } # Runs command and prints out start time and total running time. # time.command <- function(command) { t0 <- Sys.time() cat(sprintf('Start: %s\n', format(t0))); flush.console() eval(command) t1 <- Sys.time() cat(sprintf('Run time: %s\n', format(t1 - t0))) } ###################################################################### # X.joint.density() functions giving joint probability density of all # variables up to a given time step. ###################################################################### # RETURNS: density(p0, k0=k[1] | n0=n[1]). # p0.joint.density <- function(p0, k, n) { # Start with check to avoids some numerical problems. if (p0 < 0 + eps || p0 > 1 - eps) return(0) k0 < - k[1]; n0 <- n[1] alpha0 <- logit(p0) dnorm(alpha0, 0, s.alpha) / p0 / (1 - p0) * dbinom(k0, n0, p0) } # RETURNS: density(sigma, p0, k0=k[1], p1, k1=k[2] | n0=n[1], n1=n[2]). # p1.joint.density <- function(sigma, p0, p1, k, n) { # Start with check to avoids some numerical problems. if (any(c(sigma, p0, p1) < 0 + eps) || any(c(p0, p1) > 1 - eps)) return(0) k0 < - k[1]; n0 <- n[1] k1 <- k[2]; n1 <- n[2] alpha0 <- logit(p0) alpha1 <- logit(p1) 2 * dnorm(sigma, 0, s.sigma) * dnorm(alpha0, 0, s.alpha) / p0 / (1 - p0) * dnorm(alpha1, alpha0, s.alpha) / p1 / (1 - p1) * dbinom(k0, n0, p0) * dbinom(k1, n1, p1) } # RETURNS: density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]). # p2.joint.density <- function(sigma, p0, p1, p2, k, n) { # Start with check to avoids some numerical problems. if (any(c(sigma, p0, p1, p2) < 0 + eps) || any(c(p0, p1, p2) > 1 - eps)) return(0) k0 < - k[1]; n0 <- n[1] k1 <- k[2]; n1 <- n[2] k2 <- k[3]; n2 <- n[3] alpha0 <- logit(p0) alpha1 <- logit(p1) alpha2 <- logit(p2) 2 * dnorm(sigma, 0, s.sigma) * dnorm(alpha0, 0, s.alpha) / p0 / (1 - p0) * dnorm(alpha1, alpha0, s.alpha) / p1 / (1 - p1) * dnorm(alpha2, alpha1, s.alpha) / p2 / (1 - p2) * dbinom(k0, n0, p0) * dbinom(k1, n1, p1) * dbinom(k2, n2, p2) } # RETURNS: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], p3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]). # p3.joint.density <- function(sigma, p0, p1, p2, p3, k, n) { # Start with check to avoids some numerical problems. ps <- c(p0, p1, p2, p3) if (any(c(sigma, ps) < 0 + eps) || any(ps > 1 - eps)) return(0) k0 < - k[1]; n0 <- n[1] k1 <- k[2]; n1 <- n[2] k2 <- k[3]; n2 <- n[3] k3 <- k[4]; n3 <- n[4] alpha0 <- logit(p0) alpha1 <- logit(p1) alpha2 <- logit(p2) alpha3 <- logit(p3) 2 * dnorm(sigma, 0, s.sigma) * dnorm(alpha0, 0, s.alpha) / p0 / (1 - p0) * dnorm(alpha1, alpha0, s.alpha) / p1 / (1 - p1) * dnorm(alpha2, alpha1, s.alpha) / p2 / (1 - p2) * dnorm(alpha3, alpha2, s.alpha) / p3 / (1 - p3) * dbinom(k0, n0, p0) * dbinom(k1, n1, p1) * dbinom(k2, n2, p2) * dbinom(k3, n3, p3) } # RETURNS: density(sigma, p0, k0=k[1], delta1, k1=k[2] # | n0=n[1], n1=n[2]) # where delta1 = p1 - p0. # delta1.joint.density <- function(sigma, p0, delta1, k, n) { p1.joint.density(sigma, p0, p0 + delta1, k, n) } # RETURNS: density(sigma, p0, k0=k[1], p1, k1=k[2], delta2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]) # where delta2 = p2 - p0. # delta2.joint.density <- function(sigma, p0, p1, delta2, k, n) { p2.joint.density(sigma, p0, p1, p0 + delta2, k, n) } # RETURNS: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], delta3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]) # where delta3 = p3 - p0. # delta3.joint.density <- function(sigma, p0, p1, p2, delta3, k, n) { p3.joint.density(sigma, p0, p1, p2, p0 + delta3, k, n) } ###################################################################### # X.data.joint.probability() functions giving joint probability of # (1) a variable being within a given range, and # (2) count data up to a given time step having given values. ###################################################################### # RETURNS: Pr(a < p0 < b, k0=k[1] | n0=n[1]), # computed as # INTEGRAL a to b: density(p0, k0=k[1] | n0=n[1]) d p0. # p0.data.joint.probability <- function(a, b, k, n) { f <- function(p0) { p0.joint.density(p0, k, n) } multivariate.integrate(f, a, b) } # RETURNS: Pr(a < p1 < b, k0=k[1], k1=k[2] | n0=n[1], n1=n[2]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2] | n0=n[1], n1=n[2]) # d sigma d p0 d p1 # where inf is a large positive number. # p1.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p1.joint.density(sigma, p0, p1, k, n) } multivariate.integrate(f, c(0, 0, a), c(inf.sigma, 1, b)) } # RETURNS: Pr(a < delta1 < b, k0=k[1], k1=k[2] | n0=n[1], n1=n[2]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], delta1, k1=k[2] | n0=n[1], n1=n[2]) # d sigma d p0 d delta1 # where inf is a large positive number and delta1 = p1 - p0. # delta1.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] delta1 <- x[3] delta1.joint.density(sigma, p0, delta1, k, n) } multivariate.integrate(f, c(0, 0, a), c(inf.sigma, 1, b)) } # RETURNS: Pr(a < p2 < b, k0=k[1], k1=k[2], k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]) # d sigma d p0 d p1 d p2 # where inf is a large positive number. # p2.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2 <- x[4] p2.joint.density(sigma, p0, p1, p2, k, n) } multivariate.integrate(f, c(0, 0, 0, a), c(inf.sigma, 1, 1, b)) } # RETURNS: Pr(a < delta2 < b, k0=k[1], k1=k[2], k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], delta2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]) # d sigma d p0 d p1 d delta2 # where inf is a large positive number and delta2 = p2 - p0. # delta2.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] delta2 <- x[4] delta2.joint.density(sigma, p0, p1, delta2, k, n) } multivariate.integrate(f, c(0, 0, 0, a), c(inf.sigma, 1, 1, b)) } # RETURNS: Pr(a < p3 < b, k0=k[1], k1=k[2], k2=k[3], k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], p3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]) # d sigma d p0 d p1 d p2 d p3 # where inf is a large positive number. # p3.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2 <- x[4] p3 <- x[5] p3.joint.density(sigma, p0, p1, p2, p3, k, n) } multivariate.integrate(f, c(0, 0, 0, 0, a), c(inf.sigma, 1, 1, 1, b)) } # RETURNS: Pr(a < delta3 < b, k0=k[1], k1=k[2], k2=k[3], k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]), # computed as # INTEGRAL a to b: INTEGRAL 0 to 1: # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], delta3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]) # d sigma d p0 d p1 d p2 d delta3 # where inf is a large positive number and delta3 = p3 - p0. # delta3.data.joint.probability <- function(a, b, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2 <- x[4] delta3 <- x[5] delta3.joint.density(sigma, p0, p1, p2, delta3, k, n) } multivariate.integrate(f, c(0, 0, 0, 0, a), c(inf.sigma, 1, 1, 1, b)) } ###################################################################### # X.data.joint.density() functions giving joint probability density # of a variable and the count data up to a given time step. ###################################################################### # RETURNS: density(p1, k0=k[1], k1=k[2] | n0=n[1], n1=n[2]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2] | n0=n[1], n1=n[2]) # d sigma d p0 # p1.data.joint.density <- function(p1, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1.joint.density(sigma, p0, p1, k, n) } multivariate.integrate(f, c(0, 0), c(inf.sigma, 1)) } # RETURNS: density(delta1, k0=k[1], k1=k[2] | n0=n[1], n1=n[2]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], delta1, k1=k[2] | n0=n[1], n1=n[2]) # d sigma d p0 # delta1.data.joint.density <- function(delta1, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] delta1.joint.density(sigma, p0, delta1, k, n) } multivariate.integrate(f, c(0, 0), c(inf.sigma, 1)) } # RETURNS: density(p2, k0=k[1], k1=k[2], k2=k[3] | n0=n[1], n1=n[2], n2=n[3]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]) # d sigma d p0 d p1 # p2.data.joint.density <- function(p2, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2.joint.density(sigma, p0, p1, p2, k, n) } multivariate.integrate(f, c(0, 0, 0), c(inf.sigma, 1, 1)) } # RETURNS: density(delta2, k0=k[1], k1=k[2], k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], delta2, k2=k[3] # | n0=n[1], n1=n[2], n2=n[3]) # d sigma d p0 d p1 # delta2.data.joint.density <- function(delta2, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] delta2.joint.density(sigma, p0, p1, delta2, k, n) } multivariate.integrate(f, c(0, 0, 0), c(inf.sigma, 1, 1)) } # RETURNS: density(p3, k0=k[1], k1=k[2], k2=k[3], k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], p3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]) # d sigma d p0 d p1 d p2 # p3.data.joint.density <- function(p3, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2 <- x[4] p3.joint.density(sigma, p0, p1, p2, p3, k, n) } multivariate.integrate(f, c(0, 0, 0, 0), c(inf.sigma, 1, 1, 1)) } # RETURNS: density(delta3, k0=k[1], k1=k[2], k2=k[3], k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]), # computed as # INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to 1: INTEGRAL 0 to inf: # density(sigma, p0, k0=k[1], p1, k1=k[2], p2, k2=k[3], delta3, k3=k[4] # | n0=n[1], n1=n[2], n2=n[3], n3=n[4]) # d sigma d p0 d p1 d p2 # delta3.data.joint.density <- function(delta3, k, n) { f <- function(x) { sigma <- x[1] p0 <- x[2] p1 <- x[3] p2 <- x[4] delta3.joint.density(sigma, p0, p1, p2, delta3, k, n) } multivariate.integrate(f, c(0, 0, 0, 0), c(inf.sigma, 1, 1, 1)) } ###################################################################### # X.posterior.density() functions. ###################################################################### # NOTE: vapply(vec, func, 0) creates the vector # c(func(vec[1]), func(vec[2]), ..., func(vec[n]) # where n is the length of vec. # RETURNS: A vector of the values # density(p0 | k0=k[1], n0=n[1]) # for all values p0 in p0.vec. # p0.posterior.density <- function(p0.vec, k, n) { f <- function(p0)p0.joint.density(p0, k, n) numerator <- vapply(p0.vec, f, 0) denominator <- p0.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(p1 | k0=k[1], n0=n[1], k1=k[2], n1=n[2]) # for all values p1 in p1.vec # p1.posterior.density <- function(p1.vec, k, n) { f <- function(p1)p1.data.joint.density(p1, k, n) numerator <- vapply(p1.vec, f, 0) denominator <- p1.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(delta1 | k0=k[1], n0=n[1], k1=k[2], n1=n[2]) # for all values delta1 in delta1.vec # delta1.posterior.density <- function(delta1.vec, k, n) { f <- function(delta1)delta1.data.joint.density(delta1, k, n) numerator <- vapply(delta1.vec, f, 0) denominator <- delta1.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(p2 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], k2=k[3], n2=n[3]) # for all values p2 in p2.vec # p2.posterior.density <- function(p2.vec, k, n) { f <- function(p2)p2.data.joint.density(p2, k, n) numerator <- vapply(p2.vec, f, 0) denominator <- p2.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(delta2 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], k2=k[3], n2=n[3]) # for all values delta2 in delta2.vec # delta2.posterior.density <- function(delta2.vec, k, n) { f <- function(delta2)delta2.data.joint.density(delta2, k, n) numerator <- vapply(delta2.vec, f, 0) denominator <- delta2.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(p3 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]) # for all values p3 in p3.vec # p3.posterior.density <- function(p3.vec, k, n) { f <- function(p3)p3.data.joint.density(p3, k, n) numerator <- vapply(p3.vec, f, 0) denominator <- p3.data.joint.probability(0, 1, k, n) numerator / denominator } # RETURNS: A vector of the values # density(delta3 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]) # for all values delta3 in delta3.vec # delta3.posterior.density <- function(delta3.vec, k, n) { f <- function(delta3)delta3.data.joint.density(delta3, k, n) numerator <- vapply(delta3.vec, f, 0) denominator <- delta3.data.joint.probability(0, 1, k, n) numerator / denominator } ###################################################################### # X.posterior.probability() functions giving the posterior # probability that a variable is in a given range. ###################################################################### # RETURNS: Pr(a < p0 < b | k0=k[1], n0=n[1]). # p0.posterior.probability <- function(a, b, k, n) { p0.data.joint.probability(a, b, k, n) / p0.data.joint.probability(0, 1, k, n) } # RETURNS: Pr(a < p1 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2]). # p1.posterior.probability <- function(a, b, k, n) { p1.data.joint.probability(a, b, k, n) / p1.data.joint.probability(0, 1, k, n) } # RETURNS: Pr(a < delta1 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2]). # delta1.posterior.probability <- function(a, b, k, n) { delta1.data.joint.probability(a, b, k, n) / delta1.data.joint.probability(-1, 1, k, n) } # RETURNS: Pr(a < p2 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3]). # p2.posterior.probability <- function(a, b, k, n) { p2.data.joint.probability(a, b, k, n) / p2.data.joint.probability(0, 1, k, n) } # RETURNS: Pr(a < delta2 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3]). # delta2.posterior.probability <- function(a, b, k, n) { delta2.data.joint.probability(a, b, k, n) / delta2.data.joint.probability(-1, 1, k, n) } # RETURNS: Pr(a < p3 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]). # p3.posterior.probability <- function(a, b, k, n) { p3.data.joint.probability(a, b, k, n) / p3.data.joint.probability(0, 1, k, n) } # RETURNS: Pr(a < delta3 < b | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]). # delta3.posterior.probability <- function(a, b, k, n) { delta3.data.joint.probability(a, b, k, n) / delta3.data.joint.probability(-1, 1, k, n) } ###################################################################### # plot.X.posterior.density() functions. ###################################################################### # Plots density(p0 | k0=k[1], n0=n[1]). # plot.p0.posterior.density <- function(k, n) { pvec <- midpoints(0, 1, 500) time.command( plot(pvec, p0.posterior.density(pvec, k, n), type='l', ylab='posterior density', xlab='p0') ) } # Plots density(p1 | k0=k[1], n0=n[1], k1=k[2], n1=n[2]) # plot.p1.posterior.density <- function(k, n) { pvec <- midpoints(0, 1, 500) time.command( plot(pvec, p1.posterior.density(pvec, k, n), type='l', ylab='posterior density', xlab='p1') ) } # Plots density(delta1 | k0=k[1], n0=n[1], k1=k[2], n1=n[2]) # plot.delta1.posterior.density <- function(k, n) { delta.vec <- midpoints(-.5, .5, 500) time.command( plot(delta.vec, delta1.posterior.density(delta.vec, k, n), type='l', ylab='posterior density', xlab='delta1') ) } # Plots density(p2 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3]) # plot.p2.posterior.density <- function(k, n) { pvec <- midpoints(0, 1, 300) time.command( plot(pvec, p2.posterior.density(pvec, k, n), type='l', ylab='posterior density', xlab='p2') ) } # Plots density(delta2 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3]) # plot.delta2.posterior.density <- function(k, n) { delta.vec <- midpoints(-0.5, 0.5, 300) time.command( plot(delta.vec, delta2.posterior.density(delta.vec, k, n), type='l', ylab='posterior density', xlab='delta2') ) } # Plots density(p3 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]) # plot.p3.posterior.density <- function(k, n) { pvec <- midpoints(0, 1, 300) time.command( plot(pvec, p3.posterior.density(pvec, k, n), type='l', ylab='posterior density', xlab='p3') ) } # Plots density(delta3 | k0=k[1], n0=n[1], k1=k[2], n1=n[2], # k2=k[3], n2=n[3], k3=k[4], n3=n[4]) # plot.delta3.posterior.density <- function(k, n) { delta.vec <- midpoints(-0.5, 0.5, 300) time.command( plot(delta.vec, delta3.posterior.density(delta.vec, k, n), type='l', ylab='posterior density', xlab='delta3') ) }