Skip to content
Back to skills

Hierarchical Models

ASecurity

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

  • 11 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 7, 2026
ai-agents

Security analysis

A100/100

Scanned September 7, 2026

npx -y skills add choxos/BiostatAgent --skill hierarchical-models --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hierarchical Models?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hierarchical Models
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/choxos-hierarchical-models/badge)](https://www.skillsdirectory.com/skills/choxos-hierarchical-models)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.