方差分析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有个水平,分别记为,在每个水平下的观测指标变量样本值看做一个总体,故有个总体,假设:
(1)每个总体均服从正态分布,且方差相等,即
(2)每个总体中抽取的样本相互独立(为因素水平的实验数据个数)
通过假设检验来探究期望控制变量对观测指标变量是否有显著影响,如果有,则意味着A因素不同水平对应的观测指标变量总体的均值有显著差异。因而可作出如下假设:
;
不完全相等
2.2 方差分析的任务
任务一:检验个总体的均值是否相等,即完成上述假设的检验;
任务二:作出未知参数的估计。
(1)均值相等的检验——方差分析表
由假设有,即有,故可视为随机误差,且相互独立,由假设前提知,各个相互独立。从而得到模型:
记数据总个数为
总平均值为
用因素水平下的总体均值与总平均值的差异来表示因素水平对观测指标变量的效应:。效应间的关系为
从而改写模型为:
可得,前述假设等价为:
不全为0
这是因为当且仅当时,
记 因素水平下的样本均值为
A因素的所有水平的样本总均值为
组内离差平方和为:
组间离差平方和为:
总离差平方和为:
SSB可以看做 个变量 的平方和,它们之间仅有一个线性约束条件:
故知SSB的自由度是 。
并且,由SSW和SSB表达式可知二者独立,所以,
当 为真时,
当 不为真时,
因此可得拒绝域为:
因SST的个变量 , 所以SSW的自由度为 。 据上述分析结果,可得方差分析表:
方差来源 | 平方和 | 自由度 | 均方 | F比 |
因素A | SSB | r-1 | ||
误差 | SSW | n-r | ||
总和 | SST | n-1 |
在实际中,可先计算SST和SSB,再由二者相减得到SSW,以简便计算。
(2)未知参数的估计
由知,的无偏估计为:
由知,的无偏估计为:
不管是否为真,,可知的无偏估计为:
当拒绝时,效应不全为0,且,可知,的无偏估计为
当拒绝时,常常需要作出两总体和,的均值差的区间估计,由于
并且与独立,于是,
据此得均值差的置信水平为1-的置信区间为:
三、单因素方差分析举例
设有三台机器,用来生产规格相同的铝合金薄板,并且假定除了机器这一因素之外,其他条件都相同。取样并测量薄板的厚度精确到千分之一厘米,得到结果如下表:
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
可得三大参数检验>0.05,即接受原假设,数据满足独立性,正态性和方差齐性。
3.2方差分析表
下面检验三个总体的均值是否相等,做出假设:
不全相等
由数据可知,=3,,=15,则,
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>=3.885294,故在0.05显著性水平下拒绝,认为各台机器生产的薄板厚度有显著的差异。
3.3 参数估计
接着对未知参数进行点估计以及求均值差的0.95置信区间
#数据建构
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的相关性分析等)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!