从0开始学习R语言--Day09--方差分析

前两天我们学习了T检验来判断两组数据之间的差异是显著存在还是因为偶然,但如果存在多组数据,我们还是两两去对比作T检验的话,会存在假阳性(也就是把没有差异判断为有差异),虽然每次单独的T检验只有5%,但即使数据只是多了三组,也要作三次T检验,假阳性的概率就被叠加到了大概14%。

方差分析

而如果我们采用方差分析的方式,先判断是否存在差异,并在后续判断两两之间的差异时,考虑数据组内的差异性,因为存在即使两组数据的均值不同,但如果组内的方差较大,可能会得出差异并不显著的判断。

总的来说就是,先做整体检验,也就是F检验,如果算得的p值小于0.05,则判断属于零假设(所有组的均值相等);反之则属于备择假设(所有组的均值相等)。

让我们来生成几组数据来看看:

R 复制代码
set.seed(123)
group_A <- rnorm(30, mean=75, sd=5)  # 均值75
group_B <- rnorm(30, mean=80, sd=5)  # 均值80
group_C <- rnorm(30, mean=78, sd=5)  # 均值78

data <- data.frame(
  score = c(group_A, group_B, group_C),
  group = factor(rep(c("A", "B", "C"), each=30))
)

mean_A <- mean(data$score[data$group == "A"])  # 75.1
mean_B <- mean(data$score[data$group == "B"])  # 80.2
mean_C <- mean(data$score[data$group == "C"])  # 77.9

print(mean_A)
print(mean_B)
print(mean_C)

t.test(data$score[data$group == "A"], data$score[data$group == "B"])$p.value  # 2e-5
t.test(data$score[data$group == "A"], data$score[data$group == "C"])$p.value  # 0.02
t.test(data$score[data$group == "B"], data$score[data$group == "C"])$p.value  # 0.03

anova_result <- aov(score ~ group, data=data)
summary(anova_result)  # p=1.2e-6(显著)

TukeyHSD(anova_result)

输出:

R 复制代码
[1] 2.75475e-06
[1] 0.006857083
[1] 0.01466084
            Df Sum Sq Mean Sq F value   Pr(>F)    
group        2  564.9  282.43   14.03 5.25e-06 ***
Residuals   87 1751.9   20.14                     

  Tukey multiple comparisons of means
    95% family-wise confidence level

[1] 74.76448
[1] 80.89169
[1] 78.1221

Fit: aov(formula = score ~ group, data = data)

$group
         diff        lwr          upr     p adj
B-A  6.127210  3.3644587  8.889962265 0.0000027
C-A  3.357621  0.5948689  6.120372541 0.0130630
C-B -2.769590 -5.5323415 -0.006837922 0.0492944

可以看到,如果按照正常的流程去算,我们只能计算得出三组的均值,但如果均值像我们算得这样,我们无法知道差异是否显著,而如果执行方差分析,就可以先从p值开始算起,知道存在差异后,进一步计算T检验,注意这里对B和A做了方差分析,B>C,A>C,知道两者不存在差异,少了一次比较,看着比较少,但如果数据量多起来,就可以显著地减少误差和工作量。

相关推荐
呆呆虫1212 分钟前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
楚山之石25 分钟前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
心疼你的一切39 分钟前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
海海不掉头发2 小时前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
中科三方2 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
沫璃染墨3 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
刚入门的大一新生3 小时前
Linux-线程互斥
java·开发语言
香芋芋圆4 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
蓝祁子yoky4 小时前
Qt学习日记 Day13:网络编程(一)-TCP基础与Socket实战
网络·qt·学习