Eğitim öğretim olarak 9.haftadanın ödevi bu ama bir hafta dersimiz iptal olmuştu. Bir hafta da vize sınavı olduk ama ben takip edebilmek için işlenen derslere hafta sayıyorum.
Normal regresyonda her gözlem birbirinden bağımsız diye varsayarız ama gerçek hayatta veriler iç içe geçmiş (yuvalanmış) yapıdadır. Öğrenciler sınıfların içinde, sınıflar okulların içinde. Aynı sınıftaki çocuklar birbirine benzer çünkü aynı öğretmeni dinliyorlar, aynı ortamı paylaşıyorlar. İşte bu benzerlik yüzünden normal regresyon bozuluyor aslında.
HLM = bu iç içe geçmişliği hesaba katan regresyondur
Yanlışlıkla normal regresyon yaparsak ne olur?
Düzey 1 (L1) = en alt birim. Öğrenci, hasta, ölçüm zamanı.
Düzey 2 (L2) = gruplama birimi. Okul, klinik, birey (boylamsal veride).
Yani: öğrenciler okulların içinde.
İndeksleme: Y_ij = j. okuldaki i. öğrencinin puanı.
İki tip yuvalanma var:
ICC (Sınıfiçi Korelasyon Katsayısı) = toplam varyansın yüzde kaçı gruplar arasından geliyor?
Formül: ρ = τ₀₀ / (τ₀₀ + σ²)
ÖRNEK::: ICC = .36 diyorsa → varyansın %36’sı okullar arasından, %64’ü öğrenciler arasından. Yani ICC aslında birey değil küme etkisini söyler yani aynı okuldan rastgele iki öğrenci seçersem, puanları arasındaki beklenen korelasyon .36.
ICC küçükse HLM’ye gerek olabilir çünkü DEFF = 1 + (n̄ - 1) × ρ. ICC = .01 bile olsa küme büyüklüğü 200 ise DEFF = 2.99 → standart hatalar 3 kat büyütüldü gibi bişi oluyor
Küçük örneklemli gruplarda OLS çok dağınık tahmin verir. HLM bu grupların tahminlerini genel ortalamaya doğru çeker (shrinkage). Verisi az olan gruplar daha çok çekilir, verisi çok olanlar daha az. Buna partial pooling deniyor.
Model 0 (Boş model): Yordayıcı yok, sadece varyansı bölüyorsun. ICC çıkar.
Model 1 (Rastgele katsayı): L1’e yordayıcı ekle, hem kesişim hem eğim rastgele.
Model 2 (Tam model): L2’ye yordayıcı ekle. Çapraz düzey etkileşim (γ₁₁)
SES = 0 diye bir şey yok. Merkezleme yapılmazsa kesişimin hiçbir anlamı yok.
NOT:::: Çapraz düzey etkileşim varsa → CWC + grup ortalamasını L2’ye ekle. CGM kullanırsan within ve between karışır.
NOT::::: ML ile karşılaştırmada kullanılıe → nihai modeli REML ile raporlanır
İleride boylamsal veri ile yapmak istediğim çalışmalar için tekrarlı ölçüm olan bu veri seti önerisi youtube’dan alınmıştır.
lme4 paketinin kendi sleepstudy verisini kullanacağım. 18 kişi 10 gün uyku kısıtlaması deneyine katılmış. Her gün reaksiyon süreleri ölçülmüş. tekrarlı ölçümler (L1 = gün) bireyler (L2 = kişi) içinde yuvalanmış.
library(lme4)
library(lmerTest)
library(dplyr)
library(ggplot2)
library(knitr)
library(performance)
data(sleepstudy)
head(sleepstudy)## Reaction Days Subject
## 1 250 0 308
## 2 259 1 308
## 3 251 2 308
## 4 321 3 308
## 5 357 4 308
## 6 415 5 308
## 'data.frame': 180 obs. of 3 variables:
## $ Reaction: num 250 259 251 321 357 ...
## $ Days : num 0 1 2 3 4 5 6 7 8 9 ...
## $ Subject : Factor w/ 18 levels "308","309","310",..: 1 1 1 1 1 1 1 1 1 1 ...
r length(unique(sleepstudy$Subject)) katılımcı, toplam r nrow(sleepstudy) gözlem. Her katılımcıdan 10 gün ölçüm alınmış
sleepstudy %>%
group_by(Subject) %>%
summarise(n = n(),
ort_rt = round(mean(Reaction), 1),
sd_rt = round(sd(Reaction), 1)) %>%
head(10) %>%
kable()| Subject | n | ort_rt | sd_rt |
|---|---|---|---|
| 308 | 10 | 342 | 79.8 |
| 309 | 10 | 215 | 10.8 |
| 310 | 10 | 231 | 21.9 |
| 330 | 10 | 303 | 22.9 |
| 331 | 10 | 309 | 27.2 |
| 332 | 10 | 307 | 64.3 |
| 333 | 10 | 316 | 30.1 |
| 334 | 10 | 295 | 41.9 |
| 335 | 10 | 250 | 13.8 |
| 337 | 10 | 376 | 59.6 |
ggplot(sleepstudy, aes(x = Days, y = Reaction)) +
geom_line(alpha = 0.6) +
geom_point(size = 1.5, alpha = 0.6) +
facet_wrap(~ Subject, ncol = 6) +
theme_minimal() +
labs(x = "Gün", y = "Reaksiyon süresi")Bazıları hızlı kötüleşiyor, bazıları stabil. Başlangıç düzeyleri de farklı. hem kesişim hem eğim kişiden kişiye değişiyor.
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Reaction ~ 1 + (1 | Subject)
## Data: sleepstudy
##
## REML criterion at convergence: 1904
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.498 -0.550 -0.148 0.512 3.345
##
## Random effects:
## Groups Name Variance Std.Dev.
## Subject (Intercept) 1278 35.8
## Residual 1959 44.3
## Number of obs: 180, groups: Subject, 18
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 298.51 9.05 17.00 33 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
vc <- as.data.frame(VarCorr(m0))
tau00 <- vc$vcov[1]
sigma2 <- vc$vcov[2]
icc_val <- tau00 / (tau00 + sigma2)
cat("τ₀₀", round(tau00, 2), "\n")## τ₀₀ 1278
## σ² 1959
## ICC 0.395
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Reaction ~ Days + (1 + Days | Subject)
## Data: sleepstudy
##
## REML criterion at convergence: 1744
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.954 -0.463 0.023 0.463 5.179
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Subject (Intercept) 612.1 24.74
## Days 35.1 5.92 0.07
## Residual 654.9 25.59
## Number of obs: 180, groups: Subject, 18
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 251.41 6.82 17.00 36.84 < 2e-16 ***
## Days 10.47 1.55 17.00 6.77 3.3e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## Days -0.138
sigma2_m1 <- sigma(m1)^2
R2_L1 <- (sigma2 - sigma2_m1) / sigma2
cat("σ²boş", round(sigma2, 2), "\n")## σ²boş 1959
## σ² modle 655
## L1 Pseudo 0.666
## Data: sleepstudy
## Models:
## m0: Reaction ~ 1 + (1 | Subject)
## m1: Reaction ~ Days + (1 + Days | Subject)
## npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
## m0 3 1917 1926 -955 1911
## m1 6 1764 1783 -876 1752 159 3 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
re <- ranef(m1)$Subject
re$Subject <- rownames(re)
names(re)[1:2] <- c("u0_kesisim", "u1_egim")
ggplot(re, aes(x = u0_kesisim, y = u1_egim)) +
geom_point(size = 3, color = "blue") +
geom_hline(yintercept = 0, linetype = "dashed", color = "pink") +
geom_vline(xintercept = 0, linetype = "dashed", color = "pink") +
theme_minimal() +
labs(title = "Her kişinin genel ortalamadan sapması",
subtitle = "Sağ üst = başlangıçta yavaş + hızlı kötüleşen,Sol alt = başlangıçta hızlı + stabil",
x = "Kesişim sapması başlangıç düzeyi farkı",
y = "Eğim sapması kötüleşme hızı farkı")HLM ne kadar önemli bir konuymuş. Boylamsal veriler, tekrarşlı ölçümler, gurpların iç içeliği gibi çok önemli ve mevcut durumlarda tercih edilmesigerekiyormuş. HLM aslında her grup için ayrı regresyon yap ama sonra hepsini akıllıca birleştir demek aslında ama düz birleştirme değil verisi az olan grupların tahminlerini genel ortalamaya doğru çekerek (shrinkage) dağınıklığı (dağılımı, saçılımı …) azaltıyor. ICC’nin küçük olmasının HLM’yi gereksiz kılmadığını öğrendiğimde şaşırdım çünkü yl da bu şekilde ezber bilgi gibi klavramıştım. Dizayn etkisi formülü bunu çok net gösteriyor: ICC = .01, küme = 200 → DEFF = 3. Yani veride yuvalanma varsa, ICC ne olursa olsun HLM düşünülmeli. sleepstudy ile çalışmak güzeldi çünkü bireysel eğrileri görünce evet, herkesin eğimi farklı diye hemen anlaşılıyor. Derste popular2 bağlamsal modeldi (öğrenci-sınıf), sleepstudy büyüme modeli (ölçüm-birey). İki yapıyı da görmüş oldum. İkincisini bireysel görmek daha kolay oldu neden hlm gerektiğini anlamak. Merkezleme konusu hala tam oturmadı kafamda diğer konularda da kullandığımızda tam anlayamamıştım. Ne zaman CWC ne zaman CGM? Yine de çoklu regresyon-aralıcık-düzenleyicilik konularına göre LR>MLR>HLM gibi zorluk sıralaması yapabilirim. Buradaki yorumlanacak persudo değerlerini daha önce gördüğümüz için daha kolay çıktıları yorumlayabildim ve yegane anladığım şey veri setimizi çok iyi tanımalıyız ve doğru analizi seçmemiz gerekiyormuş.