R语言统计分析——多元方差分析

参考资料: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假设的情况不敏感,也再次验证了存储在货架顶部、中部、底部的谷物养分含量不同。

相关推荐
zhangfeng11331 天前
提示 R for Windows front-end 怎么被防火墙 阻止了 Rscript.exe` 和 `R.exe`区别
windows·r语言·php
全栈开发圈1 天前
新书速览|R语言医学数据分析与可视化
开发语言·数据分析·r语言
木与长清2 天前
人鼠同源基因离线转换
数据库·矩阵·数据分析·r语言
HP-Patience2 天前
【Rmarkdown】快速入门
r语言
HP-Patience2 天前
【Data Mining】01抽样技术
人工智能·数据挖掘·r语言
lihihi3 天前
P1650 [ICPC 2004 Shanghai R] 田忌赛马(同洛谷2587)
开发语言·算法·r语言
请叫我大虾3 天前
数据结构与算法-分裂问题,将数字分成0或1,求l到r之间有多少个1.
java·算法·r语言
MOON404☾3 天前
R语言EDA学习笔记
笔记·学习·数据分析·r语言·eda
AI科技星3 天前
v=c空间光速螺旋量子几何归一化统一场论——全维度ω、r、f推导G与c的终极关联及严格证明
开发语言·opencv·r语言
Katecat9966319 天前
【计算机视觉】基于Faster R-CNN的线段检测与分割实现
计算机视觉·r语言·cnn