13.3 Ejemplo: Chimpancés cruzados con pendientes variables
Los datos de chimpancés contienen múltiples efectos aleatorios cruzados: actor, bloque y tratamiento. Un modelo multinivel con pendientes variables maneja esta estructura compleja.
13.3.1 El modelo cruzado de pendientes variables
Cada actor puede responder diferentemente a los tratamientos, y cada bloque puede tener su propia línea base. El modelo incluye:
- Efectos fijos del tratamiento: Efecto promedio de cada tratamiento.
- Interceptos variables por actor: Algunos chimpancés tiran más que otros.
- Interceptos variables por bloque: Algunas sesiones experimentales tienen líneas base diferentes.
# Cross-classified chimpanzee model with varying slopes
set.seed(42)
n_actors <- 7
n_blocks <- 6
n_treatments <- 4
n_trials <- 200
# Simulate data
actor <- sample(1:n_actors, n_trials, replace = TRUE)
block <- sample(1:n_blocks, n_trials, replace = TRUE)
treatment <- sample(1:n_treatments, n_trials, replace = TRUE)
# True effects
a_bar <- 0
a_actor <- rnorm(n_actors, 0, 1.5)
a_block <- rnorm(n_blocks, 0, 0.5)
b_treatment <- c(0, 0.5, 0.3, 0.7) # treatment effects
# Generate outcome
logit_p <- a_bar + a_actor[actor] + a_block[block] + b_treatment[treatment]
p <- 1 / (1 + exp(-logit_p))
y <- rbinom(n_trials, 1, p)
d <- data.frame(
actor = factor(actor),
block = factor(block),
treatment = factor(treatment),
y = y
)
# Fit cross-classified model
library(lme4)
m <- glmer(y ~ treatment + (1 | actor) + (1 | block),
family = binomial, data = d)
cat("Cross-classified chimpanzee model:\n")
cat(" Fixed effects (treatment baseline = 1):\n")
fe <- fixef(m)
for (i in seq_along(fe)) {
cat(sprintf(" %s: %.3f\n", names(fe)[i], fe[i]))
}
cat(" Random SD: actor =", round(attr(VarCorr(m)$actor, "stddev"), 3),
" block =", round(attr(VarCorr(m)$block, "stddev"), 3), "\n")13.3.2 Añadiendo pendientes variables por actor
También podemos dejar que cada actor responda diferentemente al tratamiento:
# Cross-classified with varying slopes by actor
set.seed(42)
n_actors <- 7
n_blocks <- 6
n_trials <- 200
actor <- sample(1:n_actors, n_trials, replace = TRUE)
block <- sample(1:n_blocks, n_trials, replace = TRUE)
treatment <- sample(1:n_treatments, n_trials, replace = TRUE)
a_actor <- rnorm(n_actors, 0, 1.5)
a_block <- rnorm(n_blocks, 0, 0.5)
b_treatment <- c(0, 0.5, 0.3, 0.7)
# Actor-specific treatment deviations
b_actor_treat <- matrix(rnorm(n_actors * n_treatments, 0, 0.3), nrow = n_actors)
logit_p <- rep(0, n_trials)
for (i in 1:n_trials) {
logit_p[i] <- a_actor[actor[i]] + a_block[block[i]] +
b_treatment[treatment[i]] + b_actor_treat[actor[i], treatment[i]]
}
p <- 1 / (1 + exp(-logit_p))
y <- rbinom(n_trials, 1, p)
d <- data.frame(
actor = factor(actor),
block = factor(block),
treatment = factor(treatment),
y = y
)
library(lme4)
# Varying intercepts + slopes by actor, varying intercepts by block
m <- glmer(y ~ treatment + (1 + treatment | actor) + (1 | block),
family = binomial, data = d)
cat("Cross-classified with varying slopes:\n")
cat(" Fixed effects:\n")
fe <- fixef(m)
for (i in seq_along(fe)) {
cat(sprintf(" %s: %.3f\n", names(fe)[i], fe[i]))
}
cat(" Actor SD (intercept):", round(attr(VarCorr(m)$actor, "stddev")[1], 3), "\n")
cat(" Block SD (intercept):", round(attr(VarCorr(m)$block, "stddev"), 3), "\n")
cat("\n Varying slopes by actor allow each chimp\n")
cat(" to respond differently to each treatment.\n")Más estructura, más encogimiento. Añadir pendientes variables por actor significa que el modelo estima más parámetros, pero no sobreajusta — porque cada pendiente se encoge hacia el promedio poblacional. Un actor con pocos ensayos en un tratamiento tendrá una pendiente cercana al promedio. Un actor con muchos ensayos puede desviarse más. Este es el poder del agrupamiento parcial: puede añadir estructura sin añadir complejidad incontrolada. El modelo aprende cuánta variación hay y ajusta el encogimiento en consecuencia.
Resumen de la Sección 13.3
- Los modelos cruzados manejan múltiples efectos aleatorios cruzados simultáneamente.
- Los efectos de actor y bloque están cruzados — cada actor aparece en cada bloque.
- Las pendientes variables por actor permiten que cada chimpancé responda diferentemente a los tratamientos.
- Más estructura no significa sobreajuste — el agrupamiento parcial controla la complejidad.
- Use
(1 + treatment | actor) + (1 | block)enlme4.