R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
这节课讲方差分析
项目实操——方差分析(一)
方差分析称为analysis of variance,简称ANOVA,也称为变异数分析,用于两个及两个以上样本均属差别的显著性检验,从广义上来讲,方差分析也属于回归分析的一种,只不过线性回归的因变量一般是连续型变量,而当自变量是因子时,研究关注的重点通常会从预测转向不同组之间差异的比较,这就是方差分析。
方差分析会大量用在科学研究中,例如实验设计时,进行分组比较,例如药物研究实验,处理组与对照组进行比较
方差分析也分为很多种,比如单因素方差分析,双因素方差分析、协方差分析、多元方差分析、多元协方差分析(R语言实战这本书中有详细介绍)
方差分析多采用aov()函数进行分析,aov()函数的用法与lm()函数类似。下表中列出了R中aov()函数的符号用法:
各种方差分析公式的写法:
变量的顺序很重要:
项目实操——方差分析(二)
单因素方差分析:
这里我们使用multcomp包中的cholesterol数据集进行演示,这个数据集是50个患者接受降低胆固醇治疗的五种疗法的数据,50个患者分为10人一组,每天服用20克药物
这个方案只有治疗方案这一个因子,所以被称为单因素方差分析
首先使用
attach()函数
这里使用attach()函数将数据集的列写入内存,这样便可以直接使用数据集的每一页,而不用每次都使用$来引用数据集,也就是表明以下的命令都在数据集下进行。
library(multcomp) attach(cholesterol)
使用table()计算每一列不同因子的频数
table(trt)
aggregate()函数
接下来使用aggregate()函数进行分组统计数据的平均值:
aggregate(response,by=list(trt),FUN=mean)
进行方差分析:
fit<-aov(response~trt,data=cholesterol) summary(fit)
方差分析的结果主要看F值和P值,F值越大说明组间差异越显著,这里就是五组之间平均值的差别,而P值只是用来衡量F值,P值越小说明F值越可靠,同样可以使用plot()函数绘制方差的结果:
par(mfrow=c(2,2)) >plot(fit)
下面我们再使用lm()函数做一下方差分析,比较一下二者之间的差别:
因为线性拟合要求预测变量是数值型,所以当lm()函数的预测变量是因子时,就会将一系列与因子水平相对应的数值型对照变量来代替因子,不过P值和F值的意义是不变的
fit.lm<-lm(response~trt,data=cholesterol) summary(fit.lm)
下面介绍一个单因素协方差的例子,选取multcomp包中的litter数据集,其中weight是这个数据集的响应变量:
首先使用table()函数统计分组情况:
table(litter$dose)
然后分组统计一下平均数:
aggregate(weight,by=list(dose),FUN=mean)
使用方差分析检验一下组间是否有显著的差异
越基础性的效应越需要放在表达式前面,最好首先是协变量,然后是主效应,以此类推:
summary(fit1)
F值的检验表明,怀孕时间与幼崽出生的体重有关,控制怀孕时间,药物剂量与体重相关,证明药物是有影响的,而不是随机产生的
双因素方差分析案例:
使用内置的toothgrowth数据集:
首先使用xtabs()函数统计频率,结果是一个二维的列联表,再统计一下平均值
xtabs(~supp+dose)
aggregate(len,by=list(supp,dose),FUN=mean)
分组统计平均数的结果显示,剂量越小,二者的差异越明显
使用factor()函数将dose这列的数据转化为因子数据,在进行方差分析:
两个变量的方差分析再加上两个变量还有交互,所以进行方差分析的时候,应该用*号连接两个自变量:
fit<-aov(len~supp*dose,data=ToothGrowth)
使用“HH”包中的interaction.plot()函数可以非常直观的对这个结果进行可视化,而且对任意数据因子涉及的主效应和交互效应都进行了展示:
interaction.plot(dose,supp,len,type="b",col=c('red','blue'),pch=c(16,18),main='interaction between Dose and Supplement Type')
接下来是多元协方差分析的例子:
这里以MASS包中的UScereal数据集进行展示:
前面的预备操作和上面的类似,先使用attach()将数据集写入内存,然后将数据中的非因子型数据转化为因子,再进行方差分析。
attach(UScereal) shelf<-factor(shelf) aggregate(cbind(calories,fat,sugars),by=list(shelf),FUN=mean)
#aggregate只能接受一个变量进行分组,所以这里使用cbind()将三个因变量组合成一个数据框
这里有三个因变量,一个自变量
fit<-manova(cbind(calories,fat,sugars)~shelf) summary(fit)
可以使用summary.aov()函数分别查看每个变量的结果