From bayesian-modeling
Foundational knowledge for writing BUGS/JAGS models including precision parameterization, declarative syntax, distributions, and R integration. Use when creating or reviewing BUGS/JAGS models.
npx claudepluginhub choxos/biostatagent --plugin bayesian-modelingThis skill uses the workspace's default tool permissions.
- Writing new WinBUGS or JAGS models
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
BUGS uses a single declarative block where order doesn't matter:
model {
# Likelihood (order doesn't matter)
for (i in 1:N) {
y[i] ~ dnorm(mu[i], tau)
mu[i] <- alpha + beta * x[i]
}
# Priors
alpha ~ dnorm(0, 0.001)
beta ~ dnorm(0, 0.001)
tau ~ dgamma(0.001, 0.001)
# Derived quantities
sigma <- 1 / sqrt(tau)
}
BUGS uses PRECISION (tau = 1/variance), NOT standard deviation:
| Distribution | BUGS Syntax | Meaning |
|---|---|---|
| Normal | dnorm(mu, tau) | tau = 1/sigma² |
| MVN | dmnorm(mu[], Omega[,]) | Omega = inverse(Sigma) |
# Precision from SD
tau <- pow(sigma, -2)
# SD from precision
sigma <- 1 / sqrt(tau)
y ~ dnorm(mu, tau) # Normal: tau = 1/sigma²
y ~ dlnorm(mu, tau) # Log-normal (log-scale)
y ~ dt(mu, tau, df) # Student-t
y ~ dunif(lower, upper) # Uniform
y ~ dgamma(shape, rate) # Gamma
y ~ dbeta(a, b) # Beta
y ~ dexp(lambda) # Exponential (rate)
y ~ dweib(shape, lambda) # Weibull
y ~ ddexp(mu, tau) # Double exponential
y ~ dbern(p) # Bernoulli
y ~ dbin(p, n) # Binomial (p first!)
y ~ dpois(lambda) # Poisson
y ~ dnegbin(p, r) # Negative binomial
y ~ dcat(p[]) # Categorical
y ~ dmulti(p[], n) # Multinomial
y[1:K] ~ dmnorm(mu[], Omega[,]) # MVN (precision matrix!)
Omega[1:K,1:K] ~ dwish(R[,], df) # Wishart (for precision)
p[1:K] ~ ddirch(alpha[]) # Dirichlet
# Stochastic (random variable)
y ~ dnorm(mu, tau)
# Deterministic (function)
mu <- alpha + beta * x
for (i in 1:N) {
y[i] ~ dnorm(mu[i], tau)
}
y ~ dnorm(mu, tau) T(lower, upper)
y ~ dnorm(mu, tau) T(0, ) # Lower only
ind <- step(y - threshold) # 1 if y >= threshold
eq <- equals(y, 0) # 1 if y == 0
# Vague normal (variance = 1000)
alpha ~ dnorm(0, 0.001)
# Half-Cauchy on SD (via uniform)
sigma ~ dunif(0, 100)
tau <- pow(sigma, -2)
# Vague gamma on precision
tau ~ dgamma(0.001, 0.001)
# Correlation matrix
Omega ~ dwish(I[,], K + 1)
library(R2jags)
jags.data <- list(N = 100, y = y, x = x)
jags.params <- c("alpha", "beta", "sigma")
jags.inits <- function() {
list(alpha = 0, beta = 0, tau = 1)
}
fit <- jags(
data = jags.data,
inits = jags.inits,
parameters.to.save = jags.params,
model.file = "model.txt",
n.chains = 4,
n.iter = 10000,
n.burnin = 5000
)
print(fit)
fit$BUGSoutput$summary
library(R2WinBUGS)
fit <- bugs(
data = bugs.data,
inits = bugs.inits,
parameters.to.save = bugs.params,
model.file = "model.txt",
n.chains = 3,
n.iter = 10000,
bugs.directory = "C:/WinBUGS14/"
)
| Feature | BUGS/JAGS | Stan |
|---|---|---|
| Normal | dnorm(mu, tau) precision | normal(mu, sigma) SD |
| MVN | dmnorm(mu, Omega) precision | multi_normal(mu, Sigma) cov |
| Syntax | Declarative (DAG) | Imperative (sequential) |
| Blocks | Single model{} | 7 optional blocks |
| Sampling | Gibbs + Metropolis | HMC/NUTS |
| Discrete | Direct sampling | Marginalization required |
dnorm(0, 1) means variance=1, NOT SD=1dbin(p, n) not dbin(n, p)