Fitting Regression & Null Model

Multilevel Model

Adi Cilik Pierewan

PISA Indonesia

Library & Importing Data

library(haven)
library(tidyverse)
pisa_idn <- read_csv("../dataset/pisa_idn.csv")

Select & Filter Variables

skor <- pisa_idn %>% select(ST184Q01HA, ST185Q01HA, ST185Q02HA, ST185Q03HA, ST034Q01TA,PV1MATH,PV2MATH,PV3MATH,PV4MATH,PV5MATH,
                        PV6MATH, PV7MATH, PV8MATH, PV9MATH, PV10MATH, CNTSTUID, CNTSCHID, CNTRYID) %>%
  filter(CNTSCHID == 36000271 | 
        CNTSCHID == 36000272 |
        CNTSCHID == 36000273 |
        CNTSCHID == 36000274 |
        CNTSCHID == 36000275 |
        CNTSCHID == 36000276 |
        CNTSCHID == 36000277 |
        CNTSCHID == 36000278 |
        CNTSCHID == 36000279 |
        CNTSCHID == 36000280 |
        CNTSCHID == 36000285 |
        CNTSCHID == 36000286 |
        CNTSCHID == 36000287 |
        CNTSCHID == 36000288 |
        CNTSCHID == 36000289 |
        CNTSCHID == 36000290 |
        CNTSCHID == 36000291 |
        CNTSCHID == 36000292 |
        CNTSCHID == 36000293 |
        CNTSCHID == 36000294) %>%
  mutate(math=(PV1MATH+PV2MATH+PV3MATH+PV4MATH+PV5MATH+
                 PV6MATH+PV7MATH+PV8MATH+PV9MATH+PV10MATH)/10) %>%
  mutate(growth1=recode(ST184Q01HA, "1" = "4", "2" = "3", "3" = "2", "4"="1")) %>%
  mutate(sekolah=CNTSCHID) %>%
  mutate(growth=ST184Q01HA)
  • Growth mindset dan skor matematika

  • 20 sekolah

  • 700+ siswa

Jumlah siswa per sekolah

skor <- skor %>% filter(growth != "NA")
knitr::kable(count(skor, CNTSCHID))

Ringkasan Statistik

skor %>% 
  group_by(CNTSCHID) %>% 
  summarise(mean = mean(math, na.rm = T), 
            SD = sd(math, na.rm = T), 
            miss = mean(is.na(math))) %>% 
  mutate_if(is.numeric, ~round(., 2)) %>% 
  print(n = 50)

Model Regresi

Model regresi

m <- lm(math~ 1, data = skor)
d <- coef(summary(m))
knitr::kable(d)

Garis regresi

p1 <- ggplot(data = skor, aes(x=growth, y = math, color = CNTSCHID)) + xlim(1,4) +
geom_point() +
geom_jitter() +  
geom_smooth(method="lm", se = FALSE)+
theme_bw()

print(p1)

Sebaran Skor Matematika per sekolah

skor %>% 
  ggplot(aes(math)) + 
  geom_density() +
  facet_wrap(~CNTSCHID)

Distribusi Growth Mindset per sekolah

skor %>% 
  ggplot(aes(growth)) + 
  geom_bar() +
  facet_wrap(~CNTSCHID)

Null Model

Estimasi Model Null

# load package for MLM
library(lme4)
library(sjPlot)

# empty multilevel model
m0 <- lmer(math~ 1 + (1 | CNTSCHID), data = skor)

#summary(m0)

Model Null

tab_model(m0)

Interpretasi Model Null

  • 398.31 adalah intercept atau nilai yang diharapkan (i.e. rata-rata) dari skor matematika pada semua sekolah dan siswa.

  • 4089 adalah varisi sekolayh dalam skor matematika

  • 2614 adalah individual level variation dalam skor matematika

Distribusi per sekolah

# save predicted scores
skor$m0 <- predict(m0)

# graph with predicted country level support for immigration
skor %>% 
  ggplot(aes(math, m0, color = CNTSCHID, group = CNTSCHID)) + 
  geom_smooth(se = F, method = lm) +
  geom_jitter()+
  theme_bw() +
  theme(axis.text.x = element_blank(),
        axis.ticks = element_blank()) +
  labs(x = "", y = "Skor Matematika", color = "Sekolah")

Variasi di tingkat sekolah dapat dilihat seberapa panjang garis. Jika pendek relatif sama, sedangkan jika panjang, relatif berbeda. Variasi tingkat individu adalah ringkasan perbedaan antara setiap individu dilihat jarak dari titik ke garis.

Interpretasi ICC Model Null

ICC<-4089/(4089+2614)
print(ICC)
  • 61% variasi dalam skor matematika berasal dari sekolah atau 39% disebabkan oleh karakteristik siswa.
  • jika kita memilih siswa dari sekolah yang sama, korelasi yang diharapkan dalam skor matematika adalah 0,61.

Sebaran intercept

library(lattice)
qqmath(ranef(m0, condVar = TRUE))[[1]]

Dalam grafik ini setiap titik mewakili suatu sekolah dan garis di sekitarnya adalah interval kepercayaan.