12.1 Ejemplo: Renacuajos multinivel
Los modelos multinivel son modelos dentro de modelos. Los datos están agrupados, y cada grupo tiene sus propios parámetros. Los parámetros de grupo se extraen de una distribución común, que vincula los grupos entre sí. Este agrupamiento parcial comparte información entre grupos.
12.1.1 El ejemplo de los renacuajos
Los renacuajos de rana se crían en tanques con densidades variables. La supervivencia varía por tanque, pero todos los tanques comparten un entorno común. Modelamos la supervivencia de cada tanque como una extracción de una distribución común:
donde indexa los tanques, es el promedio poblacional, y es la desviación específica del tanque.
# Multilevel model: tadpole survival
# Simulate data inspired by the reed frog example
set.seed(42)
n_tanks <- 48
density <- sample(c(10, 25, 35), n_tanks, replace = TRUE)
# Population-level survival
a_pop <- 0.5 # log-odds
sigma_tank <- 1.5 # between-tank variation
# Tank-specific deviations
gamma_tank <- rnorm(n_tanks, 0, sigma_tank)
p_tank <- 1 / (1 + exp(-(a_pop + gamma_tank)))
survival <- rbinom(n_tanks, density, p_tank)
d <- data.frame(tank = 1:n_tanks, density = density, survival = survival)
cat("Tadpole survival data:\n")
cat(" Tanks:", n_tanks, "\n")
cat(" Densities:", paste(sort(unique(density)), collapse = ", "), "\n")
cat(" Survival proportions range:",
round(min(survival/density), 2), "to", round(max(survival/density), 2), "\n")
# No-pooling estimates (separate per tank)
p_nopool <- survival / density
# Complete-pooling estimate (one common p)
p_pool <- sum(survival) / sum(density)
cat("\nComplete pooling p:", round(p_pool, 3), "\n")
cat("No pooling range:", round(min(p_nopool), 3), "to", round(max(p_nopool), 3), "\n")
# Plot
plot(1:n_tanks, p_nopool, pch = 16, col = "steelblue",
ylim = c(0, 1), xlab = "Tank", ylab = "Survival proportion",
main = "Tadpole survival: no-pooling estimates")
abline(h = p_pool, lwd = 2, col = "firebrick", lty = 2)
legend("topright", legend = c("No pooling", "Complete pooling"),
col = c("steelblue", "firebrick"), pch = c(16, NA), lty = c(NA, 2), lwd = c(NA, 2))12.1.2 Ajustando el modelo multinivel
El modelo multinivel estima tanto el promedio poblacional como la variación entre tanques , mientras produce estimados específicos por tanque que son encogidos hacia la media poblacional.
# Fit multilevel model using lme4
library(lme4)
# Binomial multilevel model with tank-level random intercepts
m <- glmer(cbind(survival, density - survival) ~ (1 | tank),
family = binomial, data = d)
cat("Multilevel model:\n")
cat(" Fixed intercept (log-odds):", round(fixef(m)[1], 3), "\n")
cat(" Population p:", round(plogis(fixef(m)[1]), 3), "\n")
cat(" Between-tank SD (log-odds):", round(attr(VarCorr(m)$tank, "stddev"), 3), "\n")
# Extract tank-specific estimates (partial pooling)
p_partial <- plogis(fixef(m)[1] + ranef(m)$tank[, 1])
p_nopool <- d$survival / d$density
p_pool <- sum(d$survival) / sum(d$density)
cat("\nComparison (first 10 tanks):\n")
cat(" Tank No-pool Partial Complete\n")
for (i in 1:10) {
cat(sprintf(" %4d %7.3f %7.3f %7.3f\n",
i, p_nopool[i], p_partial[i], p_pool))
}
# Plot: shrinkage
plot(p_nopool, p_partial, pch = 16, col = "steelblue",
xlim = c(0, 1), ylim = c(0, 1),
xlab = "No-pooling estimate", ylab = "Partial pooling estimate",
main = "Shrinkage: no-pooling vs partial pooling")
abline(0, 1, lty = 2, col = "gray50")
abline(h = p_pool, lty = 3, col = "firebrick")
abline(v = p_pool, lty = 3, col = "firebrick")
cat("\nShrinkage: partial pooling estimates are pulled toward\n")
cat("the population mean, especially for tanks with few tadpoles.\n")El agrupamiento parcial es regularización adaptativa. El modelo multinivel regulariza automáticamente: los tanques con pocas observaciones se encogen más hacia la media poblacional, mientras que los tanques con muchas observaciones se encienden menos. La cantidad de encogimiento la determinan los datos — específicamente, el cociente de variación dentro del tanque y entre tanques. Si los tanques son muy diferentes (grande ), hay poco encogimiento. Si los tanques son similares (pequeño ), hay mucho encogimiento. Esto es regularización adaptativa: el modelo aprende cuánto regularizar a partir de los datos mismos.
Resumen de la Sección 12.1
- Los modelos multinivel tienen parámetros dentro de parámetros: efectos de nivel de grupo extraídos de una distribución poblacional.
- El agrupamiento parcial comparte información entre grupos — mejores estimados para grupos pequeños.
- El ejemplo de los renacuajos: , .
- Use
lme4::glmer()para modelos multinomiales multinivel en R. - Agrupamiento parcial = regularización adaptativa — la cantidad de encogimiento se aprende de los datos.