方差分析1—单因素方差分析(R语言)

方差分析是由英国著名统计学家:R.A.Fisher推导,也叫F检验,用于多个样本间均数的比较(分析类别变量、有序变量)。当包含的因子是解释变量时,关注的重点通常会从预测转向组别差异的分析。方差分析是一种能使多因素(多组间)检验变得简洁的一种检验方式,它能同时考虑所有的样本,不仅能使检验过程变得简洁还能排除因两两检验可能造成的错误累积的概率。这里学习方差分析最简单的部分——单因素方差分析。

一、方差分析的常用术语

学习方差分析首先需要知道它所说的专业性术语,如:因素、水平、协方差、因变量,自变量等。下面通过一个例子来看看这些术语具体是指什么,现有某企业的销售数据,里面记录了5天内3个不同地区的销售额(单位:百万),数据如下表所示:

2019/2/1 2019/2/3 2019/3/1 2019/4/2 2019/5/2
A地区 110 62 121 82 62
B地区 120 160 221 130 161
C地区 172 104 182 213 98

如果我们想要检验不同地区的销售额是否存在显著性差异,此时地区就是我们要检验的对象,称为因素或者因子或者自变量;A地区、B地区、C地区是这一因素的具体表现,称为水平或者处理;在每个地区下所得到的样本数据(5天内的销售额)称为观测值,销售额称为因变量。由于我们的观测数相同,所以称为均衡设计;若观测数不同,则称为非均衡设计。因为我们只想研究不同地区的销售额,与时间没有关系,所以这里只有一个类别型变量,所做的分析称为单因素方差分析。
如果我们想知道地区和时间对销售额造成的差异,那么将两个因素同时结合起来即可,此时称为双因素方差分析。不过,这时候会多出来另外两个术语:主效应和交互效应。所谓主效应,顾名思义就是研究多个因素对同一个因变量的影响时每一个因素所造成的效应;而交互效应就是多个因素间的交互作用对因变量所造成的影响。这里的主效应就是地区和时间对销售额的影响,交互效应就是地区和时间的交互作用对销售额的影响。当设计中包含两个或者更多的因子时,便是因素方差分析, 比如两因子时称为双因素方差分析,三因子时称为三因素方差分析,以此类推。
拓展:在不同的地区中年龄可能是一个隐藏的因素,如A地区的用户主要为15-20岁的用户,C地区主要为28-30岁的用户等,因此年龄也可以解释为因变量间的组间差异(或混淆因素),如果我们对年龄不感兴趣,那么它就是干扰变数,如果我们提前知道年龄分布,那么我们可以在评估地区对销售额的影响前,对任何年龄段的组间差异进行调整,此时年龄称为协变量,该设计称为协方差分析。此外,当因变量不止一个时,设计称为多元方差分析,若协变量也存在,则称为多元协方差分析。

二、方差分析

方差分析简写为ANOVA,用于多组均数之间的显著性检验。要求各组观察值服从正态分布或近似正态分布,并且各组之间的方差具有齐性。基本思想:将所有测量值间的总变异按照其变异的来源分解为多个部份,然后进行比较,评价由某种因素所引起的变异是否具有统计学意义。

2.1 假设前提和模型设定

设单因素A有r个水平,分别记为A1,A2,...,Ar,在每个水平Ai(i=1,2,...,r)下的观测指标变量样本值看做一个总体,故有r个总体,假设:
(1)每个总体均服从正态分布,且方差相等,即XiN(μi,σ2),i=1,2,...,r
(2)每个总体中抽取的样本Xi1,Xi2,...,Xini,i=1,2,...,r相互独立(niAi因素水平的实验数据个数)
通过假设检验来探究期望控制变量对观测指标变量是否有显著影响,如果有,则意味着A因素不同水平对应的观测指标变量总体的均值有显著差异。因而可作出如下假设:
H0:μ1=μ2=...=μr;
H1:μ1,μ2,...,μr不完全相等

2.2 方差分析的任务

