You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性混合模型的非参数ANOVA及功效计算相关技术咨询

小样本线性混合模型分析问题解答

1. 支持bootstrap ANOVA及事后比较的R包与方法

可以通过以下工具组合实现需求:

  • lmeresampler + car + emmeans
    利用lmeresampler生成模型的bootstrap样本,结合car包的Anova()计算bootstrap版本的ANOVA统计量,再通过emmeans的内置bootstrap功能完成事后两两比较:
    # 加载依赖包
    library(lmeresampler)
    library(car)
    library(emmeans)
    
    # 对原lmer模型执行残差bootstrap
    boot_mod <- bootstrap(mylmm, type = "residual", B = 1000)
    
    # 计算bootstrap ANOVA结果
    boot_anova_list <- lapply(boot_mod$bootstraps, function(x) Anova(x, type = 3))
    boot_pvals <- sapply(boot_anova_list, function(x) x$`Pr(>Chisq)`)
    orig_anova <- Anova(mylmm, type = 3)
    # 计算bootstrap p值:统计量大于原模型的比例
    boot_p <- rowMeans(t(boot_pvals) > orig_anova$`Pr(>Chisq)`)
    
    # 事后两两比较的bootstrap推断
    emm_obj <- emmeans(mylmm, ~ group * exam)
    boot_emm <- bootEM(emm_obj, B = 1000)
    # 两两比较并做多重比较校正
    pairs(boot_emm, adjust = "tukey")
    
  • boot包自定义实现:如果需要更灵活的控制,可使用boot包编写自定义函数,手动提取ANOVA统计量或事后比较的差异值,再计算置信区间或p值。

2. bootstrap/非参数ANOVA的功效计算

需要计算功效,小样本场景下,功效能直观反映检验检测真实效应的概率。推荐采用模拟法实现:

library(boot)
library(lmerTest)

# 定义数据模拟函数:基于原数据分布生成带指定效应的新数据
simulate_data <- function(orig_data, effect_magnitude) {
  new_data <- orig_data
  # 为指定group-exam组合添加效应(可按需修改)
  new_data$score <- new_data$score + effect_magnitude * 
    (new_data$group == "B" & new_data$exam == "Exam1")
  return(new_data)
}

# 模拟循环计算功效
n_simulations <- 1000
power_results <- numeric(n_simulations)

for (i in 1:n_simulations) {
  sim_dat <- simulate_data(mydata, effect_magnitude = 0.5)
  sim_lmm <- lmer(score ~1+group+exam+group*exam+(1|participant), data = sim_dat)
  # 执行bootstrap ANOVA
  boot_mod <- bootstrap(sim_lmm, type = "residual", B = 500)
  boot_anova_list <- lapply(boot_mod$bootstraps, function(x) Anova(x, type = 3))
  orig_anova <- Anova(sim_lmm, type = 3)
  boot_p <- rowMeans(t(sapply(boot_anova_list, function(x) x$`Pr(>Chisq)`)) > orig_anova$`Pr(>Chisq)`)
  # 记录检验是否显著
  power_results[i] <- as.integer(boot_p["group:exam"] < 0.05)
}

# 计算最终功效
final_power <- mean(power_results)

也可使用nparcomp等非参数工具,但自定义模拟更贴合你的数据结构。

3. 事后两两比较的功效计算(simr + emmeans)

simr无法直接计算事后比较的功效,必须结合emmeans定义检验函数来实现:

library(simr)
library(emmeans)

# 假设已拟合好lme模型mod
# 扩展模型的模拟能力(若需调整样本量可修改n参数)
mod <- extend(mod, n = 10)

# 定义事后比较的检验函数:返回两两比较的p值
emm_test_func <- function(model) {
  emm_obj <- emmeans(model, ~ group * exam)
  comps <- pairs(emm_obj, adjust = "tukey")
  comps$p.value
}

# 模拟计算功效
power_out <- powerSim(mod, test = emm_test_func, nsim = 1000)
# 查看功效结果
summary(power_out)

simr负责生成带效应的模拟数据集,emmeans处理事后比较的统计推断,两者结合即可得到两两比较的功效。


内容的提问来源于stack exchange,提问作者ksing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:16:10