R语言机器学习入门——10

207 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

函数介绍——独立性检验函数

独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设性检验,所谓独立性就是指变量之间是独立的,没有关系。

根据分组计算的频数表就可以进行独立性检验。

主要介绍三种检验方法:卡方检验、Fisher检验、cochan-mantel-haenszel检验

p-value就是probability的值,它是一个通过计算得到的概率值,也就是在原假设为真实,得到最大的或者抄书做得到的检验统计量值的概率。一般将p值定位到0.05,当p<0.05时,拒绝原假设(也就是假设成立),p>0.05是不拒绝原假设。

还是使用arthritis数据集,探究药物治疗有没有成效,检验“treatment”和“improved”是不是相互独立的,如果相互独立,说明二者没有关系,药物治疗没有作用,反之则是有效果。

先使用table()函数计算两者的频数:

mytable <- table(Arthritis$Treatment,Arthritis$Improved)

接下来就可以直接使用chisq.test()函数进行卡方独立检验,直接将结果输入这个函数就行:

chisq.test(mytable)

结果如下,p值约等于0.0014小于0.05,说明两者不是独立的,两者有关系,治疗是有效果的:

这种待检测的变量之间没有顺序的关系,调整两者的顺序,结果是一样的:

mytable <- table(Arthritis$Improved,Arthritis$Treatment)
chisq.test(mytable)

Fisher精确检验:

Fisher精确检验使用的函数是Fisher.test(),同样是进行独立性检验,但是与卡方检验不同的是,Fisher精确检验的原假设是:边界固定的列联表中行和列相互独立的。

还是同样的例子,采用Fisher精确检验:

mytable <- xtabs(~Treatment+Improved,data = Arthritis)
> fisher.test(mytable)

结果为p值约等于0.0013,Fisher检验适合小样本的检验,精度低于卡方检验:

cochan-mantel-haenszel检验:

cochan-mantel-haenszel检验使用的函数是mantelhaen.test(),该鲜艳的原假设是两个名义变量在第三个变量的每一层中都是条件独立的。这个检验需要三个变量,此处我们来检测一下

“treatment”、“sex”以及“improved”之间的关系:

首先计算三个变量的列联表,使用xtabs()计算:

mytable <- xtabs(~Treatment+Improved+Sex,data = Arthritis)
mantelhaen.test(mytable)

结果为p值约等于0.0006,小于0.05,也就说明,药物治疗和改善情况在性别的每一个水平上不独立(因为这里使用了性别做第三层分类量):

如果调整变量顺序,反映的结果是有差别的:

mytable <- xtabs(~Treatment+Sex+Improved,data = Arthritis)
mantelhaen.test(mytable)

结果为p值约等于0.14,大于0.05,也就说明,药物治疗和性别在改善情况的每一个水平上独立(因为这里使用了改善情况做第三层分类量)

函数介绍——相关性分析函数

相关性分析是指对两个或者多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性元素之间需要存在一定的联系或者概率才可以进行相关性分析,简单来说就是变量之间是否有关系(也就是说需要先进行独立检测之后才能进行相关分析)。

相关系数的大小表示相关性的大小,相关系数包括:pearson相关系数、spearman相关系数、kendall相关系数、偏相关系数、多分格相关系数和多系列相关系数

与独立性检验不同,相关性分析中每种方法都没有独立的函数,这里面计算相关性系数都使用同一个函数:cor()函数。

cor()函数可以计算三种相关性系数,包括pearson相关系数、spearman相关系数和kendall相关系数,具体使用哪种方法可以使用选项参数中的参数method来指定(默认是用pearson相关系数),;函数中还有一个use选项,用于指定如何对待缺失值,是不处理还是删除等。

此处我们使用state.x77数据作为实例数据(这是一个矩阵数据):

cor(state.x77)

部分结果截图:

一般相关数据都是在[0,1]之间,数值越大越相关,正负号表示是正相关还是负相关

除了cor()函数之外,还有一个cov()函数可以用来计算协方差,携房产可以用来衡量两个变量的整体误差

例如我们定义两个变量:x,y

x <- state.x77[,c(1,2,3,6)]
y <- state.x77[,c(4,5)]

再使用cor()函数计算两者之间的相关系数:

cor(x,y)

结果看起来会比较整洁、清爽:

cor()函数只能计算三种相关系数,其他相关系数的计算可以通过R的拓展包来实现:

可以使用“ggm”这个包中的pcor()函数计算偏相关系数。

偏相关系数是指在控制一个或者多个变量时,剩余其他变量之间的相互关系:

pcor()函数需要输入两个重要的参数,第一个参数是一个数值向量(前两个数值表示要计算相关系数的下标,其余的数值为条件变量的下标),第二个参数是cov()函数计算出来的协方差结果

比如此处我们想控制收入水平、文盲率和高中毕业率的影响,看人口(第一列)和谋杀率(第五列)之间的关系(先获取列名,不然容易混):

colnames(state.x77)

pcor(c(1,5,2,3,6),cov(state.x77))

偏相关系数的结果: