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

为何bf.test(onewaytests)与leveneTest(center=median)的Brown-Forsythe检验结果不同?

关于Brown–Forsythe检验两种函数结果不一致的原因疑问

我使用glmertree包中的lmertree函数,分析三水平因子source(代表三种情境)对acceleration的影响。通过可视化检查发现存在异方差,因此对因变量acceleration进行对数变换。虽可视化显示异方差情况有所改善,但leveneTest仍检测到组间方差存在显著差异。同事建议改用Brown–Forsythe检验,但使用不同函数测试却得到矛盾结果:使用onewaytests包的bf.test函数未发现显著差异;使用指定center=median参数的leveneTest仍得出显著差异。想了解导致这两种检验结果不同的原因。

所用代码如下:

# 添加对数变换后的加速度列
CA_degrees_PT$log_acce_RHwri_norm_mean <- log(CA_degrees_PT$acce_RHwri_norm_mean)

# 拟合lmertree模型
log_acce_RHwri_norm_mean_lmertree <- lmertree(log_acce_RHwri_norm_mean ~ 1|duration_nFrames + (1|participant)|source , data = CA_degrees_PT) 
plot(log_acce_RHwri_norm_mean_lmertree, which = "tree", gp = gpar(cex = .9))

# 残差诊断
hist(residuals(log_acce_RHwri_norm_mean_lmertree))
qqnorm(residuals(log_acce_RHwri_norm_mean_lmertree))
qqline(residuals(log_acce_RHwri_norm_mean_lmertree))

resids_log_acce <- residuals(log_acce_RHwri_norm_mean_lmertree)
preds_log_acce <- predict(log_acce_RHwri_norm_mean_lmertree)
plot(CA_degrees_PT$source, resids_log_acce)

# 方差齐性检验
leveneTest(resids_log_acce ~ groups, center = median)
bf.test(resids_log_acce ~ groups, data = CA_degrees_PT)

结果差异的可能原因

  • 计算逻辑的细节差异:
    Brown–Forsythe检验核心是计算每个观测值与组中位数的绝对偏差,但car::leveneTest(center=median)和onewaytests::bf.test在偏差计算、统计量推导上存在细微区别。比如前者可能对偏差做了额外方差调整,或采用近似F统计量计算,而后者严格遵循Brown–Forsythe检验的原始公式,导致统计量数值不同。
  • 数据输入的匹配问题:
    代码中leveneTest使用提取出的残差resids_log_acce和groups变量,而bf.test直接调用数据框中的分组。如果groups变量和CA_degrees_PT$source的分组不完全对应,或残差与groups的观测顺序不匹配,会直接导致检验结果偏差。
  • 随机效应的考虑差异:
    模型包含duration_nFrames和participant两个随机效应,leveneTest使用的是扣除随机效应影响后的模型残差,而bf.test可能直接对原始残差做分组计算,未考虑模型的嵌套结构,导致两者的分析基础数据本质不同。
  • 自由度的计算区别:
    不同包对检验的自由度处理不同。leveneTest会考虑模型拟合后剩余的自由度,而bf.test可能采用原始样本量的自由度计算,这会直接影响p值的大小。

内容的提问来源于stack exchange,提问作者Sébastien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:47:20