相关性分析 | R语言 -- 相关性矩阵及可视化

感谢各位简友一直的关注。

请关注:感谢陪伴


什么是相关矩阵?

相关矩阵 又称 相关性矩阵

之前,我们描述了如何在两个变量之间进行相关性测。在本文中,您将学习如何计算相关矩阵,该矩阵用于同时研究多个变量之间的依赖关系。结果是一个包含每个变量与其他变量之间的相关系数的表。

相关分析有不同的方法:Pearson参数相关检验SpearmanKendall基于秩的相关分析。这些方法将在下一节中讨论。

R教程的目的是向您展示如何计算和可视化相关矩阵。我们还提供了用于计算和可视化相关矩阵的在线软件

在R中的计算相关矩阵

R函数

您可能知道,R函数cor()可用于计算相关矩阵。该函数的简化格式为:

cor(x, method = c("pearson", "kendall", "spearman"))

如果您的数据包含缺失值,请使用以下R代码通过按大小写删除来处理缺失值。

cor(x, method = "pearson", use = "complete.obs")

将数据导入R

在这里,我们将使用从内置R数据集mtcars派生的数据作为示例:

# Load data
data("mtcars")
my_data <- mtcars[, c(1,3,4,5,6,7)]
# print the first 6 rows
head(my_data, 6)
                   mpg disp  hp drat    wt  qsec
Mazda RX4         21.0  160 110 3.90 2.620 16.46
Mazda RX4 Wag     21.0  160 110 3.90 2.875 17.02
Datsun 710        22.8  108  93 3.85 2.320 18.61
Hornet 4 Drive    21.4  258 110 3.08 3.215 19.44
Hornet Sportabout 18.7  360 175 3.15 3.440 17.02
Valiant           18.1  225 105 2.76 3.460 20.22

计算相关矩阵

res <- cor(my_data)
round(res, 2)
       mpg  disp    hp  drat    wt  qsec
mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
disp -0.85  1.00  0.79 -0.71  0.89 -0.43
hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00

在上表中,显示了可能的变量对之间的相关系数

请注意,如果您的数据包含缺失值,请使用以下R代码通过来处理缺失值。

cor(my_data, use = "complete.obs")

不幸的是,函数cor()仅返回变量之间的相关系数。在下一节中,我们将使用Hmisc R包来计算相关性p值

具有显着性水平(p值)的相关矩阵

功能 rcorr() [在Hmisc包]能为 皮尔森Spearman相关 计算 显着性水平。对于数据表中所有可能的列对,它都返回相关系数和相关的p值。

  • 简化格式:
rcorr(x, type = c("pearson","spearman"))

x应该是一个矩阵。的相关性类型可以是皮尔森斯皮尔曼

  • 安装Hmisc软件包:
install.packages("Hmisc")
  • 使用rcorr()函数
library("Hmisc")
res2 <- rcorr(as.matrix(my_data))
res2
       mpg  disp    hp  drat    wt  qsec
mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
disp -0.85  1.00  0.79 -0.71  0.89 -0.43
hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00
n= 32 
P
     mpg    disp   hp     drat   wt     qsec  
mpg         0.0000 0.0000 0.0000 0.0000 0.0171
disp 0.0000        0.0000 0.0000 0.0000 0.0131
hp   0.0000 0.0000        0.0100 0.0000 0.0000
drat 0.0000 0.0000 0.0100        0.0000 0.6196
wt   0.0000 0.0000 0.0000 0.0000        0.3389
qsec 0.0171 0.0131 0.0000 0.6196 0.3389       

rcorr()函数的输出包含 -r 相关矩阵-P 显著性水平

如果要从输出中提取p值或相关系数,请使用以下命令:

# Extract the correlation coefficients
res2$r
# Extract p-values
res2$P

格式化相关矩阵的简单函数

本节提供了一个简单的函数,用于将相关矩阵格式化为具有4列的表,其中包含:

  • 第1列:行名(相关性测试的变量1)
  • 第2列:列名(相关性测试的变量2)
  • 第3列:相关系数
  • 第4列:相关性的p值

可以使用以下自定义函数:

# ++++++++++++++++++++++++++++
# flattenCorrMatrix
# ++++++++++++++++++++++++++++
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
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]
    )
}

用法示例:

library(Hmisc)
res2<-rcorr(as.matrix(mtcars[,1:7]))
flattenCorrMatrix(res2$r, res2$P)
    row column         cor            p
1   mpg    cyl -0.85216194 6.112697e-10
2   mpg   disp -0.84755135 9.380354e-10
3   cyl   disp  0.90203285 1.803002e-12
4   mpg     hp -0.77616835 1.787838e-07
5   cyl     hp  0.83244747 3.477856e-09
6  disp     hp  0.79094857 7.142686e-08
7   mpg   drat  0.68117189 1.776241e-05
8   cyl   drat -0.69993812 8.244635e-06
9  disp   drat -0.71021390 5.282028e-06
10   hp   drat -0.44875914 9.988768e-03
11  mpg     wt -0.86765939 1.293956e-10
12  cyl     wt  0.78249580 1.217567e-07
13 disp     wt  0.88797992 1.222311e-11
14   hp     wt  0.65874785 4.145833e-05
15 drat     wt -0.71244061 4.784268e-06
16  mpg   qsec  0.41868404 1.708199e-02
17  cyl   qsec -0.59124213 3.660527e-04
18 disp   qsec -0.43369791 1.314403e-02
19   hp   qsec -0.70822340 5.766250e-06
20 drat   qsec  0.09120482 6.195823e-01
21   wt   qsec -0.17471591 3.388682e-01

