From bayesian-modeling
Patterns for hierarchical/multilevel Bayesian models including random effects, partial pooling, and centered vs non-centered parameterizations.
npx claudepluginhub choxos/biostatagent --plugin bayesian-modelingThis skill uses the workspace's default tool permissions.
- Nested/grouped data (students in schools, patients in hospitals)
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`.
Group means shrink toward overall mean based on:
- Within-group sample size
- Within-group variance
- Between-group variance
data {
int<lower=0> N; // Total observations
int<lower=0> J; // Number of groups
array[N] int<lower=1,upper=J> group;
vector[N] y;
}
parameters {
real mu; // Population mean
real<lower=0> tau; // Between-group SD
real<lower=0> sigma; // Within-group SD
vector[J] theta; // Group means
}
model {
// Hyperpriors
mu ~ normal(0, 10);
tau ~ cauchy(0, 2.5);
sigma ~ exponential(1);
// Group effects
theta ~ normal(mu, tau);
// Likelihood
y ~ normal(theta[group], sigma);
}
parameters {
real mu;
real<lower=0> tau;
real<lower=0> sigma;
vector[J] theta_raw; // Standard normal
}
transformed parameters {
vector[J] theta = mu + tau * theta_raw;
}
model {
theta_raw ~ std_normal();
// ... rest same
}
When to use non-centered: Divergences, small tau, few observations per group.
model {
for (i in 1:N) {
y[i] ~ dnorm(theta[group[i]], tau.y)
}
for (j in 1:J) {
theta[j] ~ dnorm(mu, tau.theta)
}
# Hyperpriors
mu ~ dnorm(0, 0.0001)
tau.theta <- pow(sigma.theta, -2)
sigma.theta ~ dunif(0, 100)
tau.y <- pow(sigma.y, -2)
sigma.y ~ dunif(0, 100)
}
data {
int<lower=0> J;
array[J] real y; // Observed effects
array[J] real<lower=0> sigma; // Known SEs
}
parameters {
real mu;
real<lower=0> tau;
vector[J] theta_raw;
}
transformed parameters {
vector[J] theta = mu + tau * theta_raw;
}
model {
mu ~ normal(0, 5);
tau ~ cauchy(0, 5);
theta_raw ~ std_normal();
y ~ normal(theta, sigma);
}