方差分析(Analysis of Variance,简称ANOVA),又称“ 变异数分析”,是R.A.Fisher发明的,用于两个及两个以上 样本均数差别的 显著性检验。 由于各种因素的影响,研究所得的数据呈现波动状。造成波动的原因可分成两类,一是不可控的随机因素,另一是研究中施加的对结果形成影响的可控因素。方差分析是从观测变量的方差入手,研究诸多 控制变量中哪些变量是对观测变量有显著影响的变量。
方差分析有两个重要的前提:
- 控制变量不同水平下观测变量的总体分布为正态分布
- 控制变量不同水平下观测变量的总体具有相同的方差
1.单因素方差分析
1.1概述
一个控制变量的不同水平是否对观测变量产生了显著影响。
F>>1--控制变量对观测值产生显著影响。
F分布密度曲线
x<-rf(1000,df1[i],df2[i])
set.seed(12345)
x<-rnorm(1000,0,1)
Ord<-order(x,decreasing=FALSE)
#order()的返回值是对应“排名”的元素所在向量中的位置
x<-x[Ord]
y<-dnorm(x,0,1)
plot(x,y,xlim=c(-1,5),ylim=c(0,2),type="l",ylab="密度",main="标准正态分布与不同自由度下的F分布密度函数",lwd=1.5)
#######不同自由度的F分布
df1<-c(10,15,30,100)
df2<-c(10,20,25,110)
for(i in 1:4){
x<-rf(1000,df1[i],df2[i])
Ord<-order(x,decreasing=FALSE)
x<-x[Ord]
y<-df(x,df1[i],df2[i])
lines(x,y,lty=i+1)
}
legend("topright",title="自由度",c("标准正态分布",paste(df1,df2,sep="-")),lty=1:5)
1.2数学模型
1.3 R程序
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
aov(MPG~ModelYear,data=CarData)
OneWay<-aov(MPG~ModelYear,data=CarData)
anova(OneWay)
summary(OneWay)
> aov(MPG~ModelYear,data=CarData)
Call:
aov(formula = MPG ~ ModelYear, data = CarData)
Terms:
ModelYear Residuals
Sum of Squares 10401.78 13850.79
Deg. of Freedom 12 385
Residual standard error: 5.998007
Estimated effects may be unbalanced
> OneWay<-aov(MPG~ModelYear,data=CarData)
> anova(OneWay)
Analysis of Variance Table
Response: MPG
Df Sum Sq Mean Sq F value Pr(>F)
ModelYear 12 10402 866.82 24.094 < 2.2e-16 ***
Residuals 385 13851 35.98
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> summary(OneWay)
Df Sum Sq Mean Sq F value Pr(>F)
ModelYear 12 10402 866.8 24.09 <2e-16 ***
Residuals 385 13851 36.0
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
F=24.09,拒绝原假设,不同年份车型的MPG总体均值存在显著差异。
1.4各总体均值的可视化
plotmeans()
install.packages("gplots")
library("gplots")
plotmeans(MPG~ModelYear,data=CarData,p=0.95,use.t=TRUE,xlab="年代车型",ylab="平均MPG",main="不同年代车型MPG总体均值变化折线图(95%置信区间)")
1.5单因素方差分析的前提假设
- 控制变量不同水平下观测变量的总体分布为正态分布
- 控制变量不同水平下观测变量的总体具有相同的方差
总体正态检验
Q-Qplot / K-S test
unique(CarData$ModelYear)
###########检验方差分析的前提假设(正态性检验一)
par(mfrow=c(3,5),mar=c(4,4,4,4))
for(i in unique(CarData$ModelYear)){
T<-subset(CarData,CarData$ModelYear==i)
qqnorm(T$MPG,main=paste(i,"年车型mpg Q-Q图"),cex=0.7)
qqline(T$MPG,distribution = qnorm)
}
############或者
library("lattice")
qqmath(~MPG|ModelYear,data=CarData)
K-S test
总体方差齐性检验
ks.test(数值型向量名,"pnorm")
###########检验方差分析的前提假设(正态性检验二)
for(i in unique(CarData$ModelYear)){
T<-subset(CarData,CarData$ModelYear==i)
R<-ks.test(T$MPG,"pnorm")
print(R)
}
One-sample Kolmogorov-Smirnov test
data: T$MPG
D = 1, p-value < 2.2e-16
alternative hypothesis: two-sided
于正态分布有显著差异。
各方差齐性检验
#########检验方差分析的前提假设(方差齐性性检验)
library("car")
leveneTest(CarData$MPG,CarData$ModelYear, center=mean)