可视化相关矩阵

在R软件中可以用不同的方式显示相关矩阵

  • symnum()函数
  • corrplot()函数绘制相关图
  • 散点图
  • 热图

使用 symnum() 函数:符号数字编码

R函数 symnum() 根据相关程度用符号替换相关系数。它以相关矩阵作为参数:

  • 简化格式
symnum(x, cutpoints = c(0.3, 0.6, 0.8, 0.9, 0.95),
       symbols = c(" ", ".", ",", "+", "*", "B"),
       abbr.colnames = TRUE)
  • x:可视化的相关矩阵

  • cutpoints 相关系数的临界点。0和0.3之间的相关系数用空格(“”)替换;0.3和0.6之间的相关系数用“。”替换;等等…

  • symbol:要使用的符号。

  • abbr.colnames:逻辑值。如果为TRUE,则缩写名称。

  • 用法示例

symnum(res, abbr.colnames = FALSE)
     mpg disp hp drat wt qsec
mpg  1                       
disp +   1                   
hp   ,   ,    1              
drat ,   ,    .  1           
wt   +   +    ,  ,    1      
qsec .   .    ,          1   
attr(,"legend")
[1] 0 ' ' 0.3 '.' 0.6 ',' 0.8 '+' 0.9 '*' 0.95 'B' 1

如图例所示,00.3之间的相关系数由空格(“”)替换;0.3和0.6之间的相关系数由“。”替换;等等…

使用corrplot()函数:绘制相关图

在同名程序包中的函数corrplot()创建相关矩阵的图形显示,突出显示数据表中最相关的变量。

在该图中,相关系数根据该值着色。相关矩阵也可以根据变量之间的关联程度进行重新排序。

  • 安装corrplot
install.packages("corrplot")
  • 使用corrplot()创建一个相关图

函数corrplot()相关矩阵作为第一个参数。第二个参数(类型=“上层”)用于仅显示相关矩阵的上三角。

library(corrplot)
corrplot(res, type = "upper", order = "hclust", 
         tl.col = "black", tl.srt = 45)
相关矩阵-R软件和统计

正相关以蓝色显示,负相关以红色显示。颜色强度和圆圈的大小与相关系数成正比。在相关图的右侧,图例颜色显示了相关系数和相应的颜色。

  • 使用“ hclust”方法根据相关系数相关矩阵进行重新排序。
  • tl.col(用于文本标签颜色)和tl.srt(用于文本标签字符串旋转)用于更改文本的颜色和旋转。
  • 参数类型的可能值为:“ upper”,“ lower”,“ full”

阅读更多:使用corrplot可视化相关矩阵

也可以将相关图与显着性检验相结合。我们将通过rcorr()函数(在Hmisc包中)使用在上一节中生成的结果res.cor2

# Insignificant correlation are crossed
corrplot(res2$r, type="upper", order="hclust", 
         p.mat = res2$P, sig.level = 0.01, insig = "blank")
# Insignificant correlations are leaved blank
corrplot(res2$r, type="upper", order="hclust", 
         p.mat = res2$P, sig.level = 0.01, insig = "blank")
相关矩阵-R软件和统计

在上图中,p值> 0.01的相关被认为是无关紧要的。在这种情况下,相关系数值留为空白或添加叉号。

使用chart.Correlation():绘制散点图

软件包 PerformanceAnalytics中 的功能chart.Correlation() [可用于显示相关矩阵的图表。

  • 安装PerformanceAnalytics
install.packages("PerformanceAnalytics")
  • 使用chart.Correlation()
library("PerformanceAnalytics")
my_data <- mtcars[, c(1,3,4,5,6,7)]
chart.Correlation(my_data, histogram=TRUE, pch=19)
散点图,图表

在上图中:

  • 每个变量的分布都显示在对角线上。
  • 在对角线的底部:显示带有拟合线的二元散点图
  • 在对角线的顶部:相关值加上显着性水平(以星标表示)
  • 每个显着性水平都与一个符号相关联:p值(0、0.001、0.01、0.05、0.1、1)<=>符号(“ ***”,“ **”,“ *”,“。”,“ ”)

使用heatmap()

# Get some colors
col<- colorRampPalette(c("blue", "white", "red"))(20)
heatmap(x = res, col = col, symm = TRUE)
相关矩阵的热图
  • x:要绘制的相关矩阵
  • col:调色板
  • symm:逻辑指示x是否应对称对待;仅当x是方矩阵时才为true。

觉得有用的老铁麻烦点个小爱心~😏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容