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

如何修改Shapiro检验R代码实现不同样本量下Bonett检验模拟

问题原因&修改方案

你的代码存在三处核心错误,逐一修正即可:

  • 检验逻辑错误:Bonett检验和Shapiro检验的拒绝逻辑完全一致,都是p值小于显著性水平α=0.05时拒绝正态性原假设,你写的!= sqrt(2/pi)是完全错误的判断条件,直接替换为<0.05即可。
  • 返回值提取错误:moments包的bonett.test()返回的htest类对象中,p值直接存储在p.value字段,不需要用矩阵索引["p.value",]提取,直接用$p.value调用即可。
  • 括号配对错误:原代码中函数体、replicate、table的括号没有正确闭合,导致R解析语法时出现unexpected symbol报错。

修正后可运行代码

library(moments)
out <- t(sapply(c(10, 20, 50, 100), function(x) {
  # 重复1000次检验,统计p<0.05的频次
  table(replicate(1000, bonett.test(rnorm(x))$p.value < 0.05))
}))
row.names(out) <- c(10, 20, 50, 100)
out

输出结果示例(随机模拟结果会有小幅波动,符合统计预期)

样本量FALSETRUE
1094852
2095545
5094753
10095248

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:00:02