美文网首页R语言可视化RR语言做图
相关性分析 | R语言 -- 相关性矩阵及可视化

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

作者: 生信摆渡 | 来源:发表于2021-01-21 08:23 被阅读0次

    什么是相关矩阵?

    相关矩阵 又称 相关性矩阵

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

    相关分析有不同的方法: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。

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

    相关文章

      网友评论

        本文标题:相关性分析 | R语言 -- 相关性矩阵及可视化

        本文链接:https://www.haomeiwen.com/subject/sbykzktx.html