看似小小的中介,廢了我好多腦細胞,這個東西真的不簡單,從7月份有人問我,我多重中介,到現在的縱向數據中介,從一般的回歸做法,到結構方程框架下的路徑分析法,到反事實框架做法,從中介變量和因變量到是連續變量到中介變量和因變量是分類變量,很浩渺的系統知識,今天開始一點一點給大家寫。
今天就和大家一起探討縱向數據的中介效應檢驗,一般來講考慮因果關系的時間先后順序,縱向數據才是探討中介的理想數據形式:
In practice, it is strongly recommended to establish mediation with longitudinal data
但是問題也存在,就是說同一波次的中介變量和因變量可能成為縱向中介路徑上的混雜,自己會影響自己,自己又會受到中介變量和自變量的影響,這些中介和暴露又會受到前一波數據的影響,怎么說得清呢?況且做了中介我們還需要對每個路徑上的效應進行分解,感覺好難哦。
今天就寫寫這個。
隨機效應交叉滯后中介模型引出
首先明白一點,做中介用縱向數據才好,其次明白,交叉滯后是縱向面板數據的常用分析方法:
the CLPM allows time for causes to have their effects, supports stronger inference about the direction of causation in comparison to models using cross-sectional data, and reduces the probable parameter bias that arises when using cross-sectional data.
再記住,縱向數據的中介分析的做法之一就是使用交叉滯后。
但是傳統交叉滯后不考慮個體擾動,只擬合全部個體的均值,所以在特定人群中估計系數可能不准(理解方法參考混合模型),因為存在上面的問題,所以一般我們會做一個允許個體擾動的情形下縱向數據的中介模型------multilevel model (MLM):
multilevel model (MLM), which is proposed on the basis of the fact that longitudinal data are clustered in nature: The repeated measures are nested within individuals
通過多水平模型我們允許個體擾動,使得模型更符合數據層次,但是開篇就指出,在縱向數據中我們需要控制掉前一波數據的影響,和同波次數據的相互影響,所以我們把多水平模型和交叉滯后一結合,形成帶隨機效應的交叉滯后就可以啦。
傳統交叉滯后中介模型
開篇一張圖:

在做縱向中介的我們的數據最少是3波,期望檢驗的中介路徑是x1到m2到y3,當然如果你比較猛,或者你們組比較猛,你還可以多整幾波數據探討中介效應的時間效應,本文不做展開。
treatment, mediator and outcome variables should be measured at three separated and ordered time points.
有同學問兩波數據行不行?這個需要你自己考慮怎么來說服審稿人,比如你中介變量是時間不變的,那么你只要將自變量和因變量放在不同波次就行,我覺得也完全OK。
總之你自己自圓其說就完全沒問題,本來是縱向設計,好多人完全拎出來橫斷面做中介人家也能發文章:
Another 10 (14%) ignored or abused the longitudinal structure of their own data by focusing on only a single wave,averaging across waves, or treating later variables as predictors of earlier variables when testing for mediation.
如果你是3波數據,中介出來的結構路徑圖就是開篇的第一張圖。要報告的系數就是中介路徑上的a,b,c,分別代表兩個間接效應和一個直接效應。需要注意的是對間接作用的檢驗是檢驗ab的乘積,並非單單只看一條路徑,這個是很多同學不太明白的地方。
The indirect effect is denoted by ab because it is often quantified by the product of two effects: the effect of X on M (a effect) and the effect of M on Y controlling for X
傳統交叉滯后中介模型的做法實例
我的數據長這樣哈,這個數據是我們自己模擬出來的,只是為了給大家說明數據形式,其中3波次的自變量x,3波次的中介變量m,和3波次的結局y,還有兩個協變量z,只考慮人群均值而不考慮個體擾動,我們做一個交叉滯后中介模型,探討在縱向設計中m是否中介了xy的關系:

首先,我們加載相應的包並進行模型設定,代碼如下:
CLPM <- ' # 路徑系數 x2 ~ x1 m2 ~ a*x1 m2 ~ m1 y2 ~ b*m1 x3 + m3~ x2 m3+y3 ~ m2 y3~c*x1 y2~y1 y3~y2 x1+m1+y1~z1 x1+m1+y1~z2 # 相關 x1 ~~ y1 # Covariance x1 ~~ m1 m1 ~~ y1 # 方差 x1 ~~ x1 m1 ~~ m1# Variances y1 ~~ y1 x2 ~~ x2 m2 ~~ m2# Residual variances y2 ~~ y2 x3 ~~ x3 m3 ~~ m3 y3 ~~ y3 # 間接作用 (a*b) ab := a*b # 總效應 total := c + (a*b) '
可以看到為了方便報告和中介效應分解,我還設定了系數標簽,abc,和新的間接效應ab和總效應tatal,運行上面的代碼,總結后即可輸出模型結果:
基本的模型優度如下,可以看到模型擬合是很差勁的,不過數據都是模擬出來的嘛,大家主要看方法就行:

各個回歸系數如下(沒有截圖完整的)可以看到我們關心的系數abc都有標注:

當然還有間接效應和總效應的檢驗結果:

有了上面這些結果你就可以報告這就是一個部分中介模型了
另外再給大家分享一個出圖的方法,之前我做結構方程一直用的semPlot出圖,圖不好個性化定制,亂糟糟的,最近發現tidySEM才是真的好用,比如就我上面的模型,寫代碼如下:
graph_sem(model = CLPM.fit) lay <- get_layout("x1", "x2", "x3","m1","m2","m3","y1","y2", "y3",rows = 3) graph_sem(model = CLPM.fit,layout = lay)
就可以出一個整整齊齊的圖,見下圖,簡直跟發表的文獻中一模一樣哦,真好,強烈推薦給大家,之后有空出一期tidySEM的詳細教程,快快點關注哈:

隨機效應交叉滯后中介模型
關於交叉滯后和隨機效應(截距和斜率)交叉滯后的區別之前文章有給大家寫,如果要考慮個體間的變異或擾動,我們就需要給模型加上隨機效應,此時就是隨機效應交叉滯后中介模型。
為啥要考慮隨機效應呢?因為本來個體殘差異質性都是可能存在的嘛,如果我們做模型的時候不考慮,簡單的認為人都是一樣的水平,其實和你在嵌套數據中用了回歸是一回事的,此時你的統計推斷可能不准,注意是可能不准,如果你的人群確實都是一個樣,那也就無所謂,你有這個意識就行,可能不准帶來的后果就是也許你用交叉滯后回歸沒做出來陽性結果,然后你把變異分解的更好后用隨機效應交叉滯后就出來陽性結果了。
random effects will cause heteroscedasticity in the residuals. Failure to take into account this heteroscedasticity can bias the standard error estimates, leading to misleading statistical inferences.
那么具體的隨機效應交叉滯后中介模型如何做呢,其實就是在隨機效應交叉滯后加上和上面一樣的中介設定就行了,隨機效應交叉滯后的代碼在之前的文章中,這兒就不給大家寫例子啦。
小結
今天給大家寫了縱向數據的中介做法-----交叉滯后中介模型,這個模型考慮個體隨機擾動就是隨機效應交叉滯后中介模型,希望對大家有所啟發。
感謝大家耐心看完,自己的文章都寫的很細,代碼都在原文中,希望大家都可以自己做一做,請轉發本文到朋友圈后私信回復“數據鏈接”獲取所有數據和本人收集的學習資料。如果對您有用請先收藏,再點贊分享。
也歡迎大家的意見和建議,大家想了解什么統計方法都可以在文章下留言,說不定我看見了就會給你寫教程哦,另歡迎私信。