reg<- lm(mathach~ses+female+sector, data=mlm)
reg_agg<- lm(mathach~ses+female+sector, data=agg_mlm)
pacman::p_load(sjPlot,sjmisc,sjlabelled)tab_model(reg, reg_agg, show.ci=F, show.se = T, dv.labels = c("Individual", "Agregado"))
Individual | Agregado | |||||
---|---|---|---|---|---|---|
Predictors | Estimates | std. Error | p | Estimates | std. Error | p |
(Intercept) | 12.52 | 0.13 | <0.001 | 13.13 | 0.35 | <0.001 |
ses | 2.88 | 0.10 | <0.001 | 5.19 | 0.37 | <0.001 |
female | -1.40 | 0.15 | <0.001 | -1.97 | 0.56 | 0.001 |
sector | 1.96 | 0.15 | <0.001 | 1.25 | 0.31 | <0.001 |
Observations | 7185 | 160 | ||||
R2 / R2 adjusted | 0.160 / 0.159 | 0.675 / 0.668 |
función lmer (linear mixed effects)
forma general:
objeto <- lmer (depvar ~ predictor_1 + predictor_2 + predictor_n + (1 | cluster), data=data)
el objeto contiene la información de la estimación; para ver un resumen, summary(objeto)
, y de manera más presentable,screenreg(objeto)
Medidas relativas a la varianza de efectos aleatorios (tipo R2R2)
Medidas de fit comparativo (deviance)
results_0: nulo results_1: agrega predictores individuales (nivel 1) results_2: agrega predictores grupales (nivel 2)
results_0 <-lmer(mathach ~ 1 + (1 | schoolid), data = mlm)results_1 <-lmer(mathach ~ 1 + ses + female + (1 | schoolid), data = mlm)results_2 <-lmer(mathach ~ 1 + sector + mnses + (1 | schoolid), data = mlm)
Se relacionan con el grado de varianza “explicada” (disminución en la(s) varianza(s) atribuida a la inclusión de predictores en el modelo de regresión)
Controversia en la literatura de multinivel, no existe una medida única
Las propuestas sugieren usualmente cálculos de R2R2 para cada nivel
lógica general: calcular la diferencia entre componentes de la varianza entre los modelos estimados
modelo base para la comparación: modelo nulo
lógica general: calcular la diferencia entre componentes de la varianza entre los modelos estimados
modelo base para la comparación: modelo nulo
luego, al ir estimando nuevos models con más predictores, se compara (con el modelo nulo) en que medida los componentes de la varianza van disminuyendo
σ2σ2 | τ00τ00 | |
---|---|---|
Modelo 0 (nulo, sin predictores) | 39.148 | 8.553 |
Modelo 1 (predictores ind.) | 36.813 | 4.492 |
Modelo 2 (predictores grup.) | 39.161 | 2.314 |
Los componentes de la varianza van disminuyendo a medida que se ingresan predictores a los modelos
Por ejemplo, en el modelo 1 el componente de la varianza individual σ2σ2 disminuye en comparación al modelo nulo: 39.148-36.813=2.335 - ¿Cómo interpretar esto?
Para Nivel 1:
R21B&R=var0(rij)−varf(rij)var0(rij)=σ2(0)−σ2(f)σ2(0)
Donde:
0 se refiere al modelo nulo
f se refiere a un modelo posterior
σ2 | τ00 | R2L1 | R2L2 | |
---|---|---|---|---|
Modelo 0 | 39.148 | 8.553 | ||
Modelo 1 (predict.ind.) | 36.813 | 4.492 | 0.059 | |
Modelo 2 (predict.grup.) | 39.161 | 2.314 |
Ej: R2L1=(39.148−36.813)/39.148=2.335/39.148=0.059
Para Nivel 2:
R22B&R=var0(μ0j)−varf(μ0j)var0(μ0j)=τ00(0)−τ00(f)τ00(0)
Donde:
0 se refiere al modelo nulo
f se refiere a un modelo posterior
σ2 | τ00 | R2L1 | R2L2 | |
---|---|---|---|---|
Modelo 0 | 39.148 | 8.553 | ||
Modelo 1 (predict.ind.) | 36.813 | 4.492 | 0.059 | |
Modelo 2 (predict.grup.) | 39.161 | 2.314 | 0.00 | 0.73 |
Ej: R2L2=(8.553−2.314)/8.553=6.239/8.553=0.73
σ2 | τ00 | R2L1 | R2L2 | |
---|---|---|---|---|
Modelo 0 | 39.148 | 8.553 | ||
Modelo 1 (predict.ind.) | 36.813 | 4.492 | 0.059 | |
Modelo 2 (predict.grup.) | 39.161 | 2.314 | 0.00 | 0.73 |
Ej: R2L2=(8.553−2.314)/8.553=6.239/8.553=0.73
función multilevel.r2
, librería misty
pacman::p_load(misty)# for multilevel R2misty::multilevel.r2(results_1, print = "RB")
## R-Squared Measures for Multilevel and Linear Mixed Effects Models## ## Reduction in Residual Variance (Raudenbush and Bryk, 2002)## ## Within-Cluster R2: 0.060 ## Between-Cluster R2: 0.479
función multilevel.r2
, librería misty
pacman::p_load(misty)# for multilevel R2misty::multilevel.r2(results_2, print = "RB")
## R-Squared Measures for Multilevel and Linear Mixed Effects Models## ## Reduction in Residual Variance (Raudenbush and Bryk, 2002)## ## Within-Cluster R2: -0.000 ## Between-Cluster R2: 0.731
dos R2:
marginal: para los efectos fijos del modelo
condicional: para el modelo con efectos fijos y aleatorios
utiliza la varianza de los valores predichos de la variable dependiente
misty::multilevel.r2(results_2, print = "NS")
## R-Squared Measures for Multilevel and Linear Mixed Effects Models## ## Variance Partitioning (Nakagawa and Schielzeth, 2013; Johnson, 2014)## ## Marginal R2: 0.130 ## Conditional R2: 0.179
El test o estadístico de deviance compara el ajuste de dos modelos basado en la log verosimilitud de cada modelo
La hipótesis a contrastar es si predictores adicionales del modelo mejoran o no el ajuste
Asume que los modelos son anidados, es decir, que un modelo con menos predictores puede ser derivado del modelo mayor mediante la fijación de ciertos coeficientes como 0.
Deviance= −2∗LL (LL=Log Likelihood)
Deviance test= deviance(anidado)−deviance(mayor)
La distribución del estadístico de devianza es χ2, y los grados de libertad para calcular el valor crítico equivalen al número de parámetros extra en el modelo mayor
Es decir, parámetros modelo mayor - parámetros modelo inicial (o anterior)
Se utiliza con estimación ML en lugar de REML (restricted maximum likelihood).
results_0ml = lmer(mathach ~ 1 + (1 | schoolid), REML=FALSE)results_1ml = lmer(mathach ~ 1 + minority + ses + (1 | schoolid), REML=FALSE)
LL | deviance | Parámetros | |
---|---|---|---|
results_0ml | -23557.91 | 47115.81 | |
results_1ml | -23221.82 | 46443.64 | 2 |
Valor crítico χ2DF=2 para p<0.95=5.99
Por lo tanto, se rechaza H0, es decir, las diferencias entre los modelos son distintas de 0 ( p<0.05 ). En otras palabras, el modelo con más parámetros presenta un mejor ajuste.
anova(results_0ml,results_1ml)
Y para reportar:
print(xtable::xtable(anova(results_0ml,results_1ml)), type="html")
npar | AIC | BIC | logLik | deviance | Chisq | Df | Pr(>Chisq) | |
---|---|---|---|---|---|---|---|---|
results_0ml | 3.00 | 47121.81 | 47142.45 | -23557.91 | 47115.81 | |||
results_1ml | 5.00 | 46453.64 | 46488.03 | -23221.82 | 46443.64 | 672.17 | 2 | 0.0000 |
Los test de ajuste por proporción de varianza (R2) no son recomendados al momento de estimar modelos con pendiente aleatoria
El test de deviance se utiliza al momento de reportar la significancia de los efectos aleatorios (ej: con pendiente aleatorio,comparando el mismo modelo con y sin aleatorización)
Considerar que los componentes de la varianza son parámetros del modelo, es decir, se cuentan para la diferencia de grados de libertad
Tabla de descriptivos de variables L1 y L2
para esto conviene generar base de datos agregados para tabla descriptiva
se recomienda utilizar librería summarytools, función dfSummary (información aquí)
Descripción del número de casos por nivel y también de otras variables relevantes (ej, dependiente e independientes comprometidas en hipótesis)
sjmisc::descr(mlm, show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% kable(.,digits =2,"markdown")
var | label | n | NA.prc | mean | sd | range | |
---|---|---|---|---|---|---|---|
3 | minority | minority | 7185 | 0 | 0.27 | 0.45 | 1 (0-1) |
1 | female | female | 7185 | 0 | 0.53 | 0.50 | 1 (0-1) |
7 | ses | ses | 7185 | 0 | 0.00 | 0.78 | 6.45 (-3.76-2.69) |
2 | mathach | mathach | 7185 | 0 | 12.75 | 6.88 | 27.83 (-2.83-24.99) |
8 | size | size | 7185 | 0 | 1056.86 | 604.17 | 2613 (100-2713) |
6 | sector | sector | 7185 | 0 | 0.49 | 0.50 | 1 (0-1) |
4 | mnses | mnses | 7185 | 0 | 0.00 | 0.41 | 2.02 (-1.19-0.82) |
5 | schoolid | schoolid | 7185 | 0 | 5277.90 | 2499.58 | 8362 (1224-9586) |
mlm %>% select (mathach, ses, female, minority) %>% sjmisc::descr(., show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% kable(., digits =2, "markdown", caption = "Variables nivel 1")
Table: Variables nivel 1
var | label | n | NA.prc | mean | sd | range | |
---|---|---|---|---|---|---|---|
2 | mathach | mathach | 7185 | 0 | 12.75 | 6.88 | 27.83 (-2.83-24.99) |
4 | ses | ses | 7185 | 0 | 0.00 | 0.78 | 6.45 (-3.76-2.69) |
1 | female | female | 7185 | 0 | 0.53 | 0.50 | 1 (0-1) |
3 | minority | minority | 7185 | 0 | 0.27 | 0.45 | 1 (0-1) |
agg_mlm %>% select (size, sector,mnses) %>% sjmisc::descr(., show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% kable(., digits =2, "markdown", caption = "Variables nivel 2")
Table: Variables nivel 2
var | label | n | NA.prc | mean | sd | range | |
---|---|---|---|---|---|---|---|
3 | size | size | 160 | 0 | 1097.83 | 629.51 | 2613 (100-2713) |
2 | sector | sector | 160 | 0 | 0.44 | 0.50 | 1 (0-1) |
1 | mnses | mnses | 160 | 0 | -0.01 | 0.41 | 2.02 (-1.19-0.82) |
Alternativas en R: Stargazer, summarytools
(O’Connell, cap.11)
Efectos fijos, con valores t o se
Asteriscos para niveles de significación
Efectos aleatorios
Fit: log likelihood
Fit adicionales: AIC, BIC, deviance, R2
tab_model(results_1, results_2, show.ci = FALSE, show.se = TRUE, collapse.se = TRUE, show.p = FALSE, p.style = c("scientific_stars") )
mathach | |
---|---|
Predictors | Estimates |
(Intercept) | 12.13 *** (0.20) |
sector | 1.23 *** (0.31) |
mnses | 5.33 *** (0.37) |
Random Effects | |
σ2 | 39.16 |
τ00 schoolid | 2.31 |
ICC | 0.06 |
N schoolid | 160 |
Observations | 7185 |
Marginal R2 / Conditional R2 | 0.130 / 0.179 |
* p<0.05 ** p<0.01 *** p<0.001 |
Revisar:
permite generar tablas y gráficos automáticamente en el mismo documento, evitando el cortar / pegar
escritura simple
acostumbrarse
conformarse con un formato simple de texto (al menos inicialmente)
... igual es R
Tres cosas básicas a aprender:
Markdown
Insertar trozos (chunks) de código
Opciones generales en encabezado YAML
Guías de documentos dinámicos (con video) de clases de correlacional 2023:
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
s | Toggle scribble toolbox |
Esc | Back to slideshow |