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

相关推荐
邢博士谈科教18 分钟前
比传统机器学习更先进的深度学习神经网络的二分类建模全流程教程
数据挖掘·r语言·数据可视化
环能jvav大师2 天前
基于R语言的统计分析基础:使用键盘输入数据
开发语言·学习·数据分析·r语言·人机交互
Red Red2 天前
GEO数据的下载和处理|GEO数据转换为Gene symbol|GEO注释文件提取symbol|查看样本标签|查看GEO数据疾病或正常|生物信息基础
数据库·笔记·学习·r语言·生物信息·geo数据库
不是伍壹2 天前
【R语言】删除数据框中所有行中没有大于200的数值的行
开发语言·r语言
hongyanwin2 天前
商业预测 初识R
r语言·预测
maizeman1262 天前
R语言统计分析——用回归做ANOVA
回归·r语言·方差分析·anova·线性模型
武艺晴小朋友你好3 天前
基于scRNA-data,运用pySCENIC寻找细胞群里面活跃的调节子
r语言·数据可视化·r语言-4.2.1
老身聊发少年狂3 天前
R语言xlsx,txt文件处理:以《书摘》00年-10年资源合集整理为例
开发语言·r语言
为为-180-3121-14553 天前
R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
开发语言·r语言
阿昆的科研日常3 天前
R语言论文插图模板第9期—滑珠散点图
开发语言·r语言·可视化·论文插图