任务一:检验r个总体的均值是否相等,即完成上述假设的检验;
任务二:作出未知参数μ1,μ2,...,μr,σ2的估计。

(1)均值相等的检验——方差分析表
由假设有XijN(μi,σ2)(μi,σ2),i=1,2,...,r;j=1,2,...,ni,即有Xijμi=εijN(0,σ2),故Xijμi=εij可视为随机误差,且相互独立,由假设前提知,各个εij相互独立。从而得到模型:

Xij=μi+εij,i=1,2,...,r;j=1,2,...,ni

记数据总个数为

n=i=1rni

总平均值为

μ=1ni=1rniμi

Ai因素水平下的总体均值与总平均值的差异来表示Ai因素水平对观测指标变量的效应:δi=μiμ。效应间的关系为

i=1rniδi=i=1rni(μiμ)=0

从而改写模型为:

Xij=μ+δi+εij,i=1,2,...,r;j=1,2,...,ni

可得,前述假设等价为:
H0:δ1=δ2=...=δr=0
H1:δ1,δ2,...,δr不全为0
这是因为当且仅当μ1=μ2=...=μr时,μi=μi=1,2,...,r

Ai 因素水平下的样本均值为

X¯i=1nij=1niXij

A因素的所有水平的样本总均值为

X¯=1ri=1rX¯i=1ni=1rj=1niXij

组内离差平方和为:

SSW=i=1rj=1ni(XijX¯i)2

组间离差平方和为:

SSB=i=1rj=1ni(X¯iX¯)2=i=1rni(X¯iX¯)2=i=1rniX¯i2nX¯2

总离差平方和为:

SST=i=1rj=1ni(XijX¯)2=i=1rj=1ni[(XijX¯i)+(X¯iX¯)]2=i=1rj=1ni(XijX¯i)2+i=1rj=1ni(X¯iX¯)2+2i=1rj=1ni(XijX¯i)(X¯iX¯)=i=1rj=1ni(XijX¯i)2+i=1rj=1ni(X¯iX¯)2=SSW+SSBSST=i=1rj=1ni(XijX¯)2=i=1rj=1niXij2nX¯2

 由 j=1ni(XijX¯i)2σ2=(ni1)Si2σ2χ2(ni1)和 χ2 分布的可加性,可得: 

SSWσ2=i=1rj=1ni(XijX¯i)2σ2χ2(i=1r(ni1))=χ2(nr)

E(SSW)=(nr)σ2

SSB可以看做 r 个变量 ni(Xi¯X¯) 的平方和,它们之间仅有一个线性约束条件:

i=1rni[ni(X¯iX¯)]=i=1rni(X¯iX¯)=i=1rj=1niXijnX¯=0

故知SSB的自由度是 r1

E(SSB)=E(i=1rniX¯i2nX¯2)=i=1rniE(X¯i2)nE(X¯2)=i=1rni[σ2ni+μi2]n(σ2n+μ2)=i=1rni[σ2ni+(μ+δi)2]n(σ2n+μ2)=rσ2+nμ2+i=1rniδi2+2μi=1rniδi+σ2nμ2=(r1)σ2+i=1rniδi2

并且,由SSW和SSB表达式可知二者独立,所以,
H0 为真时,

SSBσ2χ2(r1)SSB(r1)σ2SSW(nr)σ2=SSB(r1)SSW(nr)F(r1,nr)

H0 不为真时,

E(SSB)=(r1)σ2+i=1rniδi2>(r1)σ2SSB(r1)SSW(nr)k

因此可得拒绝域为:

F=SSB(r1)SSW(nr)Fα(r1,nr)

因SST的n个变量 XijX¯=1ri=1rX¯i=1ni=1rj=1niXij, 所以SSW的自由度为 n1 。 据上述分析结果,可得方差分析表:

单因素试验方差分析表
方差来源平方和自由度均方F比
因素ASSBr-1\overline{SSB}=\frac{SSB}{r-1}F=\frac{\overline{SSB}}{\overline{SSW}}
误差SSWn-r\overline{SSW}=\frac{SSW}{n-r}
总和SSTn-1

