分享

数据挖掘专题 | 用R怎么做相关性分析?

 萌小芊 2018-01-09


本文介绍R中常用于相关性分析的四种函数


##### cor

R内置函数,可以直接用于计算两两个向量之间的相关系数(可选方法pearson、spearman、kendall),只能得到相关系数:



##### cor.test 

R内置函数,可以直接用于计算两个向量之间的相关系数(可选方法pearson、spearman、kendall),可得到相关系数($estimate)、置信区间、P值($p.value)等信息:



如果想做多个因子两两间的相关性,则需要更优的方法去处理分析。

以psych包中的sat.act数据为例:



##### rcorr

Hmisc包,输入数值型矩阵,计算两两之间的相关性(可选方法pearson、spearman),适用于多比较:

install.packages('Hmisc')

library(Hmisc)

result = corr(sat.act, type='pearson')


通过$r和$P可以分别得到相关系数和P值的邻接矩阵。


##### corr.test

psych包,输入矩阵或数据框,计算两两之间的相关性(可选方法pearson、spearman、kendall), 适用于多比较,可对P值进行校正:

install.packages('psych')

library(psych)

result = corr.test(sat.act, method='pearson', adjust='BH')

如果参数里设置了P值矫正方法,则矫正的P值可通过$p得到:


注意,此时对称的两个值是不同的!而且设置不同的矫正方法所矫正的均是上三角的P值。也即下三角的P值为未矫正的P值。

# 如何取上三角

使用reshape2包中的melt函数:

result$p[lower.tri(result$p)] = NA 

res = melt(result$p, na.rm=T)


综上,对于两个元素之间的相关性计算可使用cor.test,而对于多元素两两间相关性的计算corr.test更优。


### 关于邻接矩阵的整理

可整理成如下格式:


每行是元素i与元素j之间的相关系数Cor及P值,可考虑删除上示两种数据。

脚本可参考:

result$p[lower.tri(result$p)] = NA 

result$r[lower.tri(result$r)] = NA 

res = cbind(melt(result$r, na.rm=T),

            melt(result$p, na.rm=T)[,3])

colnames(res) = c('i', 'j', 'Cor', 'Padj')

res = res[res$i != res$j,]


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多