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

在R中使用summary(aov)与anova_test为何得到不同统计结果?

R中aov()与anova_test()的结果差异问题

我有多个受试者的血液测量指标数据(比如白细胞计数,连续因变量),核心自变量是包含3个水平的分组变量Dx(对照组、抑郁组、缓解组),同时要纳入年龄(连续)和性别(二分类)作为协变量,构建的公式如下:

myform_aov <- as.formula(sprintf("%s ~ %s + %s + %s", current_bc, "age","gender", "Dx"))

分别用两种方法分析后,得到的p值存在细微差异:

  • summary(aov(myform_aov, data = data))结果:Dx的p值为0.2377,age为0.018,gender为0.04
  • res.ancova <- data %>% anova_test(myform_aov)结果:Dx的p值为0.238,age为0.014,gender为0.06

结果差异的核心原因

两者的核心差异来自平方和的计算类型不同:

  • aov()默认使用Type I(顺序型)平方和:严格按照公式中变量的输入顺序计算效应——先算年龄的单独效应,再算性别在控制年龄后的附加效应,最后算Dx在控制年龄+性别后的附加效应,结果会受变量顺序影响。
  • anova_test()(rstatix包)默认使用Type III(边际型)平方和:直接计算每个变量在控制其他所有变量后的净效应,不受公式中变量顺序的影响,更关注每个变量的独立贡献。

除此之外,两者在p值的近似计算、自由度处理上可能有细微调整,但平方和类型的差异是导致结果不同的主要原因。


哪种方法更合适

选择哪种方法取决于你的研究目的:

  • 如果核心需求是检验控制所有协变量后,分组变量Dx的独立效应(这也是ANCOVA的常规研究逻辑),那么anova_test()的Type III平方和更合适,它能准确反映Dx在排除年龄、性别干扰后的真实差异。
  • 如果研究是想按顺序解释变量的增量贡献(比如先看年龄对血液指标的影响,再加入性别后新增的解释力,最后看Dx的附加影响),那么aov()的Type I平方和更贴合需求。

summary(aov())与anova_test()的主要区别

  1. 所属工具链:
    • aov()是基础R中stats包的原生函数,无需额外安装。
    • anova_test()属于rstatix包,是为tidyverse生态设计的统计工具,输出格式更适配dplyr、ggplot2等工具。
  2. 平方和默认类型:
    • aov()默认输出Type I平方和,原生summary(aov())不支持Type III,需借助其他函数(如car::Anova())切换。
    • anova_test()默认输出Type III平方和,可通过type参数调整为Type I或Type II。
  3. 输出格式:
    • summary(aov())输出传统统计表格,结构固定,不易直接用于后续可视化或数据处理。
    • anova_test()输出tidy格式的数据框,每一行对应一个变量的统计结果,方便筛选、排序或配合其他tidyverse函数使用。
  4. 附加功能:
    • anova_test()支持更多进阶分析,比如Welch ANOVA(适配方差不齐的情况)、重复测量ANOVA,还能直接输出效应量(如eta平方),无需额外计算。
    • aov()功能相对基础,如需效应量或特殊检验,需要手动调用其他函数补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:10:35