从lme中提取系数及其标准误差

时间:2014-10-05 02:05:27

标签: r mixed-models nlme coefficients

如何在线性混合模型中为每个实验单元(图)分别提取系数(b0和b1)及其各自的标准误差:

Better fits for a linear model

使用相同的数据集(df),并且对于拟合的模型(fitL1):我怎样才能获得这样的数据框......

   plot    b0      b0_se   b1    b1_se 
    1    2898.69   53.85   -7.5  4.3

   ...    ...       ...     ...   ...

2 个答案:

答案 0 :(得分:7)

第一个评论是,这实际上是一个非平凡的理论问题:有一个相当long thread on r-sig-mixed-models的内容涉及一些技术细节;你应该看看,即使它有点可怕。基本问题是每组的估计系数值是固定效应参数和该组的BLUP /条件模式的总和,它们是不同的对象类别(一个是参数,一个是条件的平均值。随机变量),这会产生一些技术难题。

第二点是(不幸的是)我不知道在lme中执行此操作的简单方法,因此我的回答使用lmer(来自lme4包)。

如果你很乐意做最简单的事情并忽略固定效果参数和BLUP之间的(可能是定义不明确的)协方差,你可以使用下面的代码。

两种选择是:(1)使用贝叶斯分层方法(例如MCMCglmm包)拟合您的模型,并计算每个级别的后验预测的标准偏差(2)使用参数自举来计算BLUP /条件模式,然后采用bootstrap发行版的标准偏差。

请记住,像往常一样,这个建议没有保修。

library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
cc <- coef(fm1)$Subject
## variances of fixed effects
fixed.vars <- diag(vcov(fm1))
## extract variances of conditional modes
r1 <- ranef(fm1,condVar=TRUE)
cmode.vars <- t(apply(cv <- attr(r1[[1]],"postVar"),3,diag))
seVals <- sqrt(sweep(cmode.vars,2,fixed.vars,"+"))
res <- cbind(cc,seVals)
res2 <- setNames(res[,c(1,3,2,4)],
                 c("int","int_se","slope","slope_se"))
##          int   int_se     slope slope_se
## 308 253.6637 13.86649 19.666258   2.7752
## 309 211.0065 13.86649  1.847583   2.7752
## 310 212.4449 13.86649  5.018406   2.7752
## 330 275.0956 13.86649  5.652955   2.7752
## 331 273.6653 13.86649  7.397391   2.7752
## 332 260.4446 13.86649 10.195115   2.7752

答案 1 :(得分:1)

使用nlme让你在那里中途...

您可以使用以下方法提取summary()的组件:

summary(fitL1)$tTable[,1] #fixed-effect parameter estimates
summary(fitL1)$tTable[,2] #fixed-effect parameter standard errors

您可以按行进一步对这些进行子集化:

summary(fitL1)$tTable[1,1] #the first fixed-effect parameter estimate
summary(fitL1)$tTable[1,2] #the first fixed-effect parameter standard error

提取单个参数或标准错误,并使用例如:

将它们组合成数据框
df<-data.frame(cbind(summary(fitL1)$tTable[1,1], summary(fitL1)$tTable[1,2]))
names(df)<-c("Estimate","SE")
df

要调整每个绘图的这些参数(随机效果,我推测),您可以使用以下方式拉随机系数:

fitL1$coefficients$random

并将它们添加到参数估计值(B0(截距),B1等)。但是,我不确定如何为每个情节调整标准误差。