我对R和混合模型分析相当新。
我希望根据ln_ahr
为每个人生成变量time
的变化的单一估算值。我相信这可以被认为是时间变化的斜率。以下是我的数据结构(长格式):
v001 ln_ahr time
13404 28337 0.28438718 0
13405 28337 NA 3
13406 28337 NA 6
13407 28337 1.05015991 9
13408 28337 NA 12
13409 28337 1.33345188 15
13410 28337 NA 19
13413 28355 1.14904314 0
13414 28355 NA 3
13415 28355 1.06546008 6
13416 28355 NA 9
13417 28355 1.17865500 12
13418 28355 2.84949593 15
13423 29983 0.07015499 0
13424 29983 0.21056477 3
13426 29983 0.36125306 9
13427 29983 0.66139848 12
13428 29983 0.16962391 16
其中v001
是主题标识符。
我尝试使用R中的nlme
包计算斜率:
slope <- lme(ln_ahr~time,random=~1+time|v001,
data=restructured,na.action="na.omit")
我尝试获取ranef(slope)
和coef(slope)
值。我读到coef(slope)
值“计算每个分组因子的每个解释变量的固定和随机效应系数的总和”因此我认为打印出时间系数(省略截距值)会给我估计每个人ln_ahr
随时间的变化,我可以将其作为我的“斜率”或ln_ahr
的变化估算。
时间计算为time
0表示ln_ahr
测量的第一年的年份;每个人每三年测量一次。
我想知道这是否是一个正确的方法,或者我是否正确地做到了;如果不是你的建议是什么?
答案 0 :(得分:1)
基本答案是“是”; lme4::coef()
返回的数字是特定主题的估计参数。
此示例的变体出现在互联网上,但是:
适合lme4
:
library(lme4)
fm1 <- lmer(Reaction~Days+(Days|Subject),sleepstudy)
提取每组的估计截距和斜率(主题):
d1 <- coef(fm1)$Subject
d1$Subject <- rownames(d1)
为了进行比较,为每个组拟合一个单独的模型,并提取特定于主题的斜率和截距:
fm2 <- lmList(Reaction~Days|Subject,sleepstudy)
d2 <- coef(fm2)
d2$Subject <- rownames(d2)
绘图(随机效应估计为实线;固定效应虚线)
library(ggplot2); theme_set(theme_bw())
gg0 <- ggplot(sleepstudy,aes(Days,Reaction,
colour=Subject))+
geom_point()+
geom_abline(data=d1,
mapping=aes(intercept=`(Intercept)`,
slope=Days,colour=Subject))+
geom_abline(data=d2,linetype=2,
mapping=aes(intercept=`(Intercept)`,
slope=Days,colour=Subject))
Doug Bates不喜欢这些“意大利面条”与所有团体在一个小组中,他更喜欢方面:
gg0+facet_wrap(~Subject)+
theme(panel.spacing=grid::unit(0,"lines"))
(理想情况下,我们也会以某种非任意的方式对受试者进行排序,例如通过斜率)