1. 程式人生 > >R軟體學習筆記-7(方差分析)

R軟體學習筆記-7(方差分析)

方差分析的基本步驟:

1、建立檢驗假設; H0:多個樣本總體均值相等; H1:多個樣本總體均值不相等或不全等。 檢驗水準為0.05。

2、計算檢驗統計量F值;
3、確定P值並作出推斷結果。

基本假設:

1. 方差分析的假定條件為: (1)各處理條件下的樣本是隨機的。 (2)各處理條件下的樣本是相互獨立的,否則可能出現無法解析的輸出結果。 (3)各處理條件下的樣本分別來自正態分佈總體,否則使用非引數分析。 (4)各處理條件下的樣本方差相同,即具有齊效性。

應用條件:

各樣本是相互獨立的隨機樣本

  1. 各樣本是相互獨立的隨機樣本
  2. 各樣本均來自正態分佈總體
3. 各樣本的總體方差相等,即具有方差齊性
4.在不滿足正態性時可以用非引數檢驗



2. 方差分析的假設檢驗 假設有K個樣本,如果原假設H0樣本均數都相同K個樣本有共同的方差σ ,則K個樣本來自具有共同方差σ和相同均值的總體。 如果經過計算,組間均方遠遠大於組內均方,則推翻原假設,說明樣本來自不同的正態總體,說明處理造成均值的差異有統計意義。否則承認原假設,樣本來自相同總體,處理間無差異。

###############F分佈

set.seed(12345)
x<-rnorm(1000,0,1)
Ord<-order(x,decreasing=FALSE)
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)         ##legend函式參見後面的的文章,paste函式表示的是將兩個向量粘合在一起,中間用seq做分割



單因素方差分析

##################單因素方差分析
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)

均值變化折線圖
##############均值變化折線圖(帶置信區間)
install.packages("gplots")
library("gplots")
plotmeans(MPG~ModelYear,data=CarData,p=0.95,use.t=TRUE,xlab="年代車型",ylab="平均MPG",main="不同年代車型MPG總體均值變化折線圖(95%置信區間)")

正態性檢驗一

###########檢驗方差分析的前提假設(正態性檢驗一)
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)

正態性檢驗二

###########檢驗方差分析的前提假設(正態性檢驗二)
for(i in unique(CarData$ModelYear)){
 T<-subset(CarData,CarData$ModelYear==i)
 R<-ks.test(T$MPG,"pnorm")
 print(R)

}

方差齊性性檢驗

#########檢驗方差分析的前提假設(方差齊性性檢驗)
install.packages("car")
library("car")
leveneTest(CarData$MPG,CarData$ModelYear, center=mean)

多重比較檢驗

##############多重比較檢驗
OneWay<-aov(MPG~ModelYear,data=CarData)
OneWay$coefficients
TukeyHSD(OneWay,ordered=FALSE,conf.level=0.95)
Result<-TukeyHSD(OneWay,ordered=TRUE,conf.level=0.95)
LineCol<-vector()
LineCol[Result[[1]][,4]<0.05]<-2
LineCol[Result[[1]][,4]>=0.05]<-1
par(las=2)
par(mar=c(5,8,4,2))
plot(Result,cex.axis=0.5,col=LineCol)

功效分析

###################單因素方差分析的功效分析
library("pwr")
pwr.anova.test(k=13,f=0.25,sig.level=0.05,power=0.8)

#############效應量和樣本量的關係曲線
library("pwr")
ES<-seq(from=0.1,to=0.8,by=0.01)
SampleSize<-matrix(nrow=length(ES),ncol=8)
for(i in 3:10){
 for(j in 1:length(ES)){
  result<-pwr.anova.test(k=i,f=ES[j],sig.level=0.05,power=0.8)
  SampleSize[j,i-2]<-ceiling(result$n)
  }
 }
plot(SampleSize[,1],ES,type="l",ylab="效應量",xlab="樣本量(每個水平)",main="單因素方差分析(Alpha=0.05,Power=0.8)")
for(i in 2:8){
 lines(SampleSize[,i],ES,type="l",col=i)
}
legend("topright",title="水平數",paste("k",3:10,sep="="),lty=1,col=1:8)

###################單因素方差分析的置換檢驗
install.packages("lmPerm")
library("lmPerm")
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
OneWay<-aov(MPG~ModelYear,data=CarData)
anova(OneWay)
Fit<-aovp(MPG~ModelYear,data=CarData,perm="Prob")
anova(Fit)

################單因素協方差分析
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
Result<-aov(MPG~weight+ModelYear,data=CarData)
anova(Result)

e<-CarData$MPG-Result$fitted.values   #剔除協變數影響後的殘差
anova(aov(e~CarData$ModelYear))

var(CarData$MPG)*(398-1)-16777.8-3868.2

install.packages("effects")
library("effects")
effect("ModelYear",Result)
plot(effect("ModelYear",Result))
tapply(CarData$MPG,INDEX=CarData$ModelYear,FUN=mean)

#################單因素協方差分析的前提檢驗
coplot(MPG~weight|ModelYear,data=CarData)

單因素協方差分析的置換檢驗

################單因素協方差分析的置換檢驗
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
Result<-aov(MPG~weight+ModelYear,data=CarData)
anova(Result)
library("lmPerm")
Fit<-aovp(MPG~weight+ModelYear,data=CarData,perm="Prob")
anova(Fit)
多因素方差分析
################多因素方差分析
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
CarData$cylinders<-as.factor(CarData$cylinders)
table(CarData$cylinders)
Result<-aov(MPG~cylinders+ModelYear+cylinders:ModelYear,data=CarData)
anova(Result)

############多因素方差分析的非飽和模型
Result<-aov(MPG~cylinders+ModelYear,data=CarData)
anova(Result)

######視覺化互動效應
interaction.plot(CarData$ModelYear,CarData$cylinders,CarData$MPG,type="b",main="氣缸數和車型對MPG的互動效應",xlab="車型",ylab="MPG均值")

###############多因素方差分析的置換檢驗
CarData<-read.table(file="CarData.txt",header=TRUE)
CarData$ModelYear<-as.factor(CarData$ModelYear)
CarData$cylinders<-as.factor(CarData$cylinders)
Result<-aov(MPG~cylinders+ModelYear,data=CarData)
anova(Result)
library("lmPerm")
Fit<-aovp(MPG~cylinders+ModelYear,data=CarData)
anova(Fit)