priorsense is compatible with models fit with either jagsUI or R2jags.
Consider the univariate normal model with unknown mu and sigma available viaexample_powerscale_model("univariate_normal"). In JAGS, lprior and log_lik variables can be defined as below. By also defining separate lprior_mu and lprior_sigma variables, it will be possible to check the sensitivity for each prior separately.
model <- example_powerscale_model("univariate_normal", language = "jags")model {
for(n in 1:N) {
y[n] ~ dnorm(mu, tau)
log_lik[n] <- logdensity.norm(y[n], mu, tau)
}
mu ~ dnorm(0, 1)
sigma ~ dnorm(0, 1 / 2.5^2) T(0,)
tau <- 1 / sigma^2
lprior_mu <- logdensity.norm(mu, 0, 1)
lprior_sigma <- logdensity.norm(sigma, 0, 1 / 2.5^2)
lprior <- lprior_mu + lprior_sigma
}
R2jags::jags() or jagsUI::jags() can be used to fit the model. Ensure that the required variables are monitored.
model_con <- textConnection(model$model_code)
data <- model$data
# monitor parameters of interest along with log-likelihood and log-prior
variables <- c("mu", "sigma", "log_lik", "lprior", "lprior_mu", "lprior_sigma")
fit <- R2jags::jags(
data = data,
model.file = model_con,
parameters.to.save = variables,
n.chains = 4,
DIC = FALSE,
quiet = TRUE,
progress.bar = "none"
)Then the priorsense functions will work as usual.
Sensitivity based on cjs_dist
Prior selection: all priors
Likelihood selection: all data
variable prior likelihood diagnosis
mu 0.376 0.524 potential prior-likelihood conflict
sigma 0.252 0.468 potential prior-likelihood conflict
powerscale_sensitivity(fit, prior_selection = "sigma")Sensitivity based on cjs_dist
Prior selection: sigma
Likelihood selection: all data
variable prior likelihood diagnosis
mu 0.003 0.524 -
sigma 0.006 0.468 -
powerscale_sensitivity(fit, prior_selection = "mu")Sensitivity based on cjs_dist
Prior selection: mu
Likelihood selection: all data
variable prior likelihood diagnosis
mu 0.379 0.524 potential prior-likelihood conflict
sigma 0.258 0.468 potential prior-likelihood conflict
powerscale_plot_dens(fit)
