Type: | Package |
Title: | Constructs a Correlated Pseudo-Marginal Sampler |
Version: | 1.0.1 |
Description: | The primary function makeCPMSampler() generates a sampler function which performs the correlated pseudo-marginal method of Deligiannidis, Doucet and Pitt (2017) <doi:10.48550/arXiv.1511.04992>. If the 'rho=' argument of makeCPMSampler() is set to 0, then the generated sampler function performs the original pseudo-marginal method of Andrieu and Roberts (2009) <doi:10.1214/07-AOS574>. The sampler function is constructed with the user's choice of prior, parameter proposal distribution, and the likelihood approximation scheme. Note that this algorithm is not automatically tuned–each one of these arguments must be carefully chosen. |
License: | MIT + file LICENSE |
RoxygenNote: | 7.1.1 |
Suggests: | knitr, rmarkdown |
VignetteBuilder: | knitr |
NeedsCompilation: | no |
Packaged: | 2021-09-04 15:39:29 UTC; taylor |
Author: | Taylor Brown [aut, cre] |
Maintainer: | Taylor Brown <trb5me@virginia.edu> |
Repository: | CRAN |
Date/Publication: | 2021-09-05 00:30:12 UTC |
checks if a log-density evaluation is not a valid number
Description
checks if a log-density evaluation is not a valid number
Usage
isBadNum(num)
Arguments
num |
evaluation of a log-density |
Value
TRUE or FALSE
Examples
isBadNum(NaN)
correlated pseudo-marginal: generates functions that output a big vector
Description
correlated pseudo-marginal: generates functions that output a big vector
Usage
makeCPMSampler(
paramKernSamp,
logParamKernEval,
logPriorEval,
logLikeApproxEval,
yData,
numU,
numIters,
rho = 0.99,
storeEvery = 1,
nansInLLFatal = TRUE
)
Arguments
paramKernSamp |
function(theta) -> theta proposal |
logParamKernEval |
function(oldTheta, newTheta) -> logDensity. |
logPriorEval |
function(theta) -> logDensity. |
logLikeApproxEval |
function(y, thetaProposal, uProposal) -> logApproxDensity. |
yData |
the observed data |
numU |
integer number of u samples |
numIters |
integer number of MCMC iterations |
rho |
correlation tuning parameter (-1,1) |
storeEvery |
increase this integer if you want to use thinning |
nansInLLFatal |
terminate the entire chain on NaNs, or simply disregard sample |
Value
vector of theta samples
Examples
# sim data
realTheta1 <- .2 + .3
realTheta2 <- .2
realParams <- c(realTheta1, realTheta2)
numObs <- 10
realX <- rnorm(numObs, mean = 0, sd = sqrt(realTheta2))
realY <- rnorm(numObs, mean = realX, sd = sqrt(realTheta1 - realTheta2))
# tuning params
numImportanceSamps <- 1000
numMCMCIters <- 1000
randomWalkScale <- 1.5
recordEveryTh <- 1
sampler <- makeCPMSampler(
paramKernSamp = function(params){
return(params + rnorm(2)*randomWalkScale)
},
logParamKernEval = function(oldTheta, newTheta){
dnorm(newTheta[1], oldTheta[1], sd = randomWalkScale, log = TRUE)
+ dnorm(newTheta[2], oldTheta[2], sd = randomWalkScale, log = TRUE)
},
logPriorEval = function(theta){
if( (theta[1] > theta[2]) & all(theta > 0)){
0
}else{
-Inf
}
},
logLikeApproxEval = function(y, thetaProposal, uProposal){
if( (thetaProposal[1] > thetaProposal[2]) & (all(thetaProposal > 0))){
xSamps <- uProposal*sqrt(thetaProposal[2])
logCondLikes <- sapply(xSamps,
function(xsamp) {
sum(dnorm(y,
xsamp,
sqrt(thetaProposal[1] - thetaProposal[2]),
log = TRUE)) })
m <- max(logCondLikes)
log(sum(exp(logCondLikes - m))) + m - log(length(y))
}else{
-Inf
}
},
realY, numImportanceSamps, numMCMCIters, .99, recordEveryTh
)
res <- sampler(realParams)
calculates the posterior mean point estimate
Description
calculates the posterior mean point estimate
Usage
## S3 method for class 'cpmResults'
mean(x, ...)
Arguments
x |
a cpmResults object |
... |
arguments to be passed to or from methods. |
Value
a vector of parameter estimates (posterior mean)
plots a cpmResults object
Description
plots a cpmResults object
Usage
## S3 method for class 'cpmResults'
plot(x, ...)
Arguments
x |
a cpmResults object |
... |
arguments to be passed to or from methods. |
prints a cpmResults object
Description
prints a cpmResults object
Usage
## S3 method for class 'cpmResults'
print(x, ...)
Arguments
x |
a cpmResults object |
... |
arguments to be passed to or from methods. |
Value
the same cpmResults object