欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

超快速上手!R语言机器学习实战指南第5篇

最编程 2024-08-09 12:01:03
...

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()函数分别查看每个变量的结果