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

相关推荐
QH_ShareHub8 小时前
从 R 到 Python:数据科学生态的“双语”对照手册
开发语言·python·r语言
Yolo566Q9 小时前
环境土壤物理模型HYDRUS1D/2D/3D实践技术应用系统性学习
大数据·开发语言·gpt·学习·arcgis·r语言
知识分享小能手9 小时前
R语言入门学习教程,从入门到精通,R语言流程控制语句(5)
开发语言·学习·r语言
知识分享小能手1 天前
R语言入门学习教程,从入门到精通,R语言数据结构(4)
数据结构·学习·r语言
胖哥真不错2 天前
R实现负二项回归模型项目实战
回归·r语言·毕业设计·项目实战·负二项回归模型
知识分享小能手2 天前
R语言入门学习教程,从入门到精通,R语言入门(3)
开发语言·学习·r语言
赵钰老师3 天前
R语言在生态环境领域中的应用
开发语言·数据分析·r语言
知识分享小能手3 天前
R语言入门学习教程,从入门到精通,集成开发环境RStudio(2)
开发语言·学习·r语言
Biomamba生信基地3 天前
拷贝数变异分析的python实现及R语言对比
python·r语言·生物信息学·单细胞测序
生物信息与育种4 天前
实战总结:用 rMVP 做植物 GWAS 的标准工作流与避坑指南
人工智能·深度学习·职场和发展·数据分析·r语言