工作数据如下:
set.seed(1234)
df <- data.frame(y = rnorm(1:30),
fac1 = as.factor(sample(c("A","B","C","D","E"),30, replace = T)),
fac2 = as.factor(sample(c("NY","NC","CA"),30,replace = T)),
x = rnorm(1:30))
lme
模型拟合为:
library(lme4)
mixed <- lmer(y ~ x + (1|fac1) + (1|fac2), data = df)
我使用bootMer
来运行参数自举,我可以成功获得固定和随机效应的系数(截距)和SE:
mixed_boot_sum <- function(data){s <- sigma(data)
c(beta = getME(data, "fixef"), theta = getME(data, "theta"), sigma = s)}
mixed_boot <- bootMer(mixed, FUN = mixed_boot_sum, nsim = 100, type = "parametric", use.u = FALSE)
我的第一个问题是如何从引导结果mixed_boot
中获得两个随机效应的各个级别的系数(斜率)?
使用mixed
包中的augment
函数从broom
模型中提取系数(斜率)没有问题,见下文:
library(broom)
mixed.coef <- augment(mixed, df)
但是,似乎broom
无法处理boot
类对象。我无法直接在mixed_boot
上使用上述功能。
我还尝试通过添加mixed_boot_sum
来修改mmList
(我认为这将是我要找的),但R抱怨为:
Error in bootMer(mixed, FUN = mixed_boot_sum, nsim = 100, type = "parametric", :
bootMer currently only handles functions that return numeric vectors
此外,是否可以通过指定FUN
获得固定和随机效果的CI?
现在,我对FUN
的正确规格感到困惑,以满足我的需求。任何有关我的问题的帮助将不胜感激!
答案 0 :(得分:1)
我的第一个问题是如何从bootstrapping结果mixed_boot获取两个随机效应的每个单独级别的系数(斜率)?
我不确定“每个级别的系数(斜率)”是什么意思。 broom::augment(mixed, df)
给出每个观察的预测(残差等)。如果你想要每个级别的预测系数,我会尝试
mixed_boot_coefs <- function(fit){
unlist(coef(fit))
}
原始模型给出了
mixed_boot_coefs(mixed)
## fac1.(Intercept)1 fac1.(Intercept)2 fac1.(Intercept)3 fac1.(Intercept)4
## -0.4973925 -0.1210432 -0.3260958 0.2645979
## fac1.(Intercept)5 fac1.x1 fac1.x2 fac1.x3
## -0.6288728 0.2187408 0.2187408 0.2187408
## fac1.x4 fac1.x5 fac2.(Intercept)1 fac2.(Intercept)2
## 0.2187408 0.2187408 -0.2617613 -0.2617613
## ...
如果您想要更清楚地命名结果对象,可以使用:
flatten <- function(cc) setNames(unlist(cc),
outer(rownames(cc),colnames(cc),
function(x,y) paste0(y,x)))
mixed_boot_coefs <- function(fit){
unlist(lapply(coef(fit),flatten))
}
运行bootMer
/ confint
/ boot::boot.ci
后,这些函数会为每个值提供置信区间(请注意,所有斜率facW.xZ
在各组之间都相同因为模型只假设截距中的随机变化)。换句话说,无论您知道如何从拟合模型中提取信息(条件模式/ BLUP [ranef
],预测的分组变量[coef
]的每个级别的截距和斜率,参数估计[可以在fixef
'中使用getME
,VarCorr
],随机效应差异[predict
],特定条件下的预测[bootMer
] ...) s FUN
参数,,只要您可以将其结构展平为简单的数字向量。