【通俗向】方差分析--几种常见的方差分析

上一篇文章说了方差和t检验的差异,这篇说说几种实用的方差分析方法和R语言实现。

一般情况下,基本的方差分析模型包含以下三类,三类下面会根据具体情况再进行细分,主要的三类为一元方差分析,协方差分析,多元方差分析。

1、一元方差分析
一元方差分为单因素、多因素两类(协方差单独分类),既然方差是检验各组差异的,那么从一个最简单的例子入手,探寻各类方差分析的适用条件和特点。

OK,正题开始,鉴于自己也算是酷爱篮球,就举个篮球运动员的例子吧,以下数据纯属瞎编,如有雷同纯属巧合。

有一天,詹姆斯和科比遇见了,鉴于科比已经退役,詹姆斯说老科,我们比投篮吧,看看是你厉害还是我厉害。科比一听这话顿时来了精神,就在我家球场,放学别走。

詹姆斯说,我的投篮命中率应该比你高,但是为了避免你蒙进去的多,我们比试5组,每一组投10次,看谁进的多,科比:Deal!

下面是相关代码

name<-c(rep('Kobe',5),rep('James',5))
good<-c(5,4,6,5,7,7,5,6,4,8)
a<-data.frame(name,good)
fit1<-aov(good~name,a)
summary(fit1)

其中建立了一个数据框:a,也就是两个人的投篮比较:

 name good
1   Kobe    5
2   Kobe    4
3   Kobe    6
4   Kobe    5
5   Kobe    7
6  James    7
7  James    5
8  James    6
9  James    4
10 James    8

结果如下:

  Df Sum Sq Mean Sq F value Pr(>F)
name         1    0.9     0.9   0.474  0.511
Residuals    8   15.2     1.9               

可以看到,p=0.511,也就是说,二者的投篮没有显著差异(同样可以使用t检验)。

这时候,乔丹老流氓来了,看到他们在比投篮,说,要不我也参与下,好久没活动了。

随着老流氓的连续空心,科比和詹姆斯马上就要报警了,最后看看三人的命中数:

b<-rbind(a,data.frame(name=rep('jordan',5),good=c(10,9,10,10,10)))

name good
1    Kobe    5
2    Kobe    4
3    Kobe    6
4    Kobe    5
5    Kobe    7
6   James    7
7   James    5
8   James    6
9   James    4
10  James    8
11 jordan   10
12 jordan    9
13 jordan   10
14 jordan   10
15 jordan   10

接下来就做一个t检验做不了的事情:两组以上的方差分析:

fit2<-aov(good~name,b)
summary(fit2)

结果是:

 Df Sum Sq Mean Sq F value   Pr(>F)    
name         2  56.93  28.467   21.35 0.000111 ***
Residuals   12  16.00   1.333                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我们看到P值是0.000111,也就是超级显著了,但是我们知道三者有显著差别,但是谁和谁有显著差别暂时还不知道(虽然能猜到,但还是装不知道),这时候需要借助Tukey或Duncan方法进行检验下,这里先使用Tukey方法检测:

TukeyHSD(fit2)

结果为

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

Fit: aov(formula = good ~ name, data = b)

$name
             diff       lwr      upr     p adj
Kobe-James   -0.6 -2.548332 1.348332 0.6973146
jordan-James  3.8  1.851668 5.748332 0.0005973
jordan-Kobe   4.4  2.451668 6.348332 0.0001637

可以看到,Kobe和James没有差异,乔老爷子和两个人都有差异,但是和Kobe差异最大,这个用图形表示就是

plot(TukeyHSD(fit2))

这里写图片描述

图形中纵轴是均值的差异,包含0说明差异不明显,不包含0说明差异明显,可以看到乔丹的均值比詹姆斯和科比都大很多。

那么这个结果说明了乔丹比科比和詹姆斯投篮准,最后还需要进行正态性假设,因为我们需要知道这5组投篮是随机从他们职业生涯的千千万万个投篮中抽取的,这里需要检测下残差是否符合正态分布。

到这里说的有点远,因为残差需要进行线性拟合,但是有三个因素性变量,但是我不能把名字作为横轴吧,那么乔丹=?科比=?,一般在这种情况下处理就是两两比较,比如把詹姆斯的投篮命中作为因变量,乔丹作为自变量1,科比作为自变量2,那么其实舍弃了科比和乔丹的比较,比如载入car包中,看具体的因子编码:

library(car)
contrasts(b$name)

结果:

  Kobe jordan
James     0      0
Kobe      1      0
jordan    0      1

可以看到james都是0,也就是因变量,然后Kobe是1,然后乔丹是1,也就是先拿科比作为1,然后保持科比不变,拿乔丹作为1,看和詹姆斯命中的影响,既然看残差符合正态分布,所以可以通过两个方式看qq图或正态性检测,先看第一个qqplot:

fit2.1<-lm(good~name,b)
summary(fit2.1)
qqPlot(fit2.1)

先看看fit2.1的情况:

Call:
lm(formula = good ~ name, data = b)

Residuals:
   Min     1Q Median     3Q    Max 
  • 14
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值