1. 前言
這篇文檔,是爲那些想了解混合線性模型的人準備的。這裏面很多部分,可以在很多領域中使用 。我們假定大家對一些矩陣和線性迴歸的理論有所瞭解,但是更高級的知識只有模糊的認識,希望對你有所幫助。
混合線性模型,不同的學科有不同的名稱,使用不同的術語去描述同樣的東西。 這裏試圖用一種比較簡明的方法進行闡述,我希望這不會讓你更迷惑。
2. 介紹
混合模型是用於羣集數據情況的極其有用的建模工具。 擁有重複測量觀測數據的數據或以其他方式聚集觀測數據的數據(例如學校內的學生,地理區域內的城市)非常普遍。 混合模型可以以多種方式處理此類數據,但是對於剛開始使用的術語,尤其是跨學科的術語,可能有點令人生畏。
關於混合模型,您可能會遇到一些術語:
-
Variance components 方差成分
-
Random intercepts and slopes 隨機截距和斜率
-
Random effects 隨機效應
-
Random coefficients 隨機係數
-
Varying coefficients 係數變化
-
Intercepts and slopes-as-outcomes 攔截和結果傾斜
-
Hierarchical linear models 分層線性模型
-
Multilevel models 多層模型
-
Growth curve models (possibly Latent GCM) 增長曲線模型(可能是潛在的GCM)
-
Mixed effects models 混合效果模型
所有描述混合模型的名稱, 有些可能更具歷史性,有些則更多地出現在特定學科中,有些則可能引用某種數據結構(例如多級羣集),而另一些則是特殊情況。
混合效應或簡單混合模型通常是指固定效應和隨機效應的混合。 我更喜歡混合模型一詞,因爲它很簡單並且沒有暗示特定的結構。
3. 標準線性模型
首先,讓我們從標準線性模型開始,以熟悉該表示法。 爲了使事情儘可能簡單,同時又可以推廣到常見數據情況,我將假設一些感興趣的變量y和一個連續/數字協變量。
這裏:
- y 是觀測值
- alpha 是截距
- beta是X的效應值
- e 是殘差,它滿足平均數爲0,方差爲Ve的正態分佈
如果寫爲矩陣的形式:
μ = X %*% β
y = rnorm(n, μ, σ²)
在嘗試達到平衡時,我懷疑這種方法可能會在不同程度上成功或失敗,但是在符號和代碼之間(很多教科書演示中都缺少這種東西),我希望事情會很清楚。
4. 應用實例
讓我們看一些數據,開始考慮混合模型。 我將使用lme4軟件包中的sleepstudy數據。 以下描述來自相應的幫助文件。
睡眠剝奪研究對象每天的平均反應時間。 在第0天,受試者具有正常的睡眠量。 從那天晚上開始,他們每晚只能睡3個小時。 觀察結果代表每天對每個受試者進行的一系列測試的平均反應時間(以毫秒爲單位)。
讓我們使用標準的線性模型來探討持續睡眠剝奪對反應時間的影響。
這裏用線性迴歸模型,Days爲x變量,Reaction爲y變量(還有人和我一樣,對因變量和自變量摸不着頭腦的麼,用x變量和y變量更容易理解有沒有!)
# > data(sleepstudy, package='lme4')
# > slim = lm(Reaction ~ Days, data=sleepstudy)
# > summary(slim)
#
# Call:
# lm(formula = Reaction ~ Days, data = sleepstudy)
#
# Residuals:
# Min 1Q Median 3Q Max
# -110.848 -27.483 1.546 26.142 139.953
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 251.405 6.610 38.033 < 2e-16 ***
# Days 10.467 1.238 8.454 9.89e-15 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 47.71 on 178 degrees of freedom
# Multiple R-squared: 0.2865, Adjusted R-squared: 0.2825
# F-statistic: 71.46 on 1 and 178 DF, p-value: 9.894e-15
在天數爲正的情況下,我們看到更多的睡眠剝奪會導致反應時間增加/變慢。 但是讓我們繪製數據。
這告訴我們什麼? 黑線是我們當前模型的建議,即假設每個人的出發點和軌跡都相同。 但是,我們看到對象的起點可能相差100毫秒之多。 此外,雖然斜率通常爲正,但有些斜率隨時間變化很小甚至沒有變化。 換句話說,個人的截距和坡度都有明顯的變化。 我們將在最後討論這些數據。
5. 所有可能的混線性模型分析這個數據
因此,我們要考慮數據的集羣性質。 與其像上面的SLiM中那樣忽略聚類,不如考慮爲每個人運行完全獨立的迴歸。 但是,這些模型通常只需要很少的數據就可以運行,並且會被過度上下文化。 正如我們將看到的,混合模型將允許每個人的隨機截距和斜率,並在不因個人而異的情況下考慮聚類。
如何描述這個模型? 事實證明,它可以並且以多種方式顯示,具體取決於您正在查看的文本或文章。 以下內容受Gelman&Hill(2007)的啓發,他們展示了編寫混合模型的五種方法。 爲簡單起見,我們通常只關注隨機截距模型,但有時會超出該範圍。 前幾對公式僅需要了解標準迴歸模型,但其他模型描述則需要更多知識。
5.1 Mixed Model 1a: Allowing coefficients to vary across groups
在上面,c簇內的每個觀測i都有一個截距α,這取決於它所屬的c簇。αc假設爲正態分佈,平均μα和方差τ2。μα是我們在SLiM方法中看到的總截距。e是SLiM中描述的正態分佈的平均零。對於每一個模型描述,我將注意到一個主要的參考,在那裏人們可以看到它的形式與特定的文本或文章幾乎相同。它將不是唯一一個這樣做的引用,但至少它應該是一個提供一些額外視角的引用。
5.2 Mixed Model 1b: Multilevel model
5.3 Mixed Model 2: Combining separate local regressions
5.4 Mixed Model 3a: Design matrix for random component
5.5 Mixed Model 3b: Design matrix again
5.6 Mixed Model 3c: General notation
5.7 Mixed Model 4a: Regression with multiple error terms
5.8 Mixed Model 4b: Conditional vs. marginal model
5.9 Mixed Model 5b: Multivariate normal model
5.10 Mixed Model 6: Penalized regression
5.11 Mixed Model 7: Bayesian mixed model
6 模擬數據運行混合模型
這裏,設置:
Va = 0.50.5 = 0.25
Ve = 11 =1
隨機因子blup:gamma_
截距:3
固定因子blue:0.75
# setup
set.seed(1234)
nclus = 100 # number of groups
clus = factor(rep(1:nclus, each=10)) # cluster variable
n = length(clus) # total n
# parameters
sigma = 1 # residual sd
tau = .5 # re sd
gamma_ = rnorm(nclus, mean=0, sd=tau) # random effects
e = rnorm(n, mean=0, sd=sigma) # residual error
intercept = 3 # fixed effects
b1 = .75
# data
x = rnorm(n) # covariate
y = intercept + b1*x + gamma_[clus] + e # see model 1
d = data.frame(x, y, clus=clus)
head(d)
str(d)
使用lme4包運行
library(lme4)
lmeMod = lmer(y ~ x + (1|clus), data=d)
summary(lmeMod)
估算的結果可以看出:
Va = 0.224,和0.25比較接近
Ve = 0.97,和1比較接近
blue:0.799,和0.75接近
截距:2.9,和3接近
提取blup值:
asreml代碼
> library(asreml)
> mod1 = asreml(y ~ x, random = ~ clus, residual = ~ idv(units),data=d)
Model fitted using the sigma parameterization.
ASReml 4.1.0 Wed Apr 5 16:34:50 2020
LogLik Sigma2 DF wall cpu
1 -3817.282 1.0 998 16:34:50 0.0
2 -2862.495 1.0 998 16:34:50 0.0
3 -1811.528 1.0 998 16:34:50 0.0
4 -1082.178 1.0 998 16:34:50 0.0
5 -688.386 1.0 998 16:34:50 0.0
6 -572.668 1.0 998 16:34:50 0.0
7 -553.615 1.0 998 16:34:50 0.0
8 -552.690 1.0 998 16:34:50 0.0
9 -552.687 1.0 998 16:34:50 0.0
> summary(mod1)$varcomp
component std.error z.ratio bound %ch
clus 0.2247008 0.04605034 4.879461 P 0
units!units 0.9755909 0.04601438 21.201871 P 0
units!R 1.0000000 NA NA F 0
> coef(mod1)$fixed
effect
x 0.7994379
(Intercept) 2.9008683
結果是一致的
比較設定的blup值和計算的blup值的相關係數:
> cor(gamma_,coef(mod1)$random)
effect
[1,] 0.838686
7 sleepstudy數據運行混合模型
sleepMod = lmer(Reaction ~ Days + (Days|Subject), data=sleepstudy)
summary(sleepMod)
> # sleepstudy 數據
> sleepMod = lmer(Reaction ~ Days + (Days|Subject), data=sleepstudy)
> summary(sleepMod)
Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ Days + (Days | Subject)
Data: sleepstudy
REML criterion at convergence: 1743.6
Scaled residuals:
Min 1Q Median 3Q Max
-3.9536 -0.4634 0.0231 0.4633 5.1793
Random effects:
Groups Name Variance Std.Dev. Corr
Subject (Intercept) 611.90 24.737
Days 35.08 5.923 0.07
Residual 654.94 25.592
Number of obs: 180, groups: Subject, 18
Fixed effects:
Estimate Std. Error t value
(Intercept) 251.405 6.824 36.843
Days 10.467 1.546 6.771
Correlation of Fixed Effects:
(Intr)
Days -0.138
查看每個subject的效應值以及截距:
> ranef(sleepMod)
$Subject
(Intercept) Days
308 2.2575329 9.1992737
309 -40.3942719 -8.6205161
310 -38.9563542 -5.4495796
330 23.6888704 -4.8141448
331 22.2585409 -3.0696766
332 9.0387625 -0.2720535
333 16.8389833 -0.2233978
334 -7.2320462 1.0745075
335 -0.3326901 -10.7524799
337 34.8865253 8.6290208
349 -25.2080191 1.1730997
350 -13.0694180 6.6142185
351 4.5777099 -3.0152825
352 20.8614523 3.5364062
369 3.2750882 0.8722876
370 -25.6110745 4.8222518
371 0.8070591 -0.9881730
372 12.3133491 1.2842380
with conditional variances for “Subject”
如果我們對其進行作圖:
我們可以看到混合模型的好處,因爲我們會有結合了個體特定影響的預測,預測的更準確。
8 其它主題
我將簡要提及其他一些主題,但這些主題不會改變到目前爲止討論的一般方法。
- 增加分組的協變量(Cluster level covariates )
- 注意隨機因子是鑲嵌結構,還是交互結構
- 你可能注意lme4包中沒有給出p-value值,軟件不會直接給出(除非用的是貝葉斯框架),其它軟件包給出p-value,不一定說明他就是正確的。
- 隨機因子有關係矩陣?響應變量是二分類?還有很多問題需要考慮,有些數據不適合用混合模型去分析
9. 彙總
在模型描述和代碼之間,希望您對標準的混合模型框架有了很好的瞭解。 混合模型是對標準glm的非常靈活的擴展,可以直接與加性模型,空間模型和其他模型建立聯繫,因此可以將它們帶到很遠。 我可以說在lme4,mgcv和brms之間,將有很多很多方法可以以多種方式瀏覽其數據。 祝您研究順利!
10. 參考文獻
Bates, Douglas, Martin Mächler, Benjamin Bolker, and Steven Walker. 2015. “Fitting Linear Mixed-Effects Models Using Lme4.”
Fahrmeir, Ludwig, Thomas Kneib, Stefan Lang, and Brian Marx. 2013. “Regression.”
Gelman, Andrew, and Jennifer Hill. 2007. “Data Analysis Using Regression and Multilevel/Hierarchical Models.”
Gelman, Andrew, John Carlin, Hal Stern, David Dunson, Aki Vehtari, and Donald Rubin. 2013. “Bayesian Data Analysis.”
Wood, Simon. 2006. “Generalized Additive Models.”
英文原文:https://m-clark.github.io/docs/mixedModels/mixedModels.html#standard_linear_model
個人公衆號:育種數據分析之放飛自我