Skip to main content

meta-analysis

Bayesian meta-analysis models including fixed effects, random effects, and network meta-analysis with Stan and JAGS implementations.

Source facts

Repository
choxos/BiostatAgent
Last source activity
May 27, 2026 at 20:44
Detected SKILL.md language
English
Stars
12
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
meta-analysis
description
Bayesian meta-analysis models including fixed effects, random effects, and network meta-analysis with Stan and JAGS implementations.
# Meta-Analysis Models ## Fixed Effects Meta-Analysis ### Stan ```stan data { int<lower=0> K; // Number of studies vector[K] y; // Effect estimates vector<lower=0>[K] se; // Standard errors } parameters { real theta; // Common effect } model { theta ~ normal(0, 10); y ~ normal(theta, se); } ``` ### JAGS ``` model { for (i in 1:K) { y[i] ~ dnorm(theta, prec[i]) prec[i] <- pow(se[i], -2) } theta ~ dnorm(0, 0.0001) } ``` ## Random Effects Meta-Analysis ### Stan (Non-centered, recommended) ```stan data { int<lower=0> K; vector[K] y; vector<lower=0>[K] se; } parameters { real mu; // Overall mean real<lower=0> tau; // Between-study SD vector[K] eta; // Study effects (standardized) } transformed parameters { vector[K] theta = mu + tau * eta; } model { // Priors mu ~ normal(0, 10); tau ~ cauchy(0, 0.5); // Half-Cauchy eta ~ std_normal(); // Likelihood y ~ normal(theta, se); } generated quantities { real theta_new = normal_rng(mu, tau); // Predictive real I2 = square(tau) / (square(tau) + mean(square(se))); } ``` ### JAGS ``` model { for (i in 1:K) { y[i] ~ dnorm(theta[i], prec[i]) prec[i] <- pow(se[i], -2) theta[i] ~ dnorm(mu, tau.theta) } mu ~ dnorm(0, 0.0001) tau.theta <- pow(sigma.theta, -2) sigma.theta ~ dunif(0, 10) # Heterogeneity tau2 <- pow(sigma.theta, 2) } ``` ## Binary Outcomes ### Stan (Log-Odds) ```stan data { int<lower=0> K; array[K] int<lower=0> r1; // Events in treatment array[K] int<lower=0> n1; // Total in treatment array[K] int<lower=0> r2; // Events in control array[K] int<lower=0> n2; // Total in control } parameters { real d; // Overall log-OR real<lower=0> tau; vector[K] delta; // Study-specific log-OR vector[K] mu; // Baseline log-odds } model { d ~ normal(0, 10); tau ~ cauchy(0, 0.5); delta ~ normal(d, tau); mu ~ normal(0, 10); r2 ~ binomial_logit(n2, mu); r1 ~ binomial_logit(n1, mu + delta); } generated quantities { real OR = exp(d); } ``` ## Network Meta-Analysis (NMA) ### Stan (Consistency Model) ```stan data { int<lower=0> K; // Number of studies int<lower=0> T; // Number of treatments array[K] int<lower=1> t1; // Treatment 1 index array[K] int<lower=1> t2; // Treatment 2 index vector[K] y; // Effect estimate vector<lower=0>[K] se; } parameters { vector[T-1] d_raw; // Basic parameters (vs reference) real<lower=0> tau; vector[K] delta; } transformed parameters { vector[T] d; d[1] = 0; // Reference treatment d[2:T] = d_raw; } model { d_raw ~ normal(0, 10); tau ~ cauchy(0, 0.5); for (k in 1:K) { delta[k] ~ normal(d[t2[k]] - d[t1[k]], tau); y[k] ~ normal(delta[k], se[k]); } } generated quantities { // Treatment rankings array[T] int rank; { array[T] int order = sort_indices_desc(d); for (t in 1:T) rank[order[t]] = t; } } ``` ## Publication Bias ### Selection Model (Stan) ```stan data { int<lower=0> K; vector[K] y; vector<lower=0>[K] se; vector<lower=0,upper=1>[K] published; // Publication indicator } parameters { real mu; real<lower=0> tau; vector[K] theta; real<lower=0> alpha; // Selection severity } model { theta ~ normal(mu, tau); y ~ normal(theta, se); // Selection model: higher z-scores more likely published for (k in 1:K) { real z = y[k] / se[k]; published[k] ~ bernoulli(Phi(alpha * z)); } } ``` ## Key Statistics ```stan generated quantities { // Heterogeneity real tau2 = square(tau); real I2 = tau2 / (tau2 + mean(square(se))); // Prediction interval real pred_lower = mu - 1.96 * tau; real pred_upper = mu + 1.96 * tau; // Probability effect > 0 real prob_positive = 1 - normal_cdf(0 | mu, tau); } ``` ## Priors for Heterogeneity | Context | tau prior | |---------|-----------| | Pharmacological | `normal(0, 0.5)` with `tau <lower=0>` | | Medical devices | `normal(0, 1)` with `tau <lower=0>` | | Behavioral | `cauchy(0, 1)` with `tau <lower=0>` | | Default | `cauchy(0, 0.5)` with `tau <lower=0>` |
View on GitHub