更新於 2024/10/30閱讀時間約 8 分鐘

使用R語言跑多層次模型:計算效果量

多階層模型的效果量,有多種計算方法(LaHuis et al., 2014)。主要為解釋變異量方法。解釋變異量方法是指多階層模型中,由解釋變數所解釋的變異量比例。

R2 (Approximate)

是第一種要介紹的HLM的效果量是基於添加預測變量時減少殘差變異量的程度。

通過首先估計空模型以確定殘差變異量,接下來,將預測變量添加到模型中,將加入預測變項得比較模型與空模型中的殘差變異量進行比較。此方法不適用於隨機斜率模型。此方法聚焦於層次1的解釋變異量。 R2 (Approximate)如下圖計算:

(空模型層次1殘差變異量-加入預測變項比較模型的層次1殘差變異量)/空模型層次1殘差變異量

空模型=Null, 比較模型 = Full

我們不會介紹層次2的Approximate R2,因為過去一項模擬研究認為Approximate R2不是有效的估計值,因此不推薦使用該指標(LaHuis et al., 2014)。Approximate R2一個主要優點是提供了直觀簡單方法,可以用手算就可以。但是,它們可能會產生負值。 也就是說,添加預測變量實際上可能會減少原本可以解釋的變異量,這種情況可能發生再添加層次2預測變數。因為變異量不可能有負值,這時就要把負值改成0。

R2 (S&B)

Snijders 和 Bosker (1994) 提供了替代方法來解決這個負向變異量估計的問題。它反映了整體模型解釋變異量。但實務上,它還是有可能會有負值產生(LaHuis et al., 2014)

1-(加入預測變項模型的層次1殘差變異量+加入預測變項模型的層次2殘差變異量)/(空模型層次1殘差變異量+空模型層次2殘差變異量)

空模型=Null, 比較模型 = Full

模擬研究的結果推薦使用此方法整體模型解釋變異量,並支持 Snijder 和 Bosker (1994) 建議,使用隨機截距模型而非隨機斜率模型計算解釋變異量方法(LaHuis et al., 2014)。

R語言分析使用威力強大的misty。他可以幫我們計算R2 (S&B)。先從lmer建立一個多層次比較模型,再使用multilevel.r2:

library(lme4)
library(misty)
Full_Model <- lmer(依變項 ~ 自變項 + (1 | 層次2的ID), data = 資料檔名稱)
multilevel.r2(Full_Model , print = c("SB"))


R2 (R&S)

為了想計算隨機斜率模型效果量,並不用分別取得兩個模型的殘差變異量。Rights & Sterba (2019) 發展出R2 (R&S)。該效果量資訊豐富且視覺化明瞭,是目前非常受歡迎的多層次模型效果量。可以用REML or FEML 。若要取的所有的R2 (R&S) ,需要將層次1的變項和交互作用都 cluster-mean centered。 ​

Rights & Sterba (2019)經過公式推倒,可以將R2分成5個變異量來源,加總為1:

  • f1 = 固定斜率的層次1預測變項能解釋的變異量 = fixed, within =fixed slopes (within)
  • f2 = 固定斜率的層次2預測變項能解釋的變異量 = fixed, between =fixed slopes(between)
  • v = 隨機斜率的層次1預測變項能解釋的變異量 = slope variation = slope variation (within)
  • m = 隨機截距效果能解釋的變異量 = mean variation = intercept variation (between)
  • σ2 = 層次1的殘差,未能解釋的變異量 = sigma2 = residual (within)


我自己有做小測試當作參考,測試結果如下:

  • 填加固定斜率變項*固定斜率變項交互作用會增加f1
  • 填加隨機斜率變項*固定斜率變項交互作用全部都會影響
  • 填加隨機斜率變項*隨機斜率變項交互作用導致模型不收斂...

  1. 總共變異量(total)= 1 = f1 +f2 + v+ m + σ2
  2. 層次1變異量(within) = 1 =f1 + ​v + σ2
  3. 層次2變異量 (betweem)= 1 =f2 + ​m

圖示可以看下圖左邊(白色是σ2),下圖右邊則是各種R2 的組合,R t2 (fvm)  就是總解釋變異量,R w2 (f1v) 就是層次1變異量


R語言分析使用威力強大的r2mlm。r2mlm要求資料檔只有層次的ID可以是factor,其他所有變項都是numeric,就算你沒有要用來分析

資料檔$schoolid <- as.factor(資料檔$schoolid)     ## 改成 factor  
class(資料檔$schoolid) ## 檢驗是不是真的是 factor

資料檔$變項 <- as.numeric(hsbfull$變項) ## 改成 numeric


接下來就可以計算R2 ((R&S)。先從lmer建立一個多層次比較模型,再使用r2mlm:

付費訂閱
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.