首页 > 解决方案 > 如何使用 lmeresampler 从嵌套随机效应模型中获取系数的 p 值

问题描述

lmer我使用包的命令估计了一个具有嵌套随机效应结构(参与者在不同的组中)的混合效应模型lme4 。然后,由于嵌套结构,
mixed.model <- lmer(ln.v ~ treatment*level+age+income+(1 | group/participant),data=data)
我从包中引导bootstrap命令。lmeresampler我使用了半参数引导程序。 我可以通过(package )
boot.mixed.model <- bootstrap(model = mixed.model, type = "cgr", fn = extractor, B = 10000, resample=c(data$group,data$participant))
获得自举置信区间,但另外我想报告系数的 p 值。自举模型的输出仅提供偏差和标准误差: boot.cibootboot.mixed.model

Bootstrap Statistics :
         original        bias    std. error
t1*   0.658442415 -7.060056e-02  2.34685668
t2*  -0.452128438 -2.755208e-03  0.17041300
…

根据这些值计算 p 值的最佳方法是什么?

标签: rlme4mixed-modelsp-value

解决方案


我不知道名为 的包,并且由于兼容性问题(Cran 检查失败)lmeresampler,它似乎已被删除。cran

此外,该问题不包含数据extractor且未定义,因此该示例不可重现。bootMer但是,输出与使用 so 生成的函数lme4和使用内置函数的示例获得的输出相同。

基本上这遵循help(bootMer)页面中的示例,但针对特定问题进行了扩展。如果lmeresampler包返回的对象是相似的,它将包含使用的对象。

可重现的例子

library(lme4)
data(Dyestuff, package = "lme4")
fm01ML <- lmer(Yield ~ 1|Batch, Dyestuff, REML = FALSE)

现在该bootMer函数只需要一个函数,该函数输出一个有趣参数的向量。

StatFun <- function(merMod){
    pars <- getME(merMod, c("fixef", "theta", "sigma"))
    c(beta = pars$fixef, theta = unname(pars$theta * pars$sigma), sigma = pars$sigma) ### <<== Error corrected
}

我们可以使用 来执行我们的引导bootMer,它还包含参数选项type(我建议阅读help(bootMer)页面中的详细信息以获取更多信息)

boo01 <- bootMer(fm01ML, StatFun, nsim = 100, seed = 101)

现在对于更精确的 p 值,我建议 p 值更接近 1000,但由于时间原因,它可能并非在所有情况下都可行。

无论输出存储在矩阵t中,我们都可以使用它来执行简单的 Kolmogorov-supremum 测试:

H0 <- c(0, 0, 0)
Test <- sweep(abs(boo01$t), 2, H0, "-") <= H0 ###<<=== Error corrected
pVals <- colSums(Test)/nrow(Test)
print(pVals)
#output#
beta.(Intercept)            theta            sigma 
            0.00             0.12             0.00

推荐阅读