前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言相关性分析简单小例子

R语言相关性分析简单小例子

作者头像
用户7010445
发布2020-04-14 14:38:15
1.9K0
发布2020-04-14 14:38:15
举报
文章被收录于专栏:小明的数据分析笔记本
原文链接

http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start-guide-to-analyze-format-and-visualize-a-correlation-matrix-using-r-software#at_pco=smlwn-1.0&at_si=5e8f19ae4cd478e7&at_ab=per-2&at_pos=0&at_tot=1

相关性分析的应用场景

一些样本,每个样本会测一些指标,我想初步探索一下这些指标之间是否存在关联。具体场景:我收集了好多个品种的苹果成熟果实,每个品种的苹果我都会测一些指标,比如表型指标:果重;生理指标:可溶性糖,有机酸,花青素含量等等。

做完实验数据整理到excel中,另存为csv格式

数据是我胡编乱造的,没有实际意义!

读入数据
代码语言:javascript
复制
csvpath<-file.choose()
csvpath
df<-read.csv(csvpath,header=T,row.names = 1)
df

这样就把数据读进来存储到df里了

R语言里自带的相关性分析的函数是cor(),直接将数据放到括号里就可以了。默认的皮尔逊相关性分析

代码语言:javascript
复制
> cor(df)
              fruit_weight soluble_sugar organic_acid anthocyanin
fruit_weight    1.00000000    0.06342157   -0.2647533   0.1038605
soluble_sugar   0.06342157    1.00000000    0.2580373  -0.2590438
organic_acid   -0.26475334    0.25803726    1.0000000  -0.2241183
anthocyanin     0.10386047   -0.25904381   -0.2241183   1.0000000

通过method参数指定其他方法

代码语言:javascript
复制
> cor(df,method = 'sperman')
Error in match.arg(method) :
  'arg' should be one of “pearson”, “kendall”, “spearman”
> cor(df,method = 'spearman')
              fruit_weight soluble_sugar organic_acid anthocyanin
fruit_weight     1.0000000     0.1357143   -0.1714286   0.1892857
soluble_sugar    0.1357143     1.0000000    0.2821429  -0.2000000
organic_acid    -0.1714286     0.2821429    1.0000000  -0.2142857
anthocyanin      0.1892857    -0.2000000   -0.2142857   1.0000000

但是论文里的相关性分析通常都是带有p值,就是右上角会有星号。可以借助Hmisc包中的rcorr函数

这个函数要求的输入数据格式是矩阵,同过csv文件读入的数据格式是数据框,需要借助函数as.matrix()进行转换

代码语言:javascript
复制
library(Hmisc)
res2<-rcorr(as.matrix(df))

运行完以后res2里面存储3个内容,可以通过$符号获取

代码语言:javascript
复制
> res2$r
              fruit_weight soluble_sugar organic_acid anthocyanin
fruit_weight    1.00000000    0.06342157   -0.2647533   0.1038605
soluble_sugar   0.06342157    1.00000000    0.2580373  -0.2590438
organic_acid   -0.26475334    0.25803726    1.0000000  -0.2241183
anthocyanin     0.10386047   -0.25904381   -0.2241183   1.0000000
> res2$n
              fruit_weight soluble_sugar organic_acid anthocyanin
fruit_weight            15            15           15          15
soluble_sugar           15            15           15          15
organic_acid            15            15           15          15
anthocyanin             15            15           15          15
> res2$P
              fruit_weight soluble_sugar organic_acid anthocyanin
fruit_weight            NA     0.8223325    0.3402882   0.7126110
soluble_sugar    0.8223325            NA    0.3531301   0.3511885
organic_acid     0.3402882     0.3531301           NA   0.4219767
anthocyanin      0.7126110     0.3511885    0.4219767          NA

r是相关性系数,n是样本个数,p是相关性检验的p值

接下来我想看看谁跟谁的相关性比较高,比如筛选相关系数绝对值大于0.8。矩阵筛选我还不知道如何实现。原文自己写了一个函数,将矩阵转换为数据框,这样筛选起来就容易很多了。函数是

代码语言:javascript
复制
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor  =(cormat)[ut],
    p = pmat[ut]
  )
}

两个参数,一个是相关性,一个是p值

代码语言:javascript
复制
> flattenCorrMatrix(res2$r,res2$P)
            row        column         cor         p
1  fruit_weight soluble_sugar  0.06342157 0.8223325
2  fruit_weight  organic_acid -0.26475334 0.3402882
3 soluble_sugar  organic_acid  0.25803726 0.3531301
4  fruit_weight   anthocyanin  0.10386047 0.7126110
5 soluble_sugar   anthocyanin -0.25904381 0.3511885
6  organic_acid   anthocyanin -0.22411828 0.4219767

筛选一个相关系数绝对值大于0.25的

代码语言:javascript
复制
> df1<-flattenCorrMatrix(res2$r,res2$P)
> abs(df1$cor)>0.25
[1] FALSE  TRUE  TRUE FALSE  TRUE FALSE
> df1[abs(df1$cor)>0.25,]
            row       column        cor         p
2  fruit_weight organic_acid -0.2647533 0.3402882
3 soluble_sugar organic_acid  0.2580373 0.3531301
5 soluble_sugar  anthocyanin -0.2590438 0.3511885

接下来就是数据展示了,一个是表格,一个是图。接下来介绍画图: 一种展示方法

代码语言:javascript
复制
library(corrplot)
corrplot(res2$r,type="upper",tl.col ="black",tl.srt = 45)

另外一种展示方法

代码语言:javascript
复制
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(df,histogram = T,pch=19)

还可以选择用热图来展示

代码语言:javascript
复制
col<-colorRampPalette(c("blue","white","red"))(20)
heatmap(x=res2$r,col=col,symm=T)
heatmap(x=res2$r,col=col,symm=F)

暂时还不知道symm参数的作用是啥?

数据大家完全可以自己构造,原文用到的数据是R本身自带的例子mtcars,但是各项指标可能不太好理解。所以我就自己随便伪造了一份数据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文链接
    • 相关性分析的应用场景
      • 读入数据
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档