参考资料:R语言实战【第2版】
当因变量(结果变量)不止一个时,可以使用多元方差分析(MANOVA)进行分析。本例使用MASS包中的UScereal数据集,其中,卡路里、脂肪和糖含量时因变量,货架是三水平(1、2、3)的自变量。分析如下:
R
# 加载MASS包
library(MASS)
# 使用UScereal包
attach(UScereal)
# 将货架变量转换为因子变量
shelf<-as.factor(shelf)
# 设置因变量
y<-cbind(calories,fat,sugars)
# 查看不同货架对应的因变量的平均水平
aggregate(y~shelf,FUN=mean)
# 查看因变量间的协方差矩阵
cov(y)
# 多元方差分析
fit<-manova(y~shelf)
# 查看结果
summary(fit)
summary.aov(fit)
操作步骤分析:①将shelf变量转换为因子变量,从而使它在后续分析中能作为分组变量。②cbind()函数将三个因变量(卡路里、脂肪和糖)合并成一个矩阵。③aggregate()函数可获取货架的各个均值,cov()函数则输出因变量间的方差和协方差。
manova()函数能对组间差异进行多元检验。检验结果显示,三个货架组的营养成分(卡路里、脂肪、糖分)的测量值存在明显差异。由于多元检验是显著的,则可以使用summary.aov()函数对每个变量做单因素方差分析,结果显示,三种货架组中的每种营养成分的测量值也是显著不同的。另外我们还可以用均值比较来判断对于每个因变量,哪种货架与其他货架都是不同的。
1、评估假设检验
单因素多元方差分析有两个前提假设:一个是多元正态性,一个方差-协方差矩阵同质性。第一个假设即指因变量组合成的向量服从一个多元正态分布。可以使用Q-Q图来检验该假设条件。
【若有一个p×l的多元正态随机向量x,均值为μ,协方差矩阵为Σ,那么x与μ的马氏距离的平方服从自由度为p的卡方分布。Q-Q图展示卡方分布的分位数,横纵坐标分别是样本量与马氏距离平方值。如果点全部落在斜率为1,截距为0的直线上,则表明数据服从多元正态分布】
R
# 对因变量取均值
center<-colMeans(y)
# 行数
n<-nrow(y)
# 列数
p<-ncol(y)
# 协方差矩阵
cov<-cov(y)
# 马氏距离
d<-mahalanobis(y,center,cov)
# 绘制Q-Q图
coord<-qqplot(qchisq(ppoints(n),df=p),
d,
main="Q-Q Plot Asssessing Multivariate Normality",
ylab="Mahalanobis D2")
abline(a=0,b=1)
如上图所示,若数据服从多元正态分布,那么数据点将落在直线上,结果可以看到有两个点明显远离直线,可以删除这两个点再重新分析。
方差-协方差矩阵同质性是指各组的协方差矩阵相同,通常可用Box's M检验来评估该假设。但R语言目前没有此函数。另外,该检验对正态性假设很敏感,会导致在大部分案例中直接拒绝同质性假设。也就是说,对于这个重要的假设的检验,我们目前还没有一个很好的方法。
最后,我们还可以用mvoutlier包中的ap.plot()函数来检验多元离群点。如下:
R
library(mvoutlier)
outliers<-aq.plot(y)
outliers
2、稳健多元方差分析
如果多元正态性或方差-协方差均值假设都不满足,或者我们担心多元离群点,那么可以考虑用稳健或非参数版本的MANOVA检验。稳健单因素MANOVA可通过rrcov包中的Wilk.test()函数实现。vegan包中的adonis()函数则提供了非参数MANOVA的等同形式。Wilk.test()函数的应用如下:
R
library(rrcov)
Wilks.test(y,shelf,method="mcd")
从结果来看,稳健MANOVA检验对离群点和违反MANOVA假设的情况不敏感,也再次验证了存储在货架顶部、中部、底部的谷物养分含量不同。