7.6 Práctica
Los problemas de práctica del Capítulo 7 le piden ajustar modelos con interacciones, interpretar los coeficientes y visualizar los efectos predichos.
Problemas fáciles
7E1. Para cada uno de los siguientes modelos, escriba el modelo de interacción lineal en notación matemática:
(a) y ~ x * z
(b) y ~ x + z + x:z
(c) y ~ x * z * w
7E2. En el modelo , ¿cuál es la pendiente de cuando ?
7E3. ¿Por qué la interacción es simétrica? Explíquelo con sus propias palabras.
Problemas medios
7M1. Ajuste un modelo con una interacción entre dos predictores continuos. Grafique el resultado predicho en tres valores del moderador.
# 7M1: Fit and visualize a continuous interaction
set.seed(42)
n <- 100
x <- runif(n, 0, 10)
z <- runif(n, 0, 10)
y <- 1 + 2 * x + 1 * z + 0.3 * x * z + rnorm(n, sd = 2)
m <- lm(y ~ x * z)
# Plot predictions at z = 2, 5, 8
x_seq <- seq(0, 10, length.out = 100)
z_vals <- c(2, 5, 8)
colors <- c("firebrick", "steelblue", "darkgreen")
plot(NULL, xlim = c(0, 10), ylim = range(y),
xlab = "x", ylab = "y", main = "7M1: Interaction at different z values")
for (i in 1:3) {
pred <- coef(m)[1] + coef(m)[2] _ x_seq + coef(m)[3] _ z*vals[i] +
coef(m)[4] * x*seq * z_vals[i]
lines(x_seq, pred, lwd = 2, col = colors[i])
}
legend("topleft", legend = paste("z =", z_vals), col = colors, lwd = 2)
cat("Slope of x at z = 2:", round(coef(m)[2] + coef(m)[4] _ 2, 3), "\n")
cat("Slope of x at z = 5:", round(coef(m)[2] + coef(m)[4] _ 5, 3), "\n")
cat("Slope of x at z = 8:", round(coef(m)[2] + coef(m)[4] * 8, 3), "\n")7M2. Centre ambos predictores y reajuste el modelo. ¿Cómo cambian los efectos principales? ¿Cambia la interacción?
7M3. Ajuste un modelo con una interacción categórica x continua. Grafique las líneas de regresión separadas para cada categoría.
# 7M3: Categorical x continuous interaction
set.seed(42)
n <- 150
group <- sample(1:3, n, replace = TRUE)
x <- runif(n, 0, 10)
# Different slopes for each group
slopes <- c(1, 2, 3)
y <- 10 + slopes[group] * x + rnorm(n, sd = 2)
m <- lm(y ~ group * x)
cat("Categorical x continuous interaction:\n")
cat(" Group 1 slope:", round(coef(m)[2], 3), "\n")
cat(" Group 2 slope:", round(coef(m)[2] + coef(m)[4], 3), "\n")
cat(" Group 3 slope:", round(coef(m)[2] + coef(m)[5], 3), "\n")
# Plot
colors <- c("steelblue", "firebrick", "darkgreen")
plot(x, y, pch = 16, col = colors[group],
main = "7M3: Categorical x continuous interaction",
xlab = "x", ylab = "y")
x*seq <- seq(0, 10, length.out = 100)
for (g in 1:3) {
if (g == 1) {
pred <- coef(m)[1] + coef(m)[2] * x*seq
} else {
pred <- coef(m)[1] + coef(m)[1 + g] + (coef(m)[2] + coef(m)[2 + g]) * x_seq
}
lines(x_seq, pred, lwd = 2, col = colors[g])
}
legend("topleft", legend = paste("Group", 1:3), col = colors, lwd = 2)Problemas difíciles
7H1. Simule datos con una interacción verdadera. Ajuste modelos con y sin interacción. Compare sus AIC. ¿Gana el modelo con interacción?
# 7H1: Compare models with and without interaction
set.seed(42)
n <- 100
x <- runif(n, 0, 10)
z <- runif(n, 0, 10)
y <- 1 + 2 * x + 1 * z + 0.5 * x * z + rnorm(n, sd = 2)
m_no <- lm(y ~ x + z)
m_int <- lm(y ~ x * z)
cat("AIC comparison:\n")
cat(" No interaction:", round(AIC(m_no), 2), "\n")
cat(" With interaction:", round(AIC(m_int), 2), "\n")
cat(" Difference:", round(AIC(m_no) - AIC(m_int), 2), "\n")
if (AIC(m_int) < AIC(m_no)) {
cat("\nThe interaction model is preferred.\n")
} else {
cat("\nThe no-interaction model is preferred.\n")
}7H2. Ajuste un modelo con una interacción de orden 3. Interprete los resultados graficando predicciones en diferentes combinaciones de los tres predictores.
7H3. Vuelva al ejemplo de los tulipanes (Sección 7.1). Ajuste el modelo de interacción y calcule la distribución a posteriori del efecto de la luz en cada nivel de agua.