UPDATE: 2022-11-16 21:55:29
縦断データの分析I―変化についてのマルチレベルモデリング―を利用してマルチレベルモデリングの勉強内容をまとめたもの。下記のサポートサイトにサンプルデータなどが保存されている。
分析内容は、前回に引き続き、青年期のアルコール摂取量の変化に関する分析。縦断データの分析I―変化についてのマルチレベルモデリング―のp75に詳細は書いてあるとおり、青年期のアルコール摂取量の変化に関する分析をここでもお借りする。82人(n
)を対象に14歳,15歳,16歳の3回(age
)の計測タイミングがある。alcuse
はアルコール摂取に関する頻度の合成スコアで、予測変数として、友達の飲酒割合に関するpeer
と親がアルコール依存症かを表すcoa
が用意されている。
この分析の目的は、親がアルコール依存症であったり、自分の周囲の友だちが飲酒していれば、自分のアルコール摂取量も14歳,15歳,16歳の時間経過とともに、アルコール摂取量が増加していくのではないか、という仮説を検証すること。
library(tidyverse)
library(nlme)
library(DT)
<- read.table("https://stats.idre.ucla.edu/stat/r/examples/alda/data/alcohol1_pp.txt", header=T, sep=",")
alcohol1 <- alcohol1 %>% mutate(
alcohol1 mean_peer = mean(peer),
flg_peer = ifelse(peer < mean_peer, "low peer", "high peer"),
flg_peer = factor(flg_peer, levels = c("low peer", "high peer"))
)#Model A B
<- lme(alcuse ~ 1, alcohol1, random = ~1 |id, method = "ML")
model.a <- lme(alcuse ~ age_14 , data = alcohol1, random= ~ age_14 | id, method = "ML")
model.b
datatable(alcohol1 %>% mutate_if(is.numeric, round, digit = 2))
この分析の主たる目的は、親のアルコール依存症(COA
)の影響であり、周囲の飲酒環境(PEER
)は統制変数である。このモデルは初期値と変化率の予測変数として、親のアルコール依存症(COA
)が含まれているモデル。
\[ \begin{eqnarray} Y_{ij} &=& \pi_{0i} + \pi_{1i} TIME_{ij} + \epsilon_{ij} \\ \pi_{0i} &=& \gamma_{00} + \gamma_{01} COA_{i} + \zeta_{0i} \\ \pi_{1i} &=& \gamma_{10} + \gamma_{11} COA_{i} + \zeta_{1i} \\ \\ Y_{ij} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{10} TIME_{ij} + \gamma_{11} COA_{i} × TIME_{ij} + (\epsilon_{ij} + \zeta_{0i} + \zeta_{1i} × TIME_{ij}) \end{eqnarray} \]
<- lme(
model.c fixed = alcuse ~ coa*age_14,
random = ~ age_14 | id,
data = alcohol1,
method = "ML")
summary(model.c)
## Linear mixed-effects model fit by maximum likelihood
## Data: alcohol1
## AIC BIC logLik
## 637.2026 665.2453 -310.6013
##
## Random effects:
## Formula: ~age_14 | id
## Structure: General positive-definite, Log-Cholesky parametrization
## StdDev Corr
## (Intercept) 0.6982690 (Intr)
## age_14 0.3880684 -0.219
## Residual 0.5807688
##
## Fixed effects: alcuse ~ coa * age_14
## Value Std.Error DF t-value p-value
## (Intercept) 0.3159517 0.13177099 162 2.397734 0.0176
## coa 0.7432120 0.19616697 80 3.788671 0.0003
## age_14 0.2929552 0.08492089 162 3.449742 0.0007
## coa:age_14 -0.0494299 0.12642140 162 -0.390993 0.6963
## Correlation:
## (Intr) coa age_14
## coa -0.672
## age_14 -0.460 0.309
## coa:age_14 0.309 -0.460 -0.672
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.5480534 -0.3879877 -0.1057547 0.3602391 2.3960739
##
## Number of Observations: 246
## Number of Groups: 82
モデルCからわかることは、親がアルコール依存症の個人は、そうではない個人よりも初期値は高いが、経年変化率については差がない、と解釈できる。また、\(\hat{\sigma}_{0}^{2}\)は前回のモデルBと比較して21%減少している。つまり、COA
は有効な変数であったことがわかる。
list(
modelB = VarCorr(model.b),
modelC = VarCorr(model.c)
)
## $modelB
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.6243558 0.7901619 (Intr)
## age_14 0.1512021 0.3888472 -0.223
## Residual 0.3372926 0.5807690
##
## $modelC
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.4875797 0.6982690 (Intr)
## age_14 0.1505971 0.3880684 -0.219
## Residual 0.3372924 0.5807688
このモデルは初期値と変化率の予測変数として、親のアルコール依存症(COA
)と周囲の飲酒環境(PEER
)が含まれているモデル。つまり、初期値と変化率へのCOA
の影響を推定するものの、PEER
で統制されているCOA
の影響を推定している。
\[ \begin{eqnarray} Y_{ij} &=& \pi_{0i} + \pi_{1i} TIME_{ij} + \epsilon_{ij} \\ \pi_{0i} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \zeta_{0i} \\ \pi_{1i} &=& \gamma_{10} + \gamma_{11} COA_{i} + \gamma_{12} PEER_{i} + \zeta_{1i} \\ \\ Y_{ij} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \gamma_{10} TIME_{ij} + \gamma_{11} COA_{i} × TIME_{ij} + \gamma_{12} PEER_{i} × TIME_{ij} + (\epsilon_{ij} + \zeta_{0i} + \zeta_{1i} × TIME_{ij}) \end{eqnarray} \]
<- lme(
model.d fixed = alcuse ~ coa * age_14 + peer * age_14,
random = ~ age_14 | id,
data = alcohol1,
method = "ML")
summary(model.d)
## Linear mixed-effects model fit by maximum likelihood
## Data: alcohol1
## AIC BIC logLik
## 608.6906 643.744 -294.3453
##
## Random effects:
## Formula: ~age_14 | id
## Structure: General positive-definite, Log-Cholesky parametrization
## StdDev Corr
## (Intercept) 0.4908199 (Intr)
## age_14 0.3729816 -0.033
## Residual 0.5807670
##
## Fixed effects: alcuse ~ coa * age_14 + peer * age_14
## Value Std.Error DF t-value p-value
## (Intercept) -0.3165142 0.14990060 161 -2.111494 0.0363
## coa 0.5791651 0.16450410 79 3.520673 0.0007
## age_14 0.4294286 0.11510206 161 3.730851 0.0003
## peer 0.6942956 0.11291813 79 6.148664 0.0000
## coa:age_14 -0.0140319 0.12631544 161 -0.111086 0.9117
## age_14:peer -0.1498150 0.08670485 161 -1.727873 0.0859
## Correlation:
## (Intr) coa age_14 peer c:g_14
## coa -0.371
## age_14 -0.436 0.162
## peer -0.686 -0.162 0.299
## coa:age_14 0.162 -0.436 -0.371 0.071
## age_14:peer 0.299 0.071 -0.686 -0.436 -0.162
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.59554954 -0.40004985 -0.07769103 0.46002869 2.29373877
##
## Number of Observations: 246
## Number of Groups: 82
パラメタの係数解釈が少し複雑なので注意が必要。\(\hat{\gamma}_{00}\)、\(\hat{\gamma}_{10}\)は、親がアルコール依存症ではない個人の初期値と変化率ではなく、親がアルコール依存症ではない個人の一部、PEER
の値も0の子どもの初期値と変化率。つまり、COA=0,PEER=0
のときの初期値と変化率が\(\hat{\gamma}_{00}\)、\(\hat{\gamma}_{10}\)となる。\(\hat{\gamma}_{01}\)、\(\hat{\gamma}_{11}\)は、PEER
で統制した後のCOR
の影響と解釈できる。
COA=0,PEER=0
のときの初期値は負になることから、親がアルコール依存症ではなく、周囲の友人がアルコールを摂取しない個人は0ではない量のアルコールを摂取している、とは解釈できなくないが、alcuse
は0以下を取らないので解釈には注意が必要。
モデルDは、PEER
の効果を統制した上で、親がアルコール依存症ではない個人とそうではない個人の初期値の推定された差は0.579で、親がアルコール依存症ではない個人とそうではない個人の変化率の差は0(-0.014)かもしれない、と解釈できる。残差に関しても、\(\hat{\sigma}_{0}^{2}\)、\(\hat{\sigma}_{1}^{2}\)の両方が減少しており、PEER
が有効な変数であることがわかる。
list(
modelC = VarCorr(model.c),
modelD = VarCorr(model.d)
)
## $modelC
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.4875797 0.6982690 (Intr)
## age_14 0.1505971 0.3880684 -0.219
## Residual 0.3372924 0.5807688
##
## $modelD
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.2409042 0.4908199 (Intr)
## age_14 0.1391153 0.3729816 -0.033
## Residual 0.3372903 0.5807670
このモデルは初期値と変化率の予測変数として、親のアルコール依存症(COA
)と周囲の飲酒環境(PEER
)が含まれているモデル。ただ、初期値にはPEER
とCOA
が含まれる一方で、変化率にはPEER
のみでCOA
は含まれていない。
\[ \begin{eqnarray} Y_{ij} &=& \pi_{0i} + \pi_{1i} TIME_{ij} + \epsilon_{ij} \\ \pi_{0i} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \zeta_{0i} \\ \pi_{1i} &=& \gamma_{10} + \gamma_{12} PEER_{i} + \zeta_{1i} \\ \\ Y_{ij} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \gamma_{10} TIME_{ij} + \gamma_{12} PEER_{i} × TIME_{ij} + (\epsilon_{ij} + \zeta_{0i} + \zeta_{1i} × TIME_{ij}) \end{eqnarray} \]
<- lme(
model.e fixed = alcuse ~ coa + peer * age_14,
random = ~ age_14 | id,
data = alcohol1,
method = "ML")
summary(model.e)
## Linear mixed-effects model fit by maximum likelihood
## Data: alcohol1
## AIC BIC logLik
## 606.7033 638.2513 -294.3516
##
## Random effects:
## Formula: ~age_14 | id
## Structure: General positive-definite, Log-Cholesky parametrization
## StdDev Corr
## (Intercept) 0.4908386 (Intr)
## age_14 0.3730384 -0.034
## Residual 0.5807690
##
## Fixed effects: alcuse ~ coa + peer * age_14
## Value Std.Error DF t-value p-value
## (Intercept) -0.3138215 0.14762318 162 -2.125828 0.0350
## coa 0.5711970 0.14773607 79 3.866334 0.0002
## peer 0.6951827 0.11240366 79 6.184698 0.0000
## age_14 0.4246867 0.10667949 162 3.980959 0.0001
## peer:age_14 -0.1513771 0.08538525 162 -1.772872 0.0781
## Correlation:
## (Intr) coa peer age_14
## coa -0.338
## peer -0.709 -0.146
## age_14 -0.410 0.000 0.351
## peer:age_14 0.334 0.000 -0.431 -0.814
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.59554431 -0.40414085 -0.08351916 0.45549511 2.29975165
##
## Number of Observations: 246
## Number of Groups: 82
PEER
の影響を統制したCOA
、つまり、親がアルコール依存症ではない個人とそうではない個人の初期値は0.57で、COA
の影響を統制したPEER
の1ポイントの差は0.695高くなる。平均的な変化率は-0.151低くなる。
モデルEは、PEER
の効果を統制した上で、親がアルコール依存症の個人は、そうではない個人よりも初期値が高いが、経年変化率については差がない、と解釈できる。残差に関しても、\(\hat{\sigma}_{0}^{2}, \hat{\sigma}_{1}^{2},
\hat{\sigma}_{\epsilon}^{2}\)は、あまり変化しておらず、変化率に対するCOA
はあってもなくても同じということがわかる。
list(
modelD = VarCorr(model.d),
modelE = VarCorr(model.e)
)
## $modelD
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.2409042 0.4908199 (Intr)
## age_14 0.1391153 0.3729816 -0.033
## Residual 0.3372903 0.5807670
##
## $modelE
## id = pdLogChol(age_14)
## Variance StdDev Corr
## (Intercept) 0.2409226 0.4908386 (Intr)
## age_14 0.1391576 0.3730384 -0.034
## Residual 0.3372926 0.5807690
Dependent variable: | |||||||
alcuse | |||||||
A | B | C | D | E | F_c | G_c | |
Intercept(\(\pi_{0i},\gamma_{00}\)) | 0.922*** | 0.651*** | 0.316** | -0.317** | -0.314** | 0.394*** | 0.651*** |
(0.096) | (0.106) | (0.132) | (0.150) | (0.148) | (0.105) | (0.081) | |
coa(\(\pi_{0i},\gamma_{01}\)) | 0.743*** | 0.579*** | 0.571*** | 0.571*** | 0.571*** | ||
(0.196) | (0.165) | (0.148) | (0.148) | (0.148) | |||
peer(\(\pi_{0i},\gamma_{02}\)) | 0.694*** | 0.695*** | 0.695*** | 0.695*** | |||
(0.113) | (0.112) | (0.112) | (0.112) | ||||
age_14(\(\pi_{1i},\gamma_{10}\)) | 0.271*** | 0.293*** | 0.429*** | 0.425*** | 0.271*** | 0.271*** | |
(0.063) | (0.085) | (0.115) | (0.107) | (0.062) | (0.062) | ||
coa:age_14(\(\pi_{1i},\gamma_{11}\)) | -0.049 | -0.014 | |||||
(0.126) | (0.126) | ||||||
peer:age_14(\(\pi_{1i},\gamma_{12}\)) | -0.150* | -0.151* | -0.151* | -0.151* | |||
(0.087) | (0.085) | (0.085) | (0.085) | ||||
Observations | 246 | 246 | 246 | 246 | 246 | 246 | 246 |
Log Likelihood | -335 | -318 | -310 | -294 | -294 | -294 | -294 |
Akaike Inf. Crit. | 676 | 648 | 637 | 608 | 606 | 606 | 606 |
Bayesian Inf. Crit. | 686 | 669 | 665 | 643 | 638 | 638 | 638 |
Note: | p<0.1; p<0.05; p<0.01 |
書籍に従って、モデルCを可視化しておく。前回のノートに可視化の方法をまとめているので細かい話はそちらを参照のこと。このモデルは、親がアルコール依存症でない平均的な個人は、初期値が0.316、変化率が0.293の変化の軌跡を持ち、親がアルコール依存症の平均的な個人は、初期値が1.059、変化率が0.244の変化の軌跡を持つ。
\[ \begin{eqnarray} Y_{ij} &=& \pi_{0i} + \pi_{1i} TIME_{ij} + \epsilon_{ij} \\ \pi_{0i} &=& \gamma_{00} + \gamma_{01} COA_{i} + \zeta_{0i} \\ \pi_{1i} &=& \gamma_{10} + \gamma_{11} COA_{i} + \zeta_{1i} \\ \\ Y_{ij} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{10} TIME_{ij} + \gamma_{11} COA_{i} × TIME_{ij} + (\epsilon_{ij} + \zeta_{0i} + \zeta_{1i} × TIME_{ij}) \\ &=& 0.315 + 0.743 COA_{i} + 0.292 TIME_{ij} -0.049 COA_{i} × TIME_{ij} \end{eqnarray} \]
初期値の高さに違いはあるものの、変化率に関してはあまり差はない。
<- fixef(model.c)
fixef.c <-
df_fit_plt_c expand_grid(age_14 = 0:2, coa = 0:1) %>%
arrange(coa) %>%
mutate(alcuse =
1]] +
fixef.c[[2]] * coa +
fixef.c[[3]] * age_14 +
fixef.c[[4]] * age_14 * coa
fixef.c[[
)
ggplot(df_fit_plt_c, aes(age_14, alcuse, col = as.character(coa))) +
geom_path(size = 1) +
geom_text(aes(y = alcuse + 0.1, label = round(alcuse,2))) +
scale_x_continuous(breaks = c(0, 1, 2), label = c("14", "15", "16")) +
scale_color_discrete(name = "coa") +
scale_y_continuous(breaks = seq(0, 2, 0.5), limits = c(0, 2)) +
xlab("age") +
ggtitle("Model C for the effects of COA") +
theme_bw()
モデルEも可視化するが、モデルEのPEER
は連続変数なので、典型的な個人を考える必要がある。取りうる全てのPEER
で可視化することはもちろん可能ではあるが、線が大ぎて傾向がわからないため、典型的な個人の値を考えてモデルを可視化することが一般的。連続変数の典型的な値のとり方は下記の通り。
ここでも書籍に従い、PEER
は平均値±標準偏差×0.5の値を採用することにする。
\[ \begin{eqnarray} Y_{ij} &=& \pi_{0i} + \pi_{1i} TIME_{ij} + \epsilon_{ij} \\ \pi_{0i} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \zeta_{0i} \\ \pi_{1i} &=& \gamma_{10} + \gamma_{12} PEER_{i} + \zeta_{1i} \\ \\ Y_{ij} &=& \gamma_{00} + \gamma_{01} COA_{i} + \gamma_{02} PEER_{i} + \gamma_{10} TIME_{ij} + \gamma_{12} PEER_{i} × TIME_{ij} + (\epsilon_{ij} + \zeta_{0i} + \zeta_{1i} × TIME_{ij}) \\ &=& -0.313 + 0.571 COA_{i} + 0.695 PEER_{i} + 0.424 TIME_{ij} + -0.151 PEER_{i} × TIME_{ij} \end{eqnarray} \]
<- fixef(model.e)
fixef.e <- mean(alcohol1$peer) + c(-1,1) * sd(alcohol1$peer)/2
peer_prototype <-
df_fit_plt_e expand_grid(age_14 = 0:2, coa = 0:1, peer = peer_prototype) %>%
mutate(peer_flg = rep(c("LowPeer", "HighPeer"), times = n()/2),
type = paste0("coa=",coa," & ",peer_flg)) %>%
mutate(alcuse =
1]] +
fixef.e[[2]] * coa +
fixef.e[[3]] * peer +
fixef.e[[4]] * age_14 +
fixef.e[[5]] * age_14 * peer
fixef.e[[
)
ggplot(df_fit_plt_e, aes(age_14, alcuse, col = as.character(type))) +
geom_path(size = 1) +
geom_text(aes(y = alcuse + 0.1, label = round(alcuse,2))) +
scale_x_continuous(breaks = c(0, 1, 2), label = c("14", "15", "16")) +
scale_color_manual(values = c("#ec6d71", "#a22041", "#a0d8ef", "#19448e"), name = "coa") +
scale_y_continuous(breaks = seq(0, 2, 0.5), limits = c(0, 2)) +
xlab("age") +
ggtitle("Model E for the controlled effects of COA") +
theme_bw()
親がアルコール依存症である初期値は一貫して高い位置にあり、HighPeer
だと時間経過の変化が緩やかである一方、LowPeer
だと時間経過の変化がHighPeer
に比べるときつい。組み合わせて解釈すると、初期値において、親がアルコール依存症ではなく、周囲の友人がアルコールを摂取するケースcoa=0 & HighPeer
と親がアルコール依存症で、周囲の友人がアルコールを摂取しないケースcoa=1 & LowPeer
を比べると、そこまで大きな違いはないことがわかる。