suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(lme4))
##Load in Data
schooldata <- haven::read_dta("schoolsmoke-1.dta")
glimpse(schooldata)
## Rows: 1,600
## Columns: 5
## $ school <dbl> 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 19…
## $ thk <dbl> 1, 2, 3, 1, 2, 2, 3, 3, 2, 2, 4, 2, 2, 3, 4, 4, 1, 3, 4, 2, 1,…
## $ prethk <dbl> 5, 3, 4, 0, 1, 3, 1, 2, 3, 2, 2, 2, 3, 3, 2, 3, 3, 3, 2, 1, 3,…
## $ cc <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ gprethk <dbl> 2.153846, 2.153846, 2.153846, 2.153846, 2.153846, 2.153846, 2.…
#Changing cc to a factor variable/telling R it is categorical
schooldata.1 <- schooldata %>%
mutate(., cc.factor = as_factor(cc))
glimpse(schooldata.1)
## Rows: 1,600
## Columns: 6
## $ school <dbl> 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, …
## $ thk <dbl> 1, 2, 3, 1, 2, 2, 3, 3, 2, 2, 4, 2, 2, 3, 4, 4, 1, 3, 4, 2, …
## $ prethk <dbl> 5, 3, 4, 0, 1, 3, 1, 2, 3, 2, 2, 2, 3, 3, 2, 3, 3, 3, 2, 1, …
## $ cc <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ gprethk <dbl> 2.153846, 2.153846, 2.153846, 2.153846, 2.153846, 2.153846, …
## $ cc.factor <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
##Null Model
model.null <- lmer(thk ~ (1|school), REML = FALSE, data = schooldata.1)
summary(model.null)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ (1 | school)
## Data: schooldata.1
##
## AIC BIC logLik deviance df.resid
## 4833.0 4849.1 -2413.5 4827.0 1597
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.9039 -0.7734 0.0693 0.9240 1.7430
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.09438 0.3072
## Residual 1.16219 1.0780
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.60750 0.06538 39.88
#Calculate ICC
null.ICC <- 0.09438 /(0.09438 + 1.16219 )
null.ICC
## [1] 0.07510923
#turning off scientific notation
options(scipen=999)
lmerTest::rand(model.null)
## ANOVA-like table for random-effects: Single term deletions
##
## Model:
## thk ~ (1 | school)
## npar logLik AIC LRT Df Pr(>Chisq)
## <none> 3 -2413.5 4833.0
## (1 | school) 2 -2445.6 4895.2 64.16 1 0.000000000000001147 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##Conditional Random Intercept Models
model.1 <- lmer(thk ~ prethk + (1|school), REML = FALSE, data = schooldata.1)
summary(model.1)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk + (1 | school)
## Data: schooldata.1
##
## AIC BIC logLik deviance df.resid
## 4733.5 4755.0 -2362.7 4725.5 1596
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.12273 -0.82727 0.03082 0.83756 2.15165
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.07519 0.2742
## Residual 1.09321 1.0456
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.15164 0.07414 29.02
## prethk 0.21747 0.02122 10.25
##
## Correlation of Fixed Effects:
## (Intr)
## prethk -0.598
model.2 <- lmer(thk ~ prethk + cc.factor + (1|school), REML = FALSE, data = schooldata.1)
summary(model.2)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk + cc.factor + (1 | school)
## Data: schooldata.1
##
## AIC BIC logLik deviance df.resid
## 4721.3 4748.2 -2355.6 4711.3 1595
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.20705 -0.80300 0.04029 0.80179 2.15135
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.03333 0.1826
## Residual 1.09412 1.0460
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.94507 0.07699 25.265
## prethk 0.22262 0.02113 10.535
## cc.factor1 0.39215 0.08944 4.385
##
## Correlation of Fixed Effects:
## (Intr) prethk
## prethk -0.585
## cc.factor1 -0.580 0.023
model.3 <- lmer(thk ~ prethk + cc.factor + gprethk + (1|school), REML = FALSE, data = schooldata.1)
summary(model.3)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk + cc.factor + gprethk + (1 | school)
## Data: schooldata.1
##
## AIC BIC logLik deviance df.resid
## 4712.6 4744.9 -2350.3 4700.6 1594
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.23332 -0.79567 0.02374 0.79254 2.16704
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.01734 0.1317
## Residual 1.09334 1.0456
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.07609 0.25478 4.224
## prethk 0.21260 0.02138 9.944
## cc.factor1 0.43075 0.07554 5.702
## gprethk 0.41835 0.11930 3.507
##
## Correlation of Fixed Effects:
## (Intr) prethk cc.fc1
## prethk 0.000
## cc.factor1 -0.288 0.000
## gprethk -0.963 -0.179 0.148
#Summarizing conditional random intercept model
library(modelsummary)
library(broom.mixed)
models <- list(model.null, model.1, model.2, model.3)
modelsummary(models, output = "markdown")
| Model 1 | Model 2 | Model 3 | Model 4 | |
|---|---|---|---|---|
| (Intercept) | 2.607 | 2.152 | 1.945 | 1.076 |
| (0.065) | (0.074) | (0.077) | (0.255) | |
| prethk | 0.217 | 0.223 | 0.213 | |
| (0.021) | (0.021) | (0.021) | ||
| cc.factor1 | 0.392 | 0.431 | ||
| (0.089) | (0.076) | |||
| gprethk | 0.418 | |||
| (0.119) | ||||
| SD (Intercept school) | 0.307 | 0.274 | 0.183 | 0.132 |
| SD (Observations) | 1.078 | 1.046 | 1.046 | 1.046 |
| Num.Obs. | 1600 | 1600 | 1600 | 1600 |
| R2 Marg. | 0.000 | 0.060 | 0.091 | 0.109 |
| R2 Cond. | 0.075 | 0.121 | 0.118 | 0.123 |
| AIC | 4836.6 | 4743.2 | 4734.5 | 4729.0 |
| BIC | 4852.7 | 4764.7 | 4761.4 | 4761.3 |
| ICC | 0.1 | 0.1 | 0.0 | 0.0 |
| RMSE | 1.07 | 1.04 | 1.04 | 1.04 |
##Adding Random Slope - PRETHK at level 2
model.3.prethk_slp <- lmer(thk ~ prethk + cc.factor + gprethk + (prethk|school), REML = FALSE, data = schooldata.1)
summary(model.3.prethk_slp)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk + cc.factor + gprethk + (prethk | school)
## Data: schooldata.1
##
## AIC BIC logLik deviance df.resid
## 4715.5 4758.6 -2349.8 4699.5 1592
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.32829 -0.81670 0.02938 0.81294 2.14320
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## school (Intercept) 0.049006 0.22137
## prethk 0.002063 0.04542 -0.97
## Residual 1.090740 1.04438
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.90319 0.24823 3.639
## prethk 0.21136 0.02323 9.097
## cc.factor1 0.42343 0.07337 5.771
## gprethk 0.50405 0.11449 4.403
##
## Correlation of Fixed Effects:
## (Intr) prethk cc.fc1
## prethk -0.065
## cc.factor1 -0.295 -0.004
## gprethk -0.951 -0.174 0.160
lmerTest::rand(model.3.prethk_slp)
## ANOVA-like table for random-effects: Single term deletions
##
## Model:
## thk ~ prethk + cc.factor + gprethk + (prethk | school)
## npar logLik AIC LRT Df Pr(>Chisq)
## <none> 8 -2349.8 4715.5
## prethk in (prethk | school) 6 -2350.3 4712.6 1.0762 2 0.5839
##Testing a cross-level interaction
#centering predictors
schooldata.2 <- schooldata.1 %>%
mutate(.,
prethk_MC = prethk - mean(prethk),
gprethk_MC = gprethk - mean(gprethk))
psych::describe(schooldata.2, fast = TRUE)
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
## vars n mean sd min max range se
## school 1 1600 421.94 112.67 193.00 515.00 322.00 2.82
## thk 2 1600 2.59 1.12 1.00 4.00 3.00 0.03
## prethk 3 1600 2.07 1.26 0.00 6.00 6.00 0.03
## cc 4 1600 0.48 0.50 0.00 1.00 1.00 0.01
## gprethk 5 1600 2.07 0.30 1.59 3.06 1.47 0.01
## cc.factor 6 1600 NaN NA Inf -Inf -Inf NA
## prethk_MC 7 1600 0.00 1.26 -2.07 3.93 6.00 0.03
## gprethk_MC 8 1600 0.00 0.30 -0.48 0.99 1.47 0.01
#run main effects model
model.4 <- lmer(thk ~ prethk_MC + cc.factor + gprethk_MC + (1|school), REML = FALSE, data = schooldata.2)
summary(model.4)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk_MC + cc.factor + gprethk_MC + (1 | school)
## Data: schooldata.2
##
## AIC BIC logLik deviance df.resid
## 4712.6 4744.9 -2350.3 4700.6 1594
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.23332 -0.79567 0.02374 0.79254 2.16704
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.01734 0.1317
## Residual 1.09334 1.0456
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.38176 0.05235 45.499
## prethk_MC 0.21260 0.02138 9.944
## cc.factor1 0.43075 0.07554 5.702
## gprethk_MC 0.41835 0.11930 3.507
##
## Correlation of Fixed Effects:
## (Intr) prt_MC cc.fc1
## prethk_MC 0.000
## cc.factor1 -0.701 0.000
## gprethk_MC -0.123 -0.179 0.148
#interaction effects model
model.5.intax <- lmer(thk ~ prethk_MC + cc.factor + gprethk_MC + prethk_MC:gprethk_MC + (1|school), REML = FALSE, data = schooldata.2)
summary(model.5.intax)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: thk ~ prethk_MC + cc.factor + gprethk_MC + prethk_MC:gprethk_MC +
## (1 | school)
## Data: schooldata.2
##
## AIC BIC logLik deviance df.resid
## 4702.9 4740.5 -2344.4 4688.9 1593
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.24644 -0.81395 0.04367 0.80525 2.07026
##
## Random effects:
## Groups Name Variance Std.Dev.
## school (Intercept) 0.0165 0.1284
## Residual 1.0857 1.0420
## Number of obs: 1600, groups: school, 28
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.35901 0.05205 45.322
## prethk_MC 0.20797 0.02135 9.743
## cc.factor1 0.43001 0.07453 5.770
## gprethk_MC 0.36513 0.11890 3.071
## prethk_MC:gprethk_MC 0.22898 0.06663 3.437
##
## Correlation of Fixed Effects:
## (Intr) prt_MC cc.fc1 gpr_MC
## prethk_MC 0.008
## cc.factor1 -0.695 0.000
## gprethk_MC -0.104 -0.171 0.148
## prth_MC:_MC -0.128 -0.063 -0.003 -0.130
#chi-square diff test – include interaction effect?
anova(model.4, model.5.intax)
## Data: schooldata.2
## Models:
## model.4: thk ~ prethk_MC + cc.factor + gprethk_MC + (1 | school)
## model.5.intax: thk ~ prethk_MC + cc.factor + gprethk_MC + prethk_MC:gprethk_MC + (1 | school)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## model.4 6 4712.6 4744.9 -2350.3 4700.6
## model.5.intax 7 4702.9 4740.5 -2344.4 4688.9 11.764 1 0.000604 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#visualize moderation
interplot::interplot(model.5.intax, var1 = "gprethk_MC", var2 = "prethk_MC")
library(modelsummary)
library(broom.mixed)
models.2 <- list(model.4, model.5.intax)
modelsummary(models.2, output = "markdown")
| Model 1 | Model 2 | |
|---|---|---|
| (Intercept) | 2.382 | 2.359 |
| (0.052) | (0.052) | |
| prethk_MC | 0.213 | 0.208 |
| (0.021) | (0.021) | |
| cc.factor1 | 0.431 | 0.430 |
| (0.076) | (0.075) | |
| gprethk_MC | 0.418 | 0.365 |
| (0.119) | (0.119) | |
| prethk_MCgprethk_MC | 0.229 | |
| (0.067) | ||
| SD (Intercept school) | 0.132 | 0.128 |
| SD (Observations) | 1.046 | 1.042 |
| Num.Obs. | 1600 | 1600 |
| R2 Marg. | 0.109 | 0.115 |
| R2 Cond. | 0.123 | 0.129 |
| AIC | 4729.0 | 4722.9 |
| BIC | 4761.3 | 4760.5 |
| ICC | 0.0 | 0.0 |
| RMSE | 1.04 | 1.04 |
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.