R语言多次随机抽样分组执行ANOVA并批量存储指标的实现问题
R语言实现重复分组ANOVA的完整方案
完整可运行代码
# 1. 初始生成50个随机数 set.seed(123) # 可选,添加后可复现运行结果 samp <- rnorm(50, 3.47, 0.0189) # 2. 初始化结果存储矩阵,对应1000次迭代的3个指标 iter_num <- 1000 results <- matrix(NA, nrow = iter_num, ncol = 3, dimnames = list(NULL, c("F_value", "P_value", "F_critical"))) # 3. 迭代执行分组+ANOVA流程 for (i in 1:iter_num) { # 3.1 无放回打乱所有样本,生成带分组标识的数据框 shuffled_samp <- sample(samp, size = 50, replace = FALSE) df <- data.frame( value = shuffled_samp, group = rep(1:10, each = 5) # 自动生成10组标识,每组对应5个样本 ) # 3.2 执行ANOVA检验 samp_lm <- lm(value ~ factor(group), data = df) anova_res <- anova(samp_lm) # 3.3 计算F临界值,提取三个目标指标存入结果矩阵 f_critical <- qf(1 - 0.05, anova_res$Df[1], anova_res$Df[2]) results[i, ] <- c(anova_res$`F value`[1], anova_res$`Pr(>F)`[1], f_critical) } # 4. 查看前几行结果验证 head(results)
实现说明
- 分组逻辑:每次迭代先对全部50个样本做无放回全排列,按顺序每5个归为一组,既满足无放回抽样要求,也避免了循环抽样的冗余代码
- 指标提取:直接从
anova()返回的结果中取第一行的对应值(组间差异对应的统计量),F临界值调用qf()计算,自由度直接读取ANOVA结果中的自由度参数,无需手动硬编码 - 结果存储:预分配的矩阵
results每一行对应一次迭代的三个指标,后续可直接用于后续统计分析
内容的提问来源于stack exchange,提问作者Spooked
相关产品推荐
相关产品推荐

