8.3 Modelo log lineal para tablas de contingencia
El término modelo log-lineal, que básicamente describe el papel de la función de enlace que se utiliza en los modelos lineales generalizados. Iniciaremos esta sección con los modelos log-lineales en tablas de contingencia. El modelo estadístico es el siguiente:
\[ \log(p_{ijk}) = \mu + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} , \]
donde:
\(p_{ijk}=\) la proporción esperada en la celda bajo el modelo.
\(\mu = \log(p_{0})=\frac{1}{\#\ de\ celdas}\)
El modelo log-lineal en R
se ajusta utilizando la función svyloglin
como sigue:
<- svyloglin(formula = ~pobreza+Sex + pobreza:Sex,
mod1 design = diseno)
<- summary(mod1)
s1 s1
## Loglinear model: svyloglin(formula = ~pobreza + Sex + pobreza:Sex, design = diseno)
## coef se p
## pobreza1 0.219673 0.06778 0.001192
## Sex1 0.052843 0.01625 0.001145
## pobreza1:Sex1 0.005583 0.02350 0.812175
En la salida anterior se puede observar que, con una confianza del 95% el estado de pobreza es independiente del sexo, como se ha mostrado con las pruebas anteriores.
Ahora bien, puesto que en la salida anterior se pudo observar que la interacción es no significativa, entonces, ajustemos ahora el modelo sin interacción:
<- svyloglin(formula = ~pobreza+Sex,
mod2 design = diseno)
<- summary(mod2)
s2 s2
## Loglinear model: svyloglin(formula = ~pobreza + Sex, design = diseno)
## coef se p
## pobreza1 0.21997 0.06752 0.0011230
## Sex1 0.05405 0.01577 0.0006076
Por último, mediante un análisis de varianza es posible comparar los dos modelos como sigue:
anova(mod1, mod2)
## Analysis of Deviance Table
## Model 1: y ~ pobreza + Sex
## Model 2: y ~ pobreza + Sex + pobreza:Sex
## Deviance= 0.07719 p= 0.8126
## Score= 0.07719 p= 0.8126
De la anterior salida se puede concluir que, con una confianza del 95%, la interacción no es significativa en el modelo log-lineal ajustado.
Modelo de regresión logistica
Un modelo de regresion logística es un modelo matemático que puede ser utilizado para describir la relacion entre un conjunto de variables independientes y una variable dicotomica Y. El modelo logístico se describe a continuación:
\[ g(\pi(x))=logit(\pi(x)) \] De aquí,
\[ z = \ln\left(\frac{\pi(x)}{1-\pi(x)}\right) = B_0 + B_1x_1+\dots+B_px_p \]
Por tanto, la probabilidad estimada utilizando el modelo logístico es la siguiente:
\[ \hat{\pi}\left(\boldsymbol{x}\right)=\frac{\exp\left(\boldsymbol{X\hat{B}}\right)}{1-\exp\left(\boldsymbol{X\hat{B}}\right)}=\frac{\exp\left(\hat{B}_{0}+\hat{B}_{1}x_{1}+\cdots+\hat{B}x_{p}\right)}{1-\exp\left(\hat{B}_{0}+\hat{B}_{1}x_{1}+\cdots+\hat{B}x_{p}\right)} \]
\[ \pi\left(x_{i}\right)=\frac{\exp\left(x_{i}\boldsymbol{B}\right)}{1-\exp\left(x_{i}\boldsymbol{B}\right)} \] La varianza de los parámetros estimados se calcula como sigue:
\[ var\left(\boldsymbol{\hat{B}}\right)=\boldsymbol{J}^{-1}var\left(S\left(\hat{\boldsymbol{B}}\right)\right)\boldsymbol{J}^{-1} \] con,
\[ S\left(B\right)=\sum_{h}\sum_{a}\sum_{i}w_{hai}\boldsymbol{D}_{hai}^{t}\left[\left(\pi_{hai}\left(\boldsymbol{B}\right)\right)\left(1-\pi_{hai}\left(\boldsymbol{B}\right)\right)\right]^{-1}\left(y_{hai}-\pi_{hai}\left(\boldsymbol{B}\right)\right)=0 \] y,
\[ D_{hai} = \frac{\delta\left(\pi_{hai}\left(\boldsymbol{B}\right)\right)}{\delta B_{j}} \] donde \(j=0,\dots,p\)
Prueba de Wald para los parámetros del modelo
Para utilizar el estadístico de Wald en en la significancia de los parámetros del modelo se utiliza la razón de verosimilitud. En este caso se contrastan el modelo con todos los parámetros (modelo full) versus el modelo reducido, es decir, el modelo con menos parámetros (modelo reduced),
\[ G=-2\ln\left[\frac{L\left(\hat{\boldsymbol{\beta}}_{MLE}\right)_{reduced}}{L\left(\hat{\boldsymbol{\beta}}_{MLE}\right)_{full}}\right] \]
Dado que el modelo tiene enlace logaritmo, para construir los intervalos de confianza se debe aplicar el función exponencial a cada parámetro,
\[ \hat{\psi}=\exp\left(\hat{B}_{1}\right) \] por ende, el intervalo de confianza es:
\[ CI\left(\psi\right)=\exp\left(\hat{B}_{j}\pm t_{df,1-\frac{\alpha}{2}}se\left(\hat{B}_{j}\right)\right) \]
A continuación, se muestra el ajuste de un modelo logístico teniendo e cuenta el diseño muestral:
<- svyglm(formula = pobreza ~ Sex + Zone + Region,
mod_loglin family = binomial,
design=diseno)
tidy(mod_loglin)
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | -0.4082 | 0.2640 | -1.5464 | 0.1248 |
SexMale | 0.0086 | 0.0915 | 0.0945 | 0.9249 |
ZoneUrban | -0.4378 | 0.2418 | -1.8106 | 0.0729 |
RegionSur | 0.0063 | 0.3140 | 0.0201 | 0.9840 |
RegionCentro | 0.1915 | 0.4279 | 0.4476 | 0.6553 |
RegionOccidente | 0.2319 | 0.3144 | 0.7377 | 0.4622 |
RegionOriente | 0.3699 | 0.4259 | 0.8686 | 0.3869 |
La función tidy muestra que ninguna de las covariables son significativas con una confianza del 95%. A continuación, se presentan los intervalos de confianza en los cuales se pueden concluir que en todos los parámetros el cero se encuentra dentro del intrevalo:
confint(mod_loglin, level = 0.95)
2.5 % | 97.5 % | |
---|---|---|
(Intercept) | -0.9312 | 0.1148 |
SexMale | -0.1727 | 0.1900 |
ZoneUrban | -0.9169 | 0.0413 |
RegionSur | -0.6159 | 0.6285 |
RegionCentro | -0.6562 | 1.0392 |
RegionOccidente | -0.3910 | 0.8549 |
RegionOriente | -0.4738 | 1.2136 |
Para verificar de manera gráfica la distribución de los parámetros del modelo, se realizará un gráfico de estos usando la función plot_summs como se muestra a continuación,
library(ggstance)
plot_summs(mod_loglin,
scale = TRUE, plot.distributions = TRUE)
Se puede observar en el gráfico que el número cero se encuentra dentro del intervalo de confianza de cada uno de los parámetros, lo que confirma la no significancia al 95% de los parámetros del modelo.
Por otro parte, el estadístico de Wald para el cada una de las variables del modelo se calcula a continuación con la función regTermTest para las variables del modelo:
regTermTest(model = mod_loglin, ~Sex)
## Wald test for Sex
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno,
## family = binomial)
## F = 0.00893 on 1 and 113 df: p= 0.92
regTermTest(model = mod_loglin, ~Zone)
## Wald test for Zone
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno,
## family = binomial)
## F = 3.278 on 1 and 113 df: p= 0.073
regTermTest(model = mod_loglin, ~Region)
## Wald test for Region
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno,
## family = binomial)
## F = 0.3654 on 4 and 113 df: p= 0.83
Concluyendo que con una confianza del 95% no son significativas en el modelo como se había mencionado anteriormente.
Como es tradicional en el ejuste de modelos de regresión ya sea, clásico o generalizado, se pueden realizar ajustes con interacciones. A continuación, se present cómo se ajustan modelos loglineales con interacción:
<- svyglm(formula = pobreza ~ Sex + Zone + Region +
mod_loglin_int :Zone + Sex:Region,
Sexfamily=binomial,
design=diseno)
<- tidy(mod_loglin_int) %>% arrange(p.value)
tab_mod tab_mod
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
ZoneUrban | -0.4248 | 0.2562 | -1.6580 | 0.1002 |
(Intercept) | -0.4289 | 0.2849 | -1.5055 | 0.1351 |
SexMale:RegionSur | 0.2871 | 0.2774 | 1.0348 | 0.3031 |
RegionOriente | 0.3843 | 0.4279 | 0.8980 | 0.3712 |
RegionOccidente | 0.3342 | 0.3783 | 0.8835 | 0.3790 |
SexMale:RegionOccidente | -0.2302 | 0.2868 | -0.8026 | 0.4240 |
RegionCentro | 0.2466 | 0.4560 | 0.5408 | 0.5897 |
SexMale:RegionCentro | -0.1162 | 0.2791 | -0.4162 | 0.6781 |
RegionSur | -0.1325 | 0.3464 | -0.3825 | 0.7028 |
SexMale | 0.0478 | 0.1994 | 0.2399 | 0.8109 |
SexMale:RegionOriente | -0.0304 | 0.2878 | -0.1057 | 0.9161 |
SexMale:ZoneUrban | -0.0154 | 0.1872 | -0.0824 | 0.9345 |
Observando que la interacción tampoco es significativa con una confianza del 95%.
El gráfico de la distribución de los parámetros del modelo con intercepto y sin intercepto se presenta a continuación:
plot_summs(mod_loglin_int, mod_loglin, scale = TRUE, plot.distributions = TRUE)
El estadístico de Wald sobre los parámetros del modelo con intercepto son:
regTermTest(model = mod_loglin_int, ~Sex)
## Wald test for Sex
## in svyglm(formula = pobreza ~ Sex + Zone + Region + Sex:Zone + Sex:Region,
## design = diseno, family = binomial)
## F = 0.05753 on 1 and 108 df: p= 0.81
regTermTest(model = mod_loglin_int, ~Zone)
## Wald test for Zone
## in svyglm(formula = pobreza ~ Sex + Zone + Region + Sex:Zone + Sex:Region,
## design = diseno, family = binomial)
## F = 2.749 on 1 and 108 df: p= 0.1
regTermTest(model = mod_loglin_int, ~Region)
## Wald test for Region
## in svyglm(formula = pobreza ~ Sex + Zone + Region + Sex:Zone + Sex:Region,
## design = diseno, family = binomial)
## F = 0.8999 on 4 and 108 df: p= 0.47
regTermTest(model = mod_loglin_int, ~Sex:Zone)
## Wald test for Sex:Zone
## in svyglm(formula = pobreza ~ Sex + Zone + Region + Sex:Zone + Sex:Region,
## design = diseno, family = binomial)
## F = 0.006789 on 1 and 108 df: p= 0.93
regTermTest(model = mod_loglin_int, ~Sex:Region)
## Wald test for Sex:Region
## in svyglm(formula = pobreza ~ Sex + Zone + Region + Sex:Zone + Sex:Region,
## design = diseno, family = binomial)
## F = 1.058 on 4 and 108 df: p= 0.38
Observándose que con una confianza del 95% ninguno de los parámetros del modelo es significativo.
Ahora bien, como se ha explicado a los largo de los capítulos relacionado con modelos, se pueden ajustar modelos usando Q_Weighting. A continuación, se presenta cómo se ajusta el modelo usando estos pesos:
<- lm(wk ~ Sex + Zone + Region ,
fit_wgt data = encuesta)
<- predict(fit_wgt)
wgt_hat %<>% mutate(wk2 = wk/wgt_hat)
encuesta
<- encuesta %>%
diseno_qwgt as_survey_design(
strata = Stratum,
ids = PSU,
weights = wk2,
nest = T
)
Defiendo la variable pobreza dentro de la base de datos.
<- diseno_qwgt %>% mutate(
diseno_qwgt pobreza = ifelse(Poverty != "NotPoor", 1, 0))
Ajustando el modelo se tiene:
<- svyglm(formula = pobreza ~ Sex + Zone + Region,
mod_loglin_qwgt family=quasibinomial,
design=diseno_qwgt)
<- tidy(mod_loglin_qwgt)
tab_mod tab_mod
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | -0.4644 | 0.2630 | -1.7656 | 0.0802 |
SexMale | 0.0241 | 0.0883 | 0.2726 | 0.7857 |
ZoneUrban | -0.3445 | 0.2311 | -1.4903 | 0.1389 |
RegionSur | -0.0041 | 0.3116 | -0.0130 | 0.9896 |
RegionCentro | 0.1613 | 0.4270 | 0.3778 | 0.7063 |
RegionOccidente | 0.2424 | 0.3147 | 0.7705 | 0.4426 |
RegionOriente | 0.3937 | 0.4319 | 0.9115 | 0.3639 |
Concluyendo que, con una confianza del 95% y basado en la muestra, ninguno de los parámetros del modelo es significativo. Lo cual se puede corroborar con el gráfico de la distribución de los parámetros del modelo con los pesos ajustados y sin los pesos:
plot_summs(mod_loglin, mod_loglin_qwgt,
scale = TRUE, plot.distributions = TRUE)
El Estadístico de Wald sobre los parámetros del modelo se obtiene de manera similar a lo visto anteriormente:
regTermTest(model = mod_loglin_qwgt, ~Sex)
## Wald test for Sex
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno_qwgt,
## family = quasibinomial)
## F = 0.0743 on 1 and 113 df: p= 0.79
regTermTest(model = mod_loglin_qwgt, ~Zone)
## Wald test for Zone
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno_qwgt,
## family = quasibinomial)
## F = 2.221 on 1 and 113 df: p= 0.14
regTermTest(model = mod_loglin_qwgt, ~Region)
## Wald test for Region
## in svyglm(formula = pobreza ~ Sex + Zone + Region, design = diseno_qwgt,
## family = quasibinomial)
## F = 0.4156 on 4 and 113 df: p= 0.8
Concluyendo también que ninguna de las variables son significativas.