Random slopes model
Following up from practical 2, we will continue to build up our
multilevel model for school effects by adding a random slope for prior
attainment.
Task 1: Fit a random slopes model
We have theoretical reasons to believe that the effect of KS2 varies
across schools, since some schools do seem to make their pupils progress
more than others. To test this hypothesis, we fit a
random slopes model by running the following code:
m1_rs <- lmer(ks4stand ~ as.vector(scale(ks2stand))+
(1 + as.vector(scale(ks2stand))|schoolID), data = valueadded, REML = F)
# Note that KS2 have been added like this "as.vector(scale(ks2stand))". This is done to prevent a convergence error. The function "scale" rescales KS2 scores to units of standard deviation, i.e. it "standardises".
summary(m1_rs)
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula:
## ks4stand ~ as.vector(scale(ks2stand)) + (1 + as.vector(scale(ks2stand)) |
## schoolID)
## Data: valueadded
##
## AIC BIC logLik deviance df.resid
## 94083.5 94128.8 -47035.7 94071.5 14046
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -4.9474 -0.5315 0.0255 0.5764 4.5486
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## schoolID (Intercept) 8.964 2.994
## as.vector(scale(ks2stand)) 1.295 1.138 0.50
## Residual 43.160 6.570
## Number of obs: 14052, groups: schoolID, 628
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -0.11737 0.13375 -0.877
## as.vector(scale(ks2stand)) 6.42098 0.07797 82.353
##
## Correlation of Fixed Effects:
## (Intr)
## as.vct((2)) 0.282
Question
1.1. What is the correlation between the intercept and the slope?
Answer: The correlation is the second random effect
reported in the model summary. This is 0.5
1.2. What sort of pattern is it?
Answer: A positive correlation between the intercept
and the slope means there is a “fanning out” pattern. We will see this
pattern very clearly in task 3.
Task 2: Compare the fit of the random slopes model to the random
intercepts model
To compare the random intercepts models with the
random slopes model, we first run the random intercepts
model again
m1 <- lmer(ks4stand ~ ks2stand + (1|schoolID), data = valueadded, REML = F)
anova(m1, m1_rs)
## Data: valueadded
## Models:
## m1: ks4stand ~ ks2stand + (1 | schoolID)
## m1_rs: ks4stand ~ as.vector(scale(ks2stand)) + (1 + as.vector(scale(ks2stand)) | schoolID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## m1 4 94184 94215 -47088 94176
## m1_rs 6 94083 94129 -47036 94071 104.87 2 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
And then we compare using the anova function in R:
anova(m1, m1_rs)
## Data: valueadded
## Models:
## m1: ks4stand ~ ks2stand + (1 | schoolID)
## m1_rs: ks4stand ~ as.vector(scale(ks2stand)) + (1 + as.vector(scale(ks2stand)) | schoolID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## m1 4 94184 94215 -47088 94176
## m1_rs 6 94083 94129 -47036 94071 104.87 2 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Question:
2.1. Is the random slope specification a significant addition to the
model?
Answer: The results indicate that, even though more
complex (2 extra parameters), the random slopes model has a
significantly better fit than the
random intercepts model.
Task 3: Visualising results
To plot the school predicted lines, we can retrieve the fitted values
from the model m1_rs, as such:
valueadded2 <- filter(valueadded, !is.na(ks4stand) & !is.na(ks2stand)) # this filter is necessary to avoid issues with missing values
valueadded2$pred_rs<-fitted(m1_rs)
Then we can plot the predicted school results by typing:
school_plot_rs<-ggplot(valueadded2, aes(x=ks2stand, y=pred_rs, group=factor(schoolID))) +
geom_smooth(method="lm", colour="black") +
xlab("Standardised KS2 score") +
ylab("Predicted KS4 score") +
theme_bw()
school_plot_rs

Voilà! School predicted scores have varying slopes for the
relationship between KS2 and GCSE scores. You can see that pupils in
some schools make more progress than others on average and some make
less.
Question
3.1. What sort of pattern is this?
Answer: Confirming what the model reported in task
1, we clearly see a “fanning out” pattern.
Task 4: Checking assumptions
We will check the assumptions for the random intercepts
model (m1).
You can also plot the higher-level (school) residuals to check for
normality
u0 <- ranef(m1, condVar = TRUE) # These are the residuals from model "m1"
hist(u0$schoolID$`(Intercept)`) # Histogram for school residuals

qqnorm(u0$schoolID$`(Intercept)`, pch = 1, frame = FALSE) # Q-Q plot for school residuals
qqline(u0$schoolID$`(Intercept)`, col = "steelblue", lwd = 2) # Q-Q plot for school residuals

