0

工作数据如下所示:

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模型中提取系数(斜率)没有问题,见下文:augmentbroom

library(broom)
mixed.coef <- augment(mixed, df)

但是,似乎broom无法处理boot类对象。我不能直接在mixed_boot.

我也尝试mixed_boot_sum通过添加来修改mmList(我认为这将是我正在寻找的),但 R 抱怨为:</p>

Error in bootMer(mixed, FUN = mixed_boot_sum, nsim = 100, type = "parametric",  : 
  bootMer currently only handles functions that return numeric vectors

此外,是否可以通过指定同时获得固定和随机效果的 CI FUN

FUN现在,为了满足我的需求,我对正确的规范感到非常困惑。任何有关我的问题的帮助将不胜感激!

4

1 回答 1

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在组间都是相同的,因为模型只假设截距的随机变化)。换句话说,无论您知道如何从拟合模型中提取信息(条件模式/BLUP [ ]、分组变量的每个级别的预测截距和斜率 [ ]、参数估计值 [ 、]、随机效应方差 [ ]、特定条件下的预测 [ ] ...) 可以在'参数中使用,只要您可以将其结构展平为简单的数字向量boot::boot.cifacW.xZranefcoeffixefgetMEVarCorrpredictbootMerFUN

于 2016-09-06T23:45:33.847 回答