双因素方差分析,顾名思义,讨论有两种影响因素的样本的方差分析。
一、不考虑交互作用
1.代码示例
agriculture<-data.frame(
Y=c(325, 292, 316, 317, 310, 318,
310, 320, 318, 330, 370, 365),
A=gl(4,3),
B=gl(3,1,12));
agriculture.aov <- aov(Y ~ A+B, data=agriculture)
source("anova.tab.R"); anova.tab(agriculture.aov)
2.代码解释
anova.tab是自编函数,用以得到方差分析表。
3.结果分析
A的自由度为3,B的自由度为2,residuals的自由度为3×2=6。
sum sq是平方和,mean sq是sum sq/Df。
由P值,说明A(不同品种)对产量有显著影响,但B(施肥方法)对产量无显著影响。
二、考虑交互作用
1.代码示例
tree<-data.frame(
Y=c(23, 25, 21, 14, 15, 20, 17, 11, 26, 21,
16, 19, 13, 16, 24, 20, 21, 18, 27, 24,
28, 30, 19, 17, 22, 26, 24, 21, 25, 26,
19, 18, 19, 20, 25, 26, 26, 28, 29, 23,
18, 15, 23, 18, 10, 21, 25, 12, 12, 22,
19, 23, 22, 14, 13, 22, 13, 12, 22, 19),
A=gl(3,20,60),
B=gl(4,5,60));
tree; ##用于查看数据框的形式
tree.aov <- aov(Y ~ A+B+A:B, data=tree)
tree.aov
source("anova.tab.R"); anova.tab(tree.aov)
2.代码解释
gl()函数用于生成因子水平,其格式为gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)。其中n是整数的级别(因子)数,k是重复数,length是结果的长度。
3.结果分析
由P值,A(树种)效应是高度显著的,但是B(地理位置)、A:B(交互效应)是不显著的。
三、方差齐性检验
与单因素方差分析相同,对于双因素方差分析,数据应满足正态性和方差齐性的要求。故接下来对样本数据进行正态性检验。
1.代码示例
##例7.12##
Y=c(23, 25, 21, 14, 15, 20, 17, 11, 26, 21,
16, 19, 13, 16, 24, 20, 21, 18, 27, 24,
28, 30, 19, 17, 22, 26, 24, 21, 25, 26,
19, 18, 19, 20, 25, 26, 26, 28, 29, 23,
18, 15, 23, 18, 10, 21, 25, 12, 12, 22,
19, 23, 22, 14, 13, 22, 13, 12, 22, 19);
A=gl(3,20,60);
B=gl(4,5,60);
shapiro.test(Y[A==1])
shapiro.test(Y[A==2])
shapiro.test(Y[A==3])
shapiro.test(Y[B==1])
shapiro.test(Y[B==2])
shapiro.test(Y[B==3])
shapiro.test(Y[B==4])
bartlett.test(Y~A, data=tree)
bartlett.test(Y~B, data=tree)
2.代码解释
shapiro.test()为正态W检验方法,用于正态性检验。其使用格式为shapiro.test(x),其中x是由数据构成的向量。P值大于显著性水平认为样本来自正态分布。
3.结果分析
由P值,可见A的三个水平样本均满足正态性假设。
由P值,B的第二个水平对应样本不满足正态性假设,其余均满足。
由P值,因素A、B均满足方差齐性要求。
四、生成随机数进行双因素方差检验
(一)不考虑交互作用且A,B都对Y没有影响
1.代码示例:
agriculture<-data.frame(
Y=rnorm(12,0,1),
A=gl(4,3),
B=gl(3,1,12));
agriculture;
agriculture.aov <- aov(Y~A+B, data=agriculture)
source("anova.tab.R"); anova.tab(agriculture.aov)
2.结果分析
由P值,因素A、B均无显著影响。
(二)考虑交互作用且A,B,A:B都对Y没有影响
1.代码示例
tree<-data.frame(
Y=rnorm(60,0,1),
A=gl(3,20,60),
B=gl(4,5,60));
tree.aov <- aov(Y ~ A+B+A:B, data=tree)
tree.aov
source("anova.tab.R"); anova.tab(tree.aov)
2.结果分析
由P值,A、B、AB交互作用均无显著影响。
(三)不考虑交互作用且A对Y有影响,B没有
1.代码示例
agriculture<-data.frame(
A=gl(4,3),
B=gl(3,1,12),
Y=rnorm(12,0,1)+as.numeric(A)); ##把A的效应加到Y上
agriculture.aov <- aov(Y~A+B, data=agriculture)
source("anova.tab.R"); anova.tab(agriculture.aov)
2.代码解释
as.numeric将因子变量(factor)转化为数值变量(numeric)
3.结果分析
由P值,A因素对样本有显著影响,B因素对样本无显著影响。
(四)考虑交互作用且A、B对Y有影响,A:B没有
1.代码示例
tree<-data.frame(
A=gl(3,20,60),
B=gl(4,5,60),
Y=rnorm(12,0,1)+as.numeric(A)+as.numeric(B));
tree.aov <- aov(Y ~ A+B+A:B, data=tree)
tree.aov
source("anova.tab.R"); anova.tab(tree.aov)
2.结果分析
由P值,A、B因素对样本有显著影响,但交互作用A:B对样本无显著影响。