You can also plot individual-level to check for normality
valueadded2$ind_resid <- residuals(m1)
hist(valueadded2$ind_resid)

qqnorm(valueadded2$ind_resid, pch = 1, frame = FALSE)
qqline(valueadded2$ind_resid, col = "steelblue", lwd = 2)

And finally, you can plot individual-level residuals against the
predicted values:
valueadded2$pred <- fitted(m1) # retrieve predicted values from model m1
homoscedasticity <- ggplot(valueadded2, aes(y = ind_resid, x = pred)) + geom_point()
homoscedasticity

Questions
4.1. Is the normality assumption reasonable at the school level?
Answer: Residuals rarely ever look like a neat
normal distribution. The right tail of the distribution seems longer
than the left tail, which means that there may be variables that we
still need to control for.
4.2. Is the normality assumption reasonable at the pupil level?
Answer: This time, the left tail of the distribution
seems longer than the right tail, so again, that there may be variables
that we still need to control for.
4.3. Is it reasonable to assume homoscedasticity?
Answer: The variability looks uneven. The right-hand
side is narrower than the middle section. This is evidence of
heteroscedasticity, but remember that this plot is generated from the
residuals of the random intercepts model. The random slopes will suffer
less from this issue because it allows for correlation between intercept
and slope.
LS0tDQp0aXRsZTogIkludHJvIHRvIE1MTTogUHJhY3RpY2FsIDQiDQphdXRob3I6IFBhdHJpY2lvIFRyb25jb3NvIGFuZCBBbmEgTW9yYWxlcy1Hw7NtZXoNCmRhdGU6ICJKdW5lIDIwMjQiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGhpZ2hsaWdodGVyOiBudWxsDQogICAgdGhlbWU6IGNvc21vDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGZvbnRzaXplOiAxMnB0DQotLS0NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KbGlicmFyeShoYXZlbikNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQp5cGU8LXJlYWRfc2F2KCJodHRwczovL2dpdGh1Yi5jb20vQS1tb3JhL01MTV9zdW1tZXItc2Nob29sL3Jhdy9tYWluL2RhdGEvbHN5cGVfMTUwMDBfZmluYWxfMjAxMV8wNV8wNC5zYXYiKQ0KdmFsdWVhZGRlZCA8LSBzZWxlY3QoeXBlLCBwdXBpbGlkLCBzY2hvb2xJRCwgDQogICAgICAgICAgICAgICAgICAgICBrczJzdGFuZCwga3M0c3RhbmQsIGdlbmRlciwgDQogICAgICAgICAgICAgICAgICAgICBmc20pDQpgYGANCg0KIyBSYW5kb20gc2xvcGVzIG1vZGVsDQoNCkZvbGxvd2luZyB1cCBmcm9tIHByYWN0aWNhbCAyLCB3ZSB3aWxsIGNvbnRpbnVlIHRvIGJ1aWxkIHVwIG91ciBtdWx0aWxldmVsIG1vZGVsIGZvciBzY2hvb2wgZWZmZWN0cyBieSBhZGRpbmcgYSByYW5kb20gc2xvcGUgZm9yIHByaW9yIGF0dGFpbm1lbnQuDQoNCioqKg0KDQojIFRhc2sgMTogRml0IGEgcmFuZG9tIHNsb3BlcyBtb2RlbA0KDQpXZSBoYXZlIHRoZW9yZXRpY2FsIHJlYXNvbnMgdG8gYmVsaWV2ZSB0aGF0IHRoZSBlZmZlY3Qgb2YgS1MyIHZhcmllcyBhY3Jvc3Mgc2Nob29scywgc2luY2Ugc29tZSBzY2hvb2xzIGRvIHNlZW0gdG8gbWFrZSB0aGVpciBwdXBpbHMgcHJvZ3Jlc3MgbW9yZSB0aGFuIG90aGVycy4gVG8gdGVzdCB0aGlzIGh5cG90aGVzaXMsIHdlIGZpdCBhIGByYW5kb20gc2xvcGVzIG1vZGVsYCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29kZTogDQoNCmBgYHtyLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCg0KbTFfcnMgPC0gbG1lcihrczRzdGFuZCB+IGFzLnZlY3RvcihzY2FsZShrczJzdGFuZCkpKw0KICAgICAgICAgICAgICAoMSArIGFzLnZlY3RvcihzY2FsZShrczJzdGFuZCkpfHNjaG9vbElEKSwgZGF0YSA9IHZhbHVlYWRkZWQsIFJFTUwgPSBGKQ0KDQojIE5vdGUgdGhhdCBLUzIgaGF2ZSBiZWVuIGFkZGVkIGxpa2UgdGhpcyAiYXMudmVjdG9yKHNjYWxlKGtzMnN0YW5kKSkiLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBhIGNvbnZlcmdlbmNlIGVycm9yLiBUaGUgZnVuY3Rpb24gInNjYWxlIiByZXNjYWxlcyBLUzIgc2NvcmVzIHRvIHVuaXRzIG9mIHN0YW5kYXJkIGRldmlhdGlvbiwgaS5lLiBpdCAic3RhbmRhcmRpc2VzIi4NCg0Kc3VtbWFyeShtMV9ycykNCmBgYA0KDQojIyMgUXVlc3Rpb24NCg0KMS4xLiBXaGF0IGlzIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcmNlcHQgYW5kIHRoZSBzbG9wZT8NCg0KKipBbnN3ZXI6KiogVGhlIGNvcnJlbGF0aW9uIGlzIHRoZSBzZWNvbmQgcmFuZG9tIGVmZmVjdCByZXBvcnRlZCBpbiB0aGUgbW9kZWwgc3VtbWFyeS4gVGhpcyBpcyAwLjUNCg0KMS4yLiBXaGF0IHNvcnQgb2YgcGF0dGVybiBpcyBpdD8NCg0KKipBbnN3ZXI6KiogQSBwb3NpdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnRlcmNlcHQgYW5kIHRoZSBzbG9wZSBtZWFucyB0aGVyZSBpcyBhICJmYW5uaW5nIG91dCIgcGF0dGVybi4gV2Ugd2lsbCBzZWUgdGhpcyBwYXR0ZXJuIHZlcnkgY2xlYXJseSBpbiB0YXNrIDMuDQoNCioqKg0KDQojIFRhc2sgMjogQ29tcGFyZSB0aGUgZml0IG9mIHRoZSByYW5kb20gc2xvcGVzIG1vZGVsIHRvIHRoZSByYW5kb20gaW50ZXJjZXB0cyBtb2RlbA0KDQpUbyBjb21wYXJlIHRoZSBgcmFuZG9tIGludGVyY2VwdHMgbW9kZWxzYCB3aXRoIHRoZSBgcmFuZG9tIHNsb3BlcyBtb2RlbGAsIHdlIGZpcnN0IHJ1biB0aGUgcmFuZG9tIGludGVyY2VwdHMgbW9kZWwgYWdhaW4NCg0KYGBge3IsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KbTEgPC0gbG1lcihrczRzdGFuZCB+IGtzMnN0YW5kICsgKDF8c2Nob29sSUQpLCBkYXRhID0gdmFsdWVhZGRlZCwgUkVNTCA9IEYpDQphbm92YShtMSwgbTFfcnMpDQpgYGANCg0KQW5kIHRoZW4gd2UgY29tcGFyZSB1c2luZyB0aGUgYGFub3ZhYCBmdW5jdGlvbiBpbiBSOg0KDQpgYGB7ciwgd2FybmluZz1GLCBtZXNzYWdlPUZ9DQphbm92YShtMSwgbTFfcnMpDQpgYGANCg0KIyMjIFF1ZXN0aW9uOg0KDQoyLjEuIElzIHRoZSByYW5kb20gc2xvcGUgc3BlY2lmaWNhdGlvbiBhIHNpZ25pZmljYW50IGFkZGl0aW9uIHRvIHRoZSBtb2RlbD8NCg0KKipBbnN3ZXI6KiogVGhlIHJlc3VsdHMgaW5kaWNhdGUgdGhhdCwgZXZlbiB0aG91Z2ggbW9yZSBjb21wbGV4ICgyIGV4dHJhIHBhcmFtZXRlcnMpLCB0aGUgYHJhbmRvbSBzbG9wZXMgbW9kZWxgIGhhcyBhIHNpZ25pZmljYW50bHkgYmV0dGVyIGZpdCB0aGFuIHRoZSBgcmFuZG9tIGludGVyY2VwdHMgbW9kZWxgLg0KDQoqKioNCg0KIyBUYXNrIDM6IFZpc3VhbGlzaW5nIHJlc3VsdHMNCg0KVG8gcGxvdCB0aGUgc2Nob29sIHByZWRpY3RlZCBsaW5lcywgd2UgY2FuIHJldHJpZXZlIHRoZSBmaXR0ZWQgdmFsdWVzIGZyb20gdGhlIG1vZGVsIGBtMV9yc2AsIGFzIHN1Y2g6DQoNCmBgYHtyLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCnZhbHVlYWRkZWQyIDwtIGZpbHRlcih2YWx1ZWFkZGVkLCAhaXMubmEoa3M0c3RhbmQpICYgIWlzLm5hKGtzMnN0YW5kKSkgIyB0aGlzIGZpbHRlciBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaXNzdWVzIHdpdGggbWlzc2luZyB2YWx1ZXMNCg0KdmFsdWVhZGRlZDIkcHJlZF9yczwtZml0dGVkKG0xX3JzKQ0KYGBgDQoNClRoZW4gd2UgY2FuIHBsb3QgdGhlIHByZWRpY3RlZCBzY2hvb2wgcmVzdWx0cyBieSB0eXBpbmc6DQoNCmBgYHtyLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCnNjaG9vbF9wbG90X3JzPC1nZ3Bsb3QodmFsdWVhZGRlZDIsIGFlcyh4PWtzMnN0YW5kLCB5PXByZWRfcnMsIGdyb3VwPWZhY3RvcihzY2hvb2xJRCkpKSArIA0KICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIiwgY29sb3VyPSJibGFjayIpICsNCiAgeGxhYigiU3RhbmRhcmRpc2VkIEtTMiBzY29yZSIpICsNCiAgeWxhYigiUHJlZGljdGVkIEtTNCBzY29yZSIpICsNCiAgdGhlbWVfYncoKQ0KDQpzY2hvb2xfcGxvdF9ycw0KYGBgDQoNClZvaWzDoCEgU2Nob29sIHByZWRpY3RlZCBzY29yZXMgaGF2ZSB2YXJ5aW5nIHNsb3BlcyBmb3IgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEtTMiBhbmQgR0NTRSBzY29yZXMuIFlvdSBjYW4gc2VlIHRoYXQgcHVwaWxzIGluIHNvbWUgc2Nob29scyBtYWtlIG1vcmUgcHJvZ3Jlc3MgdGhhbiBvdGhlcnMgb24gYXZlcmFnZSBhbmQgc29tZSBtYWtlIGxlc3MuIA0KDQojIyMgUXVlc3Rpb24NCg0KMy4xLiBXaGF0IHNvcnQgb2YgcGF0dGVybiBpcyB0aGlzPw0KDQoqKkFuc3dlcjoqKiBDb25maXJtaW5nIHdoYXQgdGhlIG1vZGVsIHJlcG9ydGVkIGluIHRhc2sgMSwgd2UgY2xlYXJseSBzZWUgYSAiZmFubmluZyBvdXQiIHBhdHRlcm4uDQoNCjxicj4NCg0KKioqDQoNCiMgVGFzayA0OiBDaGVja2luZyBhc3N1bXB0aW9ucw0KDQpXZSB3aWxsIGNoZWNrIHRoZSBhc3N1bXB0aW9ucyBmb3IgdGhlIGByYW5kb20gaW50ZXJjZXB0c2AgbW9kZWwgKCoqbTEqKikuIA0KDQpZb3UgY2FuIGFsc28gcGxvdCB0aGUgaGlnaGVyLWxldmVsIChzY2hvb2wpIHJlc2lkdWFscyB0byBjaGVjayBmb3Igbm9ybWFsaXR5DQoNCmBgYHtyLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCnUwIDwtIHJhbmVmKG0xLCBjb25kVmFyID0gVFJVRSkgIyBUaGVzZSBhcmUgdGhlIHJlc2lkdWFscyBmcm9tIG1vZGVsICJtMSINCg0KaGlzdCh1MCRzY2hvb2xJRCRgKEludGVyY2VwdClgKSAjIEhpc3RvZ3JhbSBmb3Igc2Nob29sIHJlc2lkdWFscw0KDQpxcW5vcm0odTAkc2Nob29sSUQkYChJbnRlcmNlcHQpYCwgcGNoID0gMSwgZnJhbWUgPSBGQUxTRSkgIyBRLVEgcGxvdCBmb3Igc2Nob29sIHJlc2lkdWFscw0KcXFsaW5lKHUwJHNjaG9vbElEJGAoSW50ZXJjZXB0KWAsIGNvbCA9ICJzdGVlbGJsdWUiLCBsd2QgPSAyKSAjIFEtUSBwbG90IGZvciBzY2hvb2wgcmVzaWR1YWxzDQpgYGANCg0KWW91IGNhbiBhbHNvIHBsb3QgaW5kaXZpZHVhbC1sZXZlbCB0byBjaGVjayBmb3Igbm9ybWFsaXR5DQoNCmBgYHtyLCB3YXJuaW5nPUYsIG1lc3NhZ2U9Rn0NCg0KdmFsdWVhZGRlZDIkaW5kX3Jlc2lkIDwtIHJlc2lkdWFscyhtMSkNCg0KaGlzdCh2YWx1ZWFkZGVkMiRpbmRfcmVzaWQpDQoNCnFxbm9ybSh2YWx1ZWFkZGVkMiRpbmRfcmVzaWQsIHBjaCA9IDEsIGZyYW1lID0gRkFMU0UpDQpxcWxpbmUodmFsdWVhZGRlZDIkaW5kX3Jlc2lkLCBjb2wgPSAic3RlZWxibHVlIiwgbHdkID0gMikNCg0KYGBgDQoNCkFuZCBmaW5hbGx5LCB5b3UgY2FuIHBsb3QgaW5kaXZpZHVhbC1sZXZlbCByZXNpZHVhbHMgYWdhaW5zdCB0aGUgcHJlZGljdGVkIHZhbHVlczoNCg0KYGBge3IsIHdhcm5pbmc9RiwgbWVzc2FnZT1GfQ0KDQp2YWx1ZWFkZGVkMiRwcmVkIDwtIGZpdHRlZChtMSkgIyByZXRyaWV2ZSBwcmVkaWN0ZWQgdmFsdWVzIGZyb20gbW9kZWwgbTENCg0KaG9tb3NjZWRhc3RpY2l0eSA8LSBnZ3Bsb3QodmFsdWVhZGRlZDIsIGFlcyh5ID0gaW5kX3Jlc2lkLCB4ID0gcHJlZCkpICsgZ2VvbV9wb2ludCgpDQoNCmhvbW9zY2VkYXN0aWNpdHkNCg0KYGBgDQoNCiMjIyBRdWVzdGlvbnMNCg0KNC4xLiBJcyB0aGUgbm9ybWFsaXR5IGFzc3VtcHRpb24gcmVhc29uYWJsZSBhdCB0aGUgc2Nob29sIGxldmVsPw0KDQoqKkFuc3dlcjoqKiBSZXNpZHVhbHMgcmFyZWx5IGV2ZXIgbG9vayBsaWtlIGEgbmVhdCBub3JtYWwgZGlzdHJpYnV0aW9uLiBUaGUgcmlnaHQgdGFpbCBvZiB0aGUgZGlzdHJpYnV0aW9uIHNlZW1zIGxvbmdlciB0aGFuIHRoZSBsZWZ0IHRhaWwsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgbWF5IGJlIHZhcmlhYmxlcyB0aGF0IHdlIHN0aWxsIG5lZWQgdG8gY29udHJvbCBmb3IuICANCg0KNC4yLiBJcyB0aGUgbm9ybWFsaXR5IGFzc3VtcHRpb24gcmVhc29uYWJsZSBhdCB0aGUgcHVwaWwgbGV2ZWw/DQoNCioqQW5zd2VyOioqIFRoaXMgdGltZSwgdGhlIGxlZnQgdGFpbCBvZiB0aGUgZGlzdHJpYnV0aW9uIHNlZW1zIGxvbmdlciB0aGFuIHRoZSByaWdodCB0YWlsLCBzbyBhZ2FpbiwgdGhhdCB0aGVyZSBtYXkgYmUgdmFyaWFibGVzIHRoYXQgd2Ugc3RpbGwgbmVlZCB0byBjb250cm9sIGZvci4NCg0KNC4zLiBJcyBpdCByZWFzb25hYmxlIHRvIGFzc3VtZSBob21vc2NlZGFzdGljaXR5Pw0KDQoqKkFuc3dlcjoqKiBUaGUgdmFyaWFiaWxpdHkgbG9va3MgdW5ldmVuLiBUaGUgcmlnaHQtaGFuZCBzaWRlIGlzIG5hcnJvd2VyIHRoYW4gdGhlIG1pZGRsZSBzZWN0aW9uLiBUaGlzIGlzIGV2aWRlbmNlIG9mIGhldGVyb3NjZWRhc3RpY2l0eSwgYnV0IHJlbWVtYmVyIHRoYXQgdGhpcyBwbG90IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXNpZHVhbHMgb2YgdGhlIHJhbmRvbSBpbnRlcmNlcHRzIG1vZGVsLiBUaGUgcmFuZG9tIHNsb3BlcyB3aWxsIHN1ZmZlciBsZXNzIGZyb20gdGhpcyBpc3N1ZSBiZWNhdXNlIGl0IGFsbG93cyBmb3IgY29ycmVsYXRpb24gYmV0d2VlbiBpbnRlcmNlcHQgYW5kIHNsb3BlLiANCg0K