在实际中,可先计算SST和SSB,再由二者相减得到SSW,以简便计算。

(2)未知参数μ1,μ2,...,μr,σ2的估计
E(X¯)=μ知,μ的无偏估计为:μ^=X¯
E(X¯i)=μi知,μi的无偏估计为:μ^i=X¯i
不管H0是否为真,E(SSWnr)=σ2,可知σ2的无偏估计为:σ2^=SSWnr
当拒绝H0时,效应δ1,δ2,...,δr不全为0,且E(δi)=E(μiμ),可知,δi的无偏估计为δ^i=μ^iμ^=X¯iX¯
当拒绝H0时,常常需要作出两总体N(μj,σ2)N(μk,σ2)jk的均值差μjμk=δjδk的区间估计,由于

E(X¯jX¯k)=μjμk

D(X¯jX¯k)=σ2(1nj+1nk)

并且X¯jX¯kσ2^=SSWnr独立,于是,

(X¯jX¯k)(μjμk)SSWnr(1nj+1nk)=(X¯jX¯k)(μjμk)σ1nj+1nkSSWσ2(nr)t(nr)

据此得均值差μjμk=δjδk的置信水平为1-α的置信区间为:

((X¯jX¯k)±tα/2(nr)SSWnr(1nj+1nk))

三、单因素方差分析举例

设有三台机器,用来生产规格相同的铝合金薄板,并且假定除了机器这一因素之外,其他条件都相同。取样并测量薄板的厚度精确到千分之一厘米,得到结果如下表:

machine1 machine2 machine3
0.236 0.257 0.258
0.238 0.253 0.264
0.248 0.255 0.259
0.245 0.254 0.267
0.243 0.261 0.262

3.1 模型假设的检验——独立性检验、正态性检验、方差齐性检验

#数据建构
machine1=c(0.236,0.238,0.248,0.245,0.243)
machine2=c(0.257,0.253,0.255,0.254,0.261)
machine3=c(0.258,0.264,0.259,0.267,0.262)
data1=cbind(machine1,machine2,machine3)
    machine1 machine2 machine3
[1,]    0.236    0.257    0.258
[2,]    0.238    0.253    0.264
[3,]    0.248    0.255    0.259
[4,]    0.245    0.254    0.267
[5,]    0.243    0.261    0.262
#数据重构
library(reshape2)
data <- melt(data1,id=c())#进行数据的合并重构
names(data) <- c('id', 'trt', 'val') 
data
#独立性检验函数chisq.test()
data2<-table(data$trt,data$val)
chisq.test(data2)
#shaprio.test()正态性检验函数
shapiro.test(data$val)
#方差齐性检验函数bartlett.test()
bartlett.test(val~trt,data)
	Pearson's Chi-squared test
data:  data2
X-squared = 30, df = 28, p-value = 0.3632
	Shapiro-Wilk normality test
data:  data$val
W = 0.94835, p-value = 0.4989
	Bartlett test of homogeneity of variances
data:  val by trt
Bartlett's K-squared = 0.76975, df = 2, p-value = 0.6805

可得三大参数检验P>0.05,即接受原假设,数据满足独立性,正态性和方差齐性。

3.2方差分析表

下面检验三个总体的均值是否相等,做出假设:
H0:μ1=μ2=μ3
H1:μ1,μ2,μ3不全相等
由数据可知,r=3,n1=n2=n3=5n=15,则,

SST=i=13j=1niXij2(i=13j=1niXij)215

SSB=i=13(j=1niXij)2ni(i=13j=1niXij)2n

library(reshape2)
data <- melt(data1,id=c())#进行数据的合并重构
names(data) <- c('id', 'trt', 'val') 
aov=aov(val~trt,data=data)
summary(aov)
            Df   Sum Sq   Mean Sq F value   Pr(>F)    
trt          2 0.001053 0.0005267   32.92 1.34e-05 ***
Residuals   12 0.000192 0.0000160                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
方差来源 平方和 自由度 均方 F比
因素 0.001053333 2 0.0005266667 32.91667
误差 0.000192000 12 0.0000160000
总和 0.001245333 14

