0

我对 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主题标识符在哪里。

我尝试使用nlmeR 中的包计算斜率:

   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.

时间按年计算,其中time0 表示ln_ahr测量的第一年;每个人每三年测量一次。

我想知道这是否是正确的方法,或者我是否正确地做到了;如果不是,你有什么建议?

4

1 回答 1

2

基本答案是“是”;返回的数字lme4::coef()是估计的特定于主题的参数。

此示例的变体在 Internet 上随处可见,但是:

适合以下中的基本随机斜率示例之一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"))          

在此处输入图像描述

(理想情况下,我们也会以某种非任意方式对主题进行排序,例如按斜率)

于 2017-12-28T14:54:34.530 回答