Skip to main content

hierarchical-models

Patterns for hierarchical/multilevel Bayesian models including random effects, partial pooling, and centered vs non-centered parameterizations.

Aller à l'installation

Informations de source

Dépôt
choxos/BiostatAgent
Dernière activité de la source
10 janvier 2026 à 18:48
Langue détectée de SKILL.md
anglais
Étoiles
11
Forks
1

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
hierarchical-models
description
Patterns for hierarchical/multilevel Bayesian models including random effects, partial pooling, and centered vs non-centered parameterizations.
# Hierarchical Models ## When to Use - Nested/grouped data (students in schools, patients in hospitals) - Repeated measurements on subjects - Meta-analysis with study-level variation - Partial pooling between complete pooling and no pooling ## Core Concept: Partial Pooling ``` Group means shrink toward overall mean based on: - Within-group sample size - Within-group variance - Between-group variance ``` ## Stan Implementation ### Centered Parameterization (Default) ```stan 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); } ``` ### Non-Centered Parameterization (Better for weak data/small tau) ```stan 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. ## JAGS Implementation ``` 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) } ``` ## Classic Example: Eight Schools ```stan 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); } ``` ## Diagnostics - Check tau posterior (very small → use non-centered) - Divergences often indicate centered/non-centered mismatch - Compare to no-pooling and complete-pooling models
Voir sur GitHub