使用R語言跑多層次模型:類別調節變項交互作用圖一文當中,已經說明如對類別交互作用變項進行分析,但在使用R跑多層次模型時,有時候會遇到連續調節變項,這時候分析方法會有所差異,本文在介紹遇到連續調節變項時,如何進行簡單斜率分析,以及如何畫交互作用圖,最後再說如何使用Johnson-Neyman法。
library(lme4)
library(lmerTest)
library(ggplot2)
library(interactions)
library(haven)
hsbfull<- read_sav("hsbfull with meanses and sesdev.sav")
mathach ~ 1 + sesdev + meanses + sesdev * meanses + (1 + sesdev | schoolid)
mathach
是數學成績的依變量。sesdev
是家庭社會經濟地位的自變量。meanses
是學校平均家庭社會經濟地位的自變量。sesdev * meanses
是家庭社會經濟地位和學校平均家庭社會經濟地位的交互作用項。(1 + sesdev | schoolid)
是學校層級的隨機截距和隨機斜率。輸出結果:
REML criterion at convergence: 46557.3
Scaled residuals:
Min 1Q Median 3Q Max
-3.1898 -0.7267 0.0158 0.7547 2.9205
Random effects:
Groups Name Variance Std.Dev. Corr
schoolid (Intercept) 2.6932 1.6411
sesdev 0.6804 0.8249 -0.19
Residual 36.7159 6.0594
Number of obs: 7185, groups: schoolid, 160
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 12.6806 0.1492 153.6986 84.966 <2e-16 ***
sesdev 2.1978 0.1281 154.8150 17.157 <2e-16 ***
meanses 5.8688 0.3614 153.4153 16.240 <2e-16 ***
sesdev:meanses 0.2854 0.3188 168.8930 0.895 0.372
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
sesdev
的估計係數為2.1978,p 值小於 0.001。這意味著,家庭社會經濟地位每增加一個單位,學生數學成績平均會增加 2.8028 分。meanses
的估計係數為 5.8688,p 值小於 0.001。sesdev:meanses
的估計係數為 0.2854,p為0.372,並非小於.05,代表交互作用不顯著。實際中,交互作用不顯著就不需要進行下一步分析,但這裡為了教學演練,還是繼續做簡單斜率分析,以及如何畫交互作用圖。sim_slopes(CroLev2, pred = sesdev, modx = meanses, cond.int = TRUE,
centered="none", johnson_neyman = FALSE)
data
:剛跑的模型。pred
:自變量。這裡假設是sesdevmodx
:調節變量。這裡假設是meanses,對於連續變量,會自動挑出的三个值:平均值低出 1 個標準差(- 1 SD)/平均值(Mean)/平均值高出 1 個標準差(+ 1 SD)。這三個值可能代表了調節變量的低、中、高三個水平。幫助我們了解自變量對依變量的影響在不同水平下是否存在差異SIMPLE SLOPES ANALYSIS 輸出結果:
When meanses = -0.4133998124 (- 1 SD):
Est. S.E. t val. p
--------------------------- ------ ------ -------- ------
Slope of sesdev 2.52 0.17 14.97 0.00
Conditional intercept 9.92 0.22 45.55 0.00
When meanses = 0.0001433542 (Mean):
Est. S.E. t val. p
--------------------------- ------- ------ -------- ------
Slope of sesdev 2.95 0.16 18.93 0.00
Conditional intercept 12.13 0.20 60.86 0.00
When meanses = 0.4136865208 (+ 1 SD):
Est. S.E. t val. p
--------------------------- ------- ------ -------- ------
Slope of sesdev 3.37 0.23 14.98 0.00
Conditional intercept 14.33 0.28 51.13 0.00
Est.
:估計值S.E.
:標準誤差t val.
:t 值p
:p 值語法解釋:
平均值-1 個標準差
(meansas = -0.4133),平均值
(meansas = 0.000),和平均值+1 個標準差
(meansas = 0.413)。interact_plot(CroLev2, pred = sesdev, modx = meanses,
x.label = "SES", y.label = "Math Achievement",
legend.main = "School MEAN SES")
CroLev1
:剛跑的模型。pred
:自變量。modx
:調節變量。x.label
:x 軸標籤。y.label
:y 軸標籤。legend.main
:圖例標題。對於連續變項而言,之前方法是先訂出平均值-1 個標準差/平均值/平均值+1 個標準差三個水平,但此標準其實是根據專家建議而已,並沒有數據支持。Johnson-Neyman法可以實際從分析數據中,找出特定關鍵數值。理解Johnson-Neyman法給出的值的含義很重要,但通常不容易直觀地理解。對於自變量和調節變量的交互作用,預測變量的斜率通常只在調節變量的某些值下具有統計學意義。以下為Johnson-Neyman法的視覺化語法:
johnson_neyman(CroLev2,
pred = sesdev,
modx = meanses, alpha = .05)
參數說明:
CroLev1
:剛跑的模型。pred
:自變量。modx
:調節變量。alpha
:設定顯著水準門檻。輸出結果如下:
#> JOHNSON-NEYMAN INTERVAL
#>
#> When meanses is OUTSIDE the interval [0.80, 2.67], the slope of
#> sesdev is p < .05.
#>
#> Note: The range of observed values of Illiteracy is [0.50, 2.80]
#>