Random Coefficients Modeling

Incluyendo variables en el Nivel 1 y en el Nivel 2

Gonzalo J. Muñoz

2019-07-03

Comparación de modelos bottom-up

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

Estadísticos descriptivos

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

Paso 1: Intercepto

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\]

Paso 2: Factores fijos de Nivel 1

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

Paso 3: Factores fijos de Nivel 1 + Factores Fijos de Nivel 2

No se incluye la varianza de la pendiente

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

Paso 4: Factores aleatorios factores de Nivel 1 significativos

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

Visualizar modelo 4 con correlación entre intercepto y pendiente

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()

Paso 5: Interacción entre factores de Nivel 1 y Nivel 2

Ecuaciones

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)

Comparación de modelos

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

Grand-mean vs group-mean centering

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