Cuando incluimos variables de Nivel 1 y Nivel 2 hay que tener un sistema para determinar qué efectos son relevantes para el modelo definitivo. Hox (2010) recomienda seguir cinco pasos para evaluar un modelo multinivel. Este es un proceso bottom-up que parte con un modelo donde sólo se estima la varianza del intercepto sin ningún predictor y avanza progresivamente hasta un modelo con una interacción entre una variable de Nivel 2 y una variable de Nivel 1.
Paso 1: Intercepto Paso 2: Factores fijos de Nivel 1 Paso 3: Factores fijos de Nivel 1 + Factores Fijos de Nivel 2 Paso 4: Factores aleatorios factores de Nivel 1 significativos Paso 5: Interacción entre factores de Nivel 1 y Nivel 2
En general es una buena idea mirar los estadísticos descriptivos de la data que estamos analizando. Hay que tener en consideración que las variables de Nivel 1 están anidadas en el Nivel 2, por lo que sólo en el caso del Nivel 1 podemos usar el promedio de todas las observaciones. Las variables de Nivel 2 deben ser agregadas de acuerdo a su variable de agrupación para poder describirlas correctamente (i.e, grados de libertad correctos). Por ahora, es importante consignar que la variable ses tiene un promedio de 0, por lo que se puede inferir que está centrada (más sobre esto más adelante)1 En la versión agregada de la data el tamaño (size) se refiere al tamaño del colegio, no de la muestra tomada del colegio para el estudio. Lo mismo ocurre con meanses
hsb<-readRDS(file = "hsb.rds")
require(psych)
## Loading required package: psych
describe(hsb[,2:5])
## vars n mean sd median trimmed mad min max range skew
## minority 1 7185 0.27 0.45 0.00 0.22 0.00 0.00 1.00 1.00 1.01
## female 2 7185 0.53 0.50 1.00 0.54 0.00 0.00 1.00 1.00 -0.11
## ses 3 7185 0.00 0.78 0.00 0.02 0.85 -3.76 2.69 6.45 -0.23
## mathach 4 7185 12.75 6.88 13.13 12.91 8.12 -2.83 24.99 27.82 -0.18
## kurtosis se
## minority -0.98 0.01
## female -1.99 0.01
## ses -0.38 0.01
## mathach -0.92 0.08
aggdata<-aggregate(hsb[,6:8],by=list(hsb$schid),FUN=mean)
#El `-1` es para simplemente para evitar que aparezca la media de de la variable de agrupación
describe(aggdata[,-1])
## vars n mean sd median trimmed mad min max
## size 1 160 1097.83 629.51 1061.00 1058.24 695.34 100.00 2713.00
## schtype 2 160 0.44 0.50 0.00 0.42 0.00 0.00 1.00
## meanses 3 160 0.00 0.41 0.03 0.01 0.47 -1.19 0.83
## range skew kurtosis se
## size 2613.00 0.46 -0.61 49.77
## schtype 1.00 0.25 -1.95 0.04
## meanses 2.02 -0.28 -0.45 0.03
require(lme4)
## Loading required package: lme4
## Loading required package: Matrix
require(lmerTest)
## Loading required package: lmerTest
## Registered S3 methods overwritten by 'ggplot2':
## method from
## [.quosures rlang
## c.quosures rlang
## print.quosures rlang
##
## Attaching package: 'lmerTest'
## The following object is masked from 'package:lme4':
##
## lmer
## The following object is masked from 'package:stats':
##
## step
model.1<-lmer(mathach ~ 1 + (1|schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.1)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ 1 + (1 | schid)
## Data: hsb
##
## REML criterion at convergence: 47116.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0631 -0.7539 0.0267 0.7606 2.7426
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 8.614 2.935
## Residual 39.148 6.257
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 12.6370 0.2444 156.6473 51.71 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La correlación intraclase en este caso sería: \[\rho=\frac{\tau_{00}}{\tau_{00}+\sigma^2_e}=\frac{8.61}{8.61+39.15}=0.18\]
model.2<-lmer(mathach ~ ses + (1|schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.2)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ ses + (1 | schid)
## Data: hsb
##
## REML criterion at convergence: 46645.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.12607 -0.72720 0.02188 0.75772 2.91912
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 4.768 2.184
## Residual 37.034 6.086
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 12.6575 0.1880 148.3022 67.33 <2e-16 ***
## ses 2.3902 0.1057 6838.0776 22.61 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## ses 0.003
Una manera de comparar los modelos 1 y 2 es determinar la proporción de varianza explicada por el modelo 2. Hox (2010) propone comparar los residuos de cada nivel por separado.2 b=baseline;m=comparison model Para los residuos de nivel 1 tenemos:
\[R^2_1=(\frac{\sigma^2_{e|b}-\sigma^2_{e|m}}{\sigma^2_{e|b}})\] \[R^2_1=(\frac{39.148-37.034}{39.148})=0.054\]
Mientras que para los residuos de nivel 2 tenemos:
\[R^2_2=(\frac{\sigma^2_{u0|b}-\sigma^2_{u0|m}}{\sigma^2_{u0|b}})\] \[R^2_1=(\frac{8.614-4.768}{8.614})=0.44548\approx0.45\] Es interesante notar que la variable de Nivel 1 reduce la varianza entre grupos o clases. Esto es así porque la composición de los grupos varía en SES. Si algunos grupos tienen estudiantes mayoritariamente con alto SES y otros grupos mayoritariamente estudiantes con bajo SES la variable individual puede influier en el promedio de los grupos. Si, en cambio, añadimos una variable de Nivel 2 (e.g., meanses) ese factor no debiese tener un efecto en reducir la varianza residual del nivel 1, o si ocurre sería ruido derivado del proceso de estimación.
model.xyz <-lmer(mathach ~ meanses + (1|schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.xyz)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ meanses + (1 | schid)
## Data: hsb
##
## REML criterion at convergence: 46961.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.13480 -0.75256 0.02409 0.76773 2.78501
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 2.639 1.624
## Residual 39.157 6.258
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 12.6494 0.1493 153.7425 84.74 <2e-16 ***
## meanses 5.8635 0.3615 153.4067 16.22 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## meanses -0.004
En cualquier caso, al comparar modelos con el método de comparación de varianzas puede darse el caso que al incluir una variable explicatoria aument la varianza no explicada lo que conduciría a valores de r cuadrado negativos, lo que obviamente es un problema.
Otro método para comparar modelos es comparar sus respectivas desviaciones (deviances). Cuando se usa REML este valor aparece etiquetado como REML criterion at convergence: y se llama así porque es -2 \(\times\) ln el valor de la función likelihood al momento de converger. La desviación del modelo 1 es 47116.8 mientras que en el modelo 2 46645.2lo que sugiere que el ajuste del modelo 2 es mejor que el ajuste del modelo 1. La diferencia entre ambos modelos se puede evaluar mediante una prueba \(\chi^2\) con grados de libertad igual a la diferencia de parámetros estimados en los dos modelos.
El modelo 1 se obtiene removiendo la variable ses del modelo 2. La diferencia entre la desviación del modelo 1 y la desviación del modelo 2 refleja la pérdida de ajuste del modelo al no incluir este predictor.
47116.8-46645.2
## [1] 471.6
El valor crítico de \(\chi^2\) para df=1 se puede obtener mediante
qchisq(p=.95,df=1)
## [1] 3.841459
Es decir, si la diferencia entre el modelo 1 y 2 es igual o mayor que 3.84 sería estadísticamente significativa. Para obtener el valor exacto de p para el valor de 471.6 podemos usar:
pchisq(471.6, df=1,lower.tail = FALSE)
## [1] 1.437468e-104
Una función muy util para comparar modelos es anova. Es importante notar que el modelo es reajustado pero usando ahora maximum likelihood en vez de restricted maximum likelihood, por lo que los valores de las desviaciones del modelo 1 y 2 son algo distintos de los que obtuvimos en el paso anterior.
anova(model.1,model.2)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.1: mathach ~ 1 + (1 | schid)
## model.2: mathach ~ ses + (1 | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.1 3 47122 47142 -23558 47116
## model.2 4 46649 46677 -23321 46641 474.81 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model.3<-lmer(mathach ~ ses + schtype + (1|schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.3)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ ses + schtype + (1 | schid)
## Data: hsb
##
## REML criterion at convergence: 46611.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.14857 -0.73100 0.01929 0.75366 2.92634
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 3.685 1.920
## Residual 37.037 6.086
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.7189 0.2281 153.5842 51.386 < 2e-16 ***
## ses 2.3747 0.1055 6738.8583 22.511 < 2e-16 ***
## schtype 2.1008 0.3411 147.3574 6.159 6.64e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) ses
## ses 0.063
## schtype -0.672 -0.091
anova(model.1,model.2,model.3)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.1: mathach ~ 1 + (1 | schid)
## model.2: mathach ~ ses + (1 | schid)
## model.3: mathach ~ ses + schtype + (1 | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.1 3 47122 47142 -23558 47116
## model.2 4 46649 46677 -23321 46641 474.806 1 < 2.2e-16 ***
## model.3 5 46616 46651 -23303 46606 34.568 1 4.115e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Si tuviésemos más de un factor fijo de Nivel 1, es recomendado evaluarlos 1 a 1 y dejar en el modelo final sólo aquellos que tengan efectos estadísticamente significativos
model.4<-lmer(mathach ~ ses + schtype + (ses|schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.4)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ ses + schtype + (ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46601.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1373 -0.7296 0.0225 0.7568 2.8920
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 3.9646 1.991
## ses 0.4343 0.659 0.55
## Residual 36.8008 6.066
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.4729 0.2315 153.7963 49.568 < 2e-16 ***
## ses 2.3854 0.1179 157.8423 20.238 < 2e-16 ***
## schtype 2.5408 0.3445 151.3087 7.375 1.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) ses
## ses 0.228
## schtype -0.655 -0.079
Dado que en este caso la variable de Nivel 2 (schtype) sólo modera el intercepto, la pendiente para ambos tipos de colegio se asume que es igual (en promedio). En este caso tenemos los siguientes valores predichos: b0_publico = 11.47 b0_catolico = 11.47 + 2.54 = 14.01 b1 = 2.39
La matriz de varianza-covarianza de los efectos del modelo se puede escribir como:
\[V = \begin{bmatrix} u_{0j}\\ u_{1j}\\ \end{bmatrix}= \begin{bmatrix} \tau_{00} & \tau_{01}\\ \tau_{10} & \tau_{11}\\ \end{bmatrix}\]
donde \(\tau{00}\) y \(\tau{11}\) corresponden a la varianza del intercepto y la pendiente, respectivamente; mientras que \(\tau{10}=\tau{01}\) es la covarianza entre el intercepto y la pendiente.
Podemos extraer los valores para la matriz de varianza-covarianza de los efectos del modelo mediante la función VarCorr
as.data.frame(VarCorr(model.4))
## grp var1 var2 vcov sdcor
## 1 schid (Intercept) <NA> 3.9645594 1.9911201
## 2 schid ses <NA> 0.4343097 0.6590218
## 3 schid (Intercept) ses 0.7213411 0.5497224
## 4 Residual <NA> <NA> 36.8007850 6.0663651
\[V = \begin{bmatrix} 3.965 & 0.721\\ 0.721 & 0.434\\ \end{bmatrix}\]
A partir de los valores de la matriz de varianza-covarianza podemos obtener la correlación entre el intercepto y la pendiente mediante:
\[\gamma_{int.slope}=\frac{Cov_{int.slope}}{\sqrt{}V_{int}\times\sqrt{}V_{slope}}=\frac{\tau_{01}}{\sqrt{\tau_{00}\times\tau_{11}}}\]
Reemplazando en la fórmula anterior, la correlación entre el intercepto y la pendiente para el modelo 4 sería:
\[\gamma_{int.slope}==\frac{0.721}{\sqrt{3.965}\times\sqrt{0.434}}=0.549722...\approx0.55\]
0.721/(sqrt(3.965)*sqrt(0.434))
## [1] 0.5496279
Como se puede apreciar más abajo, el modelo permite que cada colegio tenga su propio intecepto y pendiente. Esto quiere decir que nuestro modelo incluye un efecto de interacción inter-nivel (i.e., cross-level effect) que se observa en que las tanto las pendientes de cada modelo se cruzan. ¿Depende la relación entre SES (individual) y matemáticas (individual) del tipo de colegio (grupal)? Mirando la figura de más abajo, la respuesta parece se que sí.
anova(model.1,model.2,model.3,model.4)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.1: mathach ~ 1 + (1 | schid)
## model.2: mathach ~ ses + (1 | schid)
## model.3: mathach ~ ses + schtype + (1 | schid)
## model.4: mathach ~ ses + schtype + (ses | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.1 3 47122 47142 -23558 47116
## model.2 4 46649 46677 -23321 46641 474.8057 1 < 2.2e-16 ***
## model.3 5 46616 46651 -23303 46606 34.5683 1 4.115e-09 ***
## model.4 7 46611 46660 -23299 46597 9.0438 2 0.01087 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Veamos si el tipo de colegio (público vs católico) puede servir para explicar esta diferencia. Primero, veamos gráficamente cómo se podría ver este modelo.3 Considere que el tipo de colegio es 0=Público y 1=CatólicoAparentemente la relación entre ses y mathach es más fuerte en el caso de los colegios públicos
hsb.sample %>%
ggplot(aes(x=ses, y=fitmathach, group=schid, linetype=schtype)) +
geom_line(size=1, show.legend = TRUE) + facet_grid(. ~ schtype) + scale_linetype_discrete(name ="schtype",labels=c("Public", "Catholic")) + theme_classic()
Modelo Nivel 1: \[Y_{ij}=\beta_{0_j}+\beta_{1j}SES_{ij}+e_{ij}\] Modelos Nivel 2: \[\beta_{0_j}=\gamma_{00}+\gamma_{01}schtype_j+u_{0j}\] \[\beta_{1_j}=\gamma_{10}+\gamma_{11}schtype_j+u_{1j}\]
Modelo combinado: \[Y_{ij}=\gamma_{00}+\gamma_{01}schtype_j+\gamma_{10}SES{ij}+\gamma_{11}(schtype_j\times SES_{ij})+u_{0j}+u_{1j}SES{ij}+e_{ij}\]
En el siguiente modelo (model.5) podemos evaluar si la relación entre SES y mathach varía por tipo colegio (público vs católico). Para incluir la interacción podemos usar ses + schtype + ses:schtype o, en su forma abreviada ses*schtype4 A veces se agrega un 1 delante de ses para señalar el intercepto (i.e., 1 + ses*schtype + (1 + ses|schid)), pero esto no es necesario
model.5<-lmer(mathach ~ ses*schtype + (ses|schid),REML=TRUE,verbose=FALSE, data=hsb)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl =
## control$checkConv, : Model failed to converge with max|grad| = 0.00578929
## (tol = 0.002, component 1)
summary(model.5)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ ses * schtype + (ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46569.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.07828 -0.72435 0.01562 0.75717 2.98509
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 3.82107 1.9548
## ses 0.07587 0.2754 1.00
## Residual 36.78760 6.0653
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.7518 0.2318 152.4362 50.699 < 2e-16 ***
## ses 2.9575 0.1431 1352.0036 20.669 < 2e-16 ***
## schtype 2.1295 0.3459 145.3807 6.156 6.90e-09 ***
## ses:schtype -1.3134 0.2156 1391.9727 -6.092 1.44e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) ses schtyp
## ses 0.274
## schtype -0.670 -0.184
## ses:schtype -0.182 -0.664 0.179
## convergence code: 0
## Model failed to converge with max|grad| = 0.00578929 (tol = 0.002, component 1)
anova(model.1,model.2,model.3,model.4,model.5)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.1: mathach ~ 1 + (1 | schid)
## model.2: mathach ~ ses + (1 | schid)
## model.3: mathach ~ ses + schtype + (1 | schid)
## model.4: mathach ~ ses + schtype + (ses | schid)
## model.5: mathach ~ ses * schtype + (ses | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.1 3 47122 47142 -23558 47116
## model.2 4 46649 46677 -23321 46641 474.8057 1 < 2.2e-16 ***
## model.3 5 46616 46651 -23303 46606 34.5683 1 4.115e-09 ***
## model.4 7 46611 46660 -23299 46597 9.0438 2 0.01087 *
## model.5 8 46579 46634 -23282 46563 34.2135 1 4.939e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Si bien el modelo 5 es superior al modelo 4, hay un warning en el modelo 5 sobre la convergencia del modelo. Una forma de resolver este problema (y otros problemas de interpretación) es centrar las variables.
En cualquier caso, el modelo quedaría como:
b0_publico=11.75 b0_catolico = 11.75+2.13=13.88 b1_publico=2.96 b1_catolico = 2.96 - 1.31 = 1.64
Bauer y Curran (2005) recomiendan centrar los predictores de Nivel 1 en relación al grupo (group-mean centering) y centrar los predictores de Nivel 2 en relación a la gran media. Usando group-mean centering vemos que ahora no hay problemas de convergencia.5 https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html
hsb$grp.cen.ses<-hsb$ses-hsb$meanses
model.5B<-lmer(mathach ~ grp.cen.ses*schtype + (grp.cen.ses|schid),REML=TRUE,data=hsb)
summary(model.5B)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses * schtype + (grp.cen.ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46638.6
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.06490 -0.73237 0.01565 0.75370 2.94195
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 6.7504 2.5982
## grp.cen.ses 0.2657 0.5154 0.78
## Residual 36.7056 6.0585
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.4106 0.2930 158.4267 38.944 < 2e-16 ***
## grp.cen.ses 2.8028 0.1550 141.6607 18.087 < 2e-16 ***
## schtype 2.7995 0.4395 153.7010 6.369 2.09e-09 ***
## grp.cen.ses:schtype -1.3411 0.2338 151.5366 -5.737 5.08e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c. schtyp
## grp.cen.ses 0.262
## schtype -0.667 -0.175
## grp.cn.ss:s -0.174 -0.663 0.264
Sin embargo, al comparar los modelos 4 y 5B el valor de \(\chi^2\) es 1.
anova(model.4,model.5B)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.4: mathach ~ ses + schtype + (ses | schid)
## model.5B: mathach ~ grp.cen.ses * schtype + (grp.cen.ses | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.4 7 46611 46660 -23299 46597
## model.5B 8 46650 46705 -23317 46634 0 1 1
Lo que ocurre porque para poder hacer este test tenemos que tener los mismos predictores en cada modelo. Agregemos al modelo 4 la variable ses centrada
model.4B<-lmer(mathach ~ grp.cen.ses + schtype + (ses|schid),REML=TRUE,verbose=FALSE, data=hsb)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl =
## control$checkConv, : Model failed to converge with max|grad| = 0.00388874
## (tol = 0.002, component 1)
summary(model.4B)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses + schtype + (ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46674.7
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.11979 -0.73382 0.02078 0.75376 2.86806
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 7.2228 2.6875
## ses 0.5119 0.7155 0.58
## Residual 36.7488 6.0621
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 10.9274 0.2926 159.2434 37.348 < 2e-16 ***
## grp.cen.ses 2.1618 0.1231 164.1146 17.562 < 2e-16 ***
## schtype 3.4337 0.4399 160.4362 7.806 7.19e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c.
## grp.cen.ses 0.182
## schtype -0.640 0.018
## convergence code: 0
## Model failed to converge with max|grad| = 0.00388874 (tol = 0.002, component 1)
Ahora los modelos son comparables, pero tenemos un problema de convergencia del modelo 4B.
anova(model.4B,model.5B)
## refitting model(s) with ML (instead of REML)
## Data: hsb
## Models:
## model.4B: mathach ~ grp.cen.ses + schtype + (ses | schid)
## model.5B: mathach ~ grp.cen.ses * schtype + (grp.cen.ses | schid)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## model.4B 7 46685 46733 -23336 46671
## model.5B 8 46650 46705 -23317 46634 37.427 1 9.492e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Intentemos un modelo sin incorporar la correlación entre intercepto y slopes.
model.4C<-lmer(mathach ~ grp.cen.ses + schtype + (ses||schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.4C)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses + schtype + (ses || schid)
## Data: hsb
##
## REML criterion at convergence: 46682.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.10922 -0.73126 0.01958 0.75482 2.92455
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 6.8187 2.6113
## schid.1 ses 0.4608 0.6788
## Residual 36.7915 6.0656
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.4119 0.2955 155.1855 38.619 < 2e-16 ***
## grp.cen.ses 2.1469 0.1220 163.2110 17.596 < 2e-16 ***
## schtype 2.7876 0.4435 150.7565 6.286 3.33e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c.
## grp.cen.ses -0.009
## schtype -0.666 0.015
hsb$fitmathach<-fitted(model.4C)
hsb.sample <- hsb[hsb$schid %in% sample(hsb$schid,size=70), ]
hsb.sample$schtype<-as.factor(hsb.sample$schtype)
model.5C<-lmer(mathach ~ grp.cen.ses * schtype + (ses||schid),REML=TRUE,verbose=FALSE, data=hsb)
summary(model.5C)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses * schtype + (ses || schid)
## Data: hsb
##
## REML criterion at convergence: 46650.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.04840 -0.72989 0.01719 0.75666 3.00273
##
## Random effects:
## Groups Name Variance Std.Dev.
## schid (Intercept) 6.75419 2.5989
## schid.1 ses 0.05653 0.2378
## Residual 36.79131 6.0656
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.4077 0.2933 157.1134 38.896 < 2e-16 ***
## grp.cen.ses 2.7772 0.1470 149.6161 18.887 < 2e-16 ***
## schtype 2.7944 0.4400 152.3783 6.351 2.34e-09 ***
## grp.cen.ses:schtype -1.3479 0.2220 163.2338 -6.073 8.53e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c. schtyp
## grp.cen.ses 0.001
## schtype -0.667 0.000
## grp.cn.ss:s 0.000 -0.662 0.003
hsb$fitmathach<-fitted(model.5C)
hsb.sample <- hsb[hsb$schid %in% sample(hsb$schid,size=70), ]
hsb.sample$schtype<-as.factor(hsb.sample$schtype)
hsb.sample %>%
ggplot(aes(x=ses, y=fitmathach, group=schid, linetype=schtype)) +
geom_line(size=1, show.legend = TRUE) + facet_grid(. ~ schtype) + scale_linetype_discrete(name ="schtype",labels=c("Public", "Catholic")) + theme_classic()
Nice
#Ojo que al centrar schtype hay que usar la data agregada
hsb$gm.cen.schtype<-hsb$schtype-mean(aggdata$schtype)
model.4C<-lmer(mathach ~ grp.cen.ses+gm.cen.schtype + (grp.cen.ses|schid),REML=TRUE,data=hsb)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl =
## control$checkConv, : Model failed to converge with max|grad| = 0.00414013
## (tol = 0.002, component 1)
summary(model.4C)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses + gm.cen.schtype + (grp.cen.ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46667.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.12077 -0.73655 0.01832 0.75294 2.85781
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 6.8585 2.6189
## grp.cen.ses 0.6971 0.8349 0.58
## Residual 36.7063 6.0586
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 12.6349 0.2200 150.3171 57.440 < 2e-16 ***
## grp.cen.ses 2.2147 0.1280 154.0569 17.306 < 2e-16 ***
## gm.cen.schtype 3.4604 0.4239 151.7308 8.163 1.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c.
## grp.cen.ses 0.287
## gm.cn.schty -0.014 0.002
## convergence code: 0
## Model failed to converge with max|grad| = 0.00414013 (tol = 0.002, component 1)
model.5C<-lmer(mathach ~ grp.cen.ses*gm.cen.schtype + (grp.cen.ses|schid),REML=TRUE,data=hsb)
summary(model.5C)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: mathach ~ grp.cen.ses * gm.cen.schtype + (grp.cen.ses | schid)
## Data: hsb
##
## REML criterion at convergence: 46638.6
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.06490 -0.73237 0.01565 0.75370 2.94195
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schid (Intercept) 6.7504 2.5982
## grp.cen.ses 0.2657 0.5154 0.78
## Residual 36.7056 6.0585
## Number of obs: 7185, groups: schid, 160
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 12.6354 0.2184 154.7455 57.848 < 2e-16
## grp.cen.ses 2.2161 0.1160 149.2530 19.100 < 2e-16
## gm.cen.schtype 2.7995 0.4395 153.7010 6.369 2.09e-09
## grp.cen.ses:gm.cen.schtype -1.3411 0.2338 151.5366 -5.737 5.08e-08
##
## (Intercept) ***
## grp.cen.ses ***
## gm.cen.schtype ***
## grp.cen.ses:gm.cen.schtype ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) grp.c. gm.cn.
## grp.cen.ses 0.264
## gm.cn.schty -0.014 -0.001
## grp.cn.s:.. -0.001 -0.004 0.264