F比=32.92>F0.05(2,12)=3.885294,故在0.05显著性水平下拒绝H0,认为各台机器生产的薄板厚度有显著的差异。

3.3 参数估计

接着对未知参数σ2,μi,δi(i=1,2,3)进行点估计以及求均值差的0.95置信区间

σ2^=SSWnr

μ^=X¯

μ^i=X¯i

δ^i=μ^iμ^=X¯iX¯

((X¯jX¯k)±tα/2(nr)SSWnr(1nj+1nk))

#数据建构
machine1=c(0.236,0.238,0.248,0.245,0.243)
machine2=c(0.257,0.253,0.255,0.254,0.261)
machine3=c(0.258,0.264,0.259,0.267,0.262)
Data1=data.frame(machine1,machine2,machine3)
n=15
r=3
n1=n2=n3=5
SST=sum(c(Data1$machine1**2,
          Data1$machine2**2,
          Data1$machine3**2))-(sum(Data1)**2)/n
SSB=sum(c((sum(Data1$machine1)**2)/n1,
          (sum(Data1$machine2)**2)/n2,
          (sum(Data1$machine3)**2)/n3))-(sum(Data1)**2)/n
SSW=SST-SSB
hatsigma2=SSW/(n-r)
hatmu=mean(c(mean(Data1$machine1),
             mean(Data1$machine2),
             mean(Data1$machine3)))
tab2=data.frame(matrix(nrow = 2,ncol = 3))
colnames(tab2)=c("machine1","machine2","machine3")
rownames(tab2)=c("hatmu","hatdelta")
tab2[1,1]=mean(Data1$machine1)
tab2[1,2]=mean(Data1$machine2)
tab2[1,3]=mean(Data1$machine3)
tab2[2,1]=tab2[1,1]-hatmu
tab2[2,2]=tab2[1,2]-hatmu
tab2[2,3]=tab2[1,3]-hatmu
tab3=data.frame(matrix(nrow = 3,ncol = 2))
colnames(tab3)=c("lower","upper")
rownames(tab3)=c("interval12","interval13","interval23")
t=qt(1-0.025,n-r)
tab3[1,1]=mean(Data1$machine1)-mean(Data1$machine2)-
  t*sqrt(SSW/(n-r)*(1/n1+1/n2))
tab3[1,2]=mean(Data1$machine1)-mean(Data1$machine2)+
  t*sqrt(SSW/(n-r)*(1/n1+1/n2))
tab3[2,1]=mean(Data1$machine1)-mean(Data1$machine3)-
  t*sqrt(SSW/(n-r)*(1/n1+1/n3))
tab3[2,2]=mean(Data1$machine1)-mean(Data1$machine3)+
  t*sqrt(SSW/(n-r)*(1/n1+1/n3))
tab3[3,1]=mean(Data1$machine2)-mean(Data1$machine3)-
  t*sqrt(SSW/(n-r)*(1/n2+1/n3))
tab3[3,2]=mean(Data1$machine2)-mean(Data1$machine3)+
  t*sqrt(SSW/(n-r)*(1/n2+1/n3))

总结

在进行数据分析之前,我们要对试验数据进行检验,即独立性检验、正态性检验、方差齐性检验,若三者检验符合条件,则我们可以进行参数分析,如果不符合条件则只能进行非参数分析。
(参数分析:假定数据服从某分布(一般为正态分布),通过样本参数的估计量(x±s)对总体参数(μ)进行检验,比如t检验、方差分析、Pearson的相关分析等。非参数分析:不需要假定总体分布形式,直接对数据的分布进行检验。由于不涉及总体分布的参数,故名「非参数」检验,包括卡方检验、二项分布检验、K-S检验、秩和检验、符号检验、Spearman和Kendall的相关性分析等)。

参考文献

  1. 统计学——单因素方差分析
  2. R语言基础数据分析—单因素方差分析
posted @   郝hai  阅读(1247)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示