9.2 Modelo con pendiente aleatoria
Este tipo de modelos permiten que la relación entre la variable independiente y la variable dependiente cambie según alguna otra variable explicativa. En otras palabras, permite que la pendiente de la relación entre las variables sea diferente a medida que lo grupos o subconjuntos de datos. En un modelo de regresión lineal simple, la relación entre la variable independiente y la variable dependiente se modela como una línea recta con una pendiente fija. Sin embargo, en un modelo con pendiente aleatoria, se permite que la pendiente varíe según otra variable explicativa.
En este tipo de modelos, la relación entre las variables puede suponer una curva con diferentes pendientes para diferentes subgrupos. Los modelos con pendiente aleatoria son útiles en situaciones donde se espera que la relación entre las variables cambie de manera no lineal o cuando se desea modelar diferencias en la pendiente entre subgrupos. Consideremos el siguiente modelo:
\[ Ingreso_{ij}=\beta_{0}+\beta_{1j}Gasto_{ij}+\epsilon_{ij} \]
donde \(\beta_{1j}\) esta dado como
\[
\beta_{1j} = \gamma_{10}+\gamma_{11}Stratum_{j} + \tau_{1j}
\]
Para este caso en particular, la pendiente varía de acuerdo con los estratos de muestreo, no así el intercepto que seguirá fijo siempre. Para ajustar el modelo se utiliza la función lmer
como se muestra a continuación:
Para cada estrato se tienen las siguientes estimaciones para las pendientes aleatorias \(\beta_{1j}\):
Expenditure | (Intercept) | |
---|---|---|
idStrt001 | 1.8914 | 148.8 |
idStrt002 | 1.2666 | 148.8 |
idStrt003 | 1.1200 | 148.8 |
idStrt004 | 1.4717 | 148.8 |
idStrt005 | 0.8316 | 148.8 |
idStrt006 | 0.7942 | 148.8 |
idStrt007 | 0.8950 | 148.8 |
idStrt008 | 0.8070 | 148.8 |
Organizando los coeficientes en un gráfico se tiene:
Coef_Estimado <- inner_join(
coef(mod_Pend_Aleatoria)$Stratum %>%
add_rownames(var = "Stratum"),
encuesta_plot %>% dplyr::select(Stratum) %>% distinct()
)
ggplot(data = encuesta_plot,
aes(y = Income, x = Expenditure,
colour = Stratum)) +
geom_jitter() + theme(legend.position = "none",
plot.title = element_text(hjust = 0.5)) +
geom_abline(
data = Coef_Estimado,
mapping = aes(
slope = Expenditure,
intercept = `(Intercept)`,
colour = Stratum
)
) +
theme_cepal()
Se puede observar que la estimación de la pendiente varía de manera importante para cada uno de los estratos pero que, al imponer la restricción de un intercepto común para todos los estratos, no hay un buen ajuste en general. Por otro lado, la estimación de los ingresos para las unidades observadas usando este modelo se muestra a continuación:
data.frame(
Pred = predict(mod_Pend_Aleatoria),
Income = encuesta$Income,
Stratum = encuesta$Stratum
) %>%
distinct() %>%
slice(1:6L)
Pred | Income | Stratum | |
---|---|---|---|
1 | 803.8 | 409.87 | idStrt001 |
6 | 890.6 | 823.75 | idStrt001 |
10 | 288.8 | 90.92 | idStrt001 |
13 | 307.2 | 135.33 | idStrt001 |
18 | 640.8 | 336.19 | idStrt001 |
22 | 1159.6 | 1539.75 | idStrt001 |
Gráficamente se muestran las estimaciones versus los valores estimados de los ingresos y se logra observar que la predicción está más cerca a la línea de 45 grados que el modelo anterior.
ggplot(data = tab_pred, aes(x = Pred, y = Income, colour = Stratum)) +
geom_point() +
geom_abline(intercept = 0,
slope = 1,
colour = "red") +
theme_bw() +
theme(legend.position = "none")