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

R中循环执行ANOVA测试出现重复结果及变量未全运行问题

解决R中ANOVA循环重复行与结果展示问题

问题背景

你构建了包含响应变量Attrition和10个连续自变量的数据集sub3,并尝试用循环批量执行ANOVA检验变量关联,但输出结果出现重复行,且误以为未遍历所有变量。

原数据集构建代码

sub3 <- df1[, c('Attrition', "Age", "DistanceFromHome", "MonthlyIncome", "NumCompaniesWorked",    "PercentSalaryHike", "TotalWorkingYears", "TrainingTimesLastYear", "YearsAtCompany", "YearsSinceLastPromotion", "YearsWithCurrManager")]
sub3

原ANOVA循环代码

df_num <- function(x) {
  aov <- aov(as.numeric(sub3$Attrition) ~ sub3[, x], data = sub3)

  res <- data.frame('row' = 'Attrition'
                , 'column' = colnames(sub3)[x]
                ,  "p.value" = summary(aov)[[1]][["Pr(>F)"]]
                )
  return(res)
}
num_df <- do.call(rbind, lapply(seq_along(sub3)[-1], df_num))
head(num_df)

错误输出

p.value
1   Attrition   Age                1.996802e-26 
2   Attrition   Age                 NA  
3   Attrition   DistanceFromHome    5.182860e-01    
4   Attrition   DistanceFromHome    NA  
5   Attrition   MonthlyIncome          3.842748e-02 
6   Attrition   MonthlyIncome           NA  

问题原因分析

  1. 重复行根源:summary(aov)[[1]][["Pr(>F)"]]会返回长度为2的向量——第一个值是自变量的F检验p值,第二个是残差项的p值(残差项无检验意义,故为NA)。你的代码直接将整个向量存入p.value列,导致每个变量生成两行数据。
  2. 关于“未遍历所有变量”:seq_along(sub3)[-1]确实遍历了sub3中除Attrition外的10个变量,只是你用head(num_df)仅查看了前6行(对应前3个变量的两行),并非未遍历全部。

修正方案

修改函数,仅提取自变量对应的p值,同时优化公式写法提升代码可读性:

df_num <- function(x) {
  # 获取当前自变量的列名
  var_name <- colnames(sub3)[x]
  # 动态构建ANOVA公式
  formula <- as.formula(paste0("as.numeric(Attrition) ~ ", var_name))
  # 拟合模型,正确使用data参数
  aov_model <- aov(formula, data = sub3)
  # 仅提取自变量的p值(取Pr(>F)列的第一行)
  p_val <- summary(aov_model)[[1]][["Pr(>F)"]][1]
  # 构建结果数据框,避免自动转为因子
  res <- data.frame(
    row = "Attrition",
    column = var_name,
    p.value = p_val,
    stringsAsFactors = FALSE
  )
  return(res)
}

# 执行循环并合并结果
num_df <- do.call(rbind, lapply(seq_along(sub3)[-1], df_num))
# 查看完整结果
print(num_df)

修正后的输出会每个变量对应一行,包含Attrition与该变量的ANOVA p值,无重复行。

内容的提问来源于stack exchange,提问作者Alexandra García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:05:18