【问题标题】:Calculate correlation for more than two variables?计算两个以上变量的相关性?
【发布时间】:2017-04-16 12:16:03
【问题描述】:

我使用以下方法来计算我的数据集的相关性:

cor( var1, var2, method = "method")

但我喜欢创建一个包含 4 个不同变量的相关矩阵。最简单的方法是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    在数据框上使用相同的函数(cor),例如:

    > cor(VADeaths)
                 Rural Male Rural Female Urban Male Urban Female
    Rural Male    1.0000000    0.9979869  0.9841907    0.9934646
    Rural Female  0.9979869    1.0000000  0.9739053    0.9867310
    Urban Male    0.9841907    0.9739053  1.0000000    0.9918262
    Urban Female  0.9934646    0.9867310  0.9918262    1.0000000
    

    或者,在还包含离散变量(有时也称为因子)的数据框上,尝试以下操作:

    > cor(mtcars[,unlist(lapply(mtcars, is.numeric))])
                mpg        cyl       disp         hp        drat         wt        qsec         vs          am       gear        carb
    mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.68117191 -0.8676594  0.41868403  0.6640389  0.59983243  0.4802848 -0.55092507
    cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.69993811  0.7824958 -0.59124207 -0.8108118 -0.52260705 -0.4926866  0.52698829
    disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.71021393  0.8879799 -0.43369788 -0.7104159 -0.59122704 -0.5555692  0.39497686
    hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.44875912  0.6587479 -0.70822339 -0.7230967 -0.24320426 -0.1257043  0.74981247
    drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.00000000 -0.7124406  0.09120476  0.4402785  0.71271113  0.6996101 -0.09078980
    wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.71244065  1.0000000 -0.17471588 -0.5549157 -0.69249526 -0.5832870  0.42760594
    qsec  0.4186840 -0.5912421 -0.4336979 -0.7082234  0.09120476 -0.1747159  1.00000000  0.7445354 -0.22986086 -0.2126822 -0.65624923
    vs    0.6640389 -0.8108118 -0.7104159 -0.7230967  0.44027846 -0.5549157  0.74453544  1.0000000  0.16834512  0.2060233 -0.56960714
    am    0.5998324 -0.5226070 -0.5912270 -0.2432043  0.71271113 -0.6924953 -0.22986086  0.1683451  1.00000000  0.7940588  0.05753435
    gear  0.4802848 -0.4926866 -0.5555692 -0.1257043  0.69961013 -0.5832870 -0.21268223  0.2060233  0.79405876  1.0000000  0.27407284
    carb -0.5509251  0.5269883  0.3949769  0.7498125 -0.09078980  0.4276059 -0.65624923 -0.5696071  0.05753435  0.2740728  1.00000000
    

    【讨论】:

    • 由于此图必然是对称的,因此最好按列出的顺序显示列,按顺序显示行:UF、UM、RF、RM。然后可以将图表限制为 X=Y 线上方和左侧的那些条目。您只需要计算上面列出的相关性的 3/8。
    • 什么图?如果你的意思是上面的相关矩阵,cor实际上只计算下三角然后通过转置获得上三角,查看源文件:)
    • lapply对布尔过滤器进行类型检查。很甜。
    • 如果要添加多个变量的相关系数的显着性怎么办?即在上面的答案中为cor(mtcars[,unlist(lapply(mtcars, is.numeric))])添加星号
    • 然后我会打开一个新问题,@JasonGoal :) 但是请参阅 rapport-package.info/#Correlation 的相关示例
    【解决方案2】:

    如果您想将矩阵与我推荐的一些可视化结合起来(我使用的是内置的iris 数据集):

    library(psych)
    pairs.panels(iris[1:4])  # select columns 1-4
    

    性能分析基本相同,但包括 默认情况下显着性指标。

    library(PerformanceAnalytics)
    chart.Correlation(iris[1:4])
    

    或者这个漂亮而简单的可视化:

    library(corrplot)
    x <- cor(iris[1:4])
    corrplot(x, type="upper", order="hclust")
    

    【讨论】:

    • 如果我的变量是序数的,级别很少,你会建议什么?
    • 你可以给它们一个数字标签(只有当它们是真正的序数并且数字意味着什么时)。但我怀疑它们会更难关联。
    • 我的意思是皮尔逊相关性不好,也许是斯皮尔曼。
    【解决方案3】:

    参见psych 包中的corr.test 函数:

    > corr.test(mtcars[1:4])
    Call:corr.test(x = mtcars[1:4])
    Correlation matrix 
           mpg   cyl  disp    hp
    mpg   1.00 -0.85 -0.85 -0.78
    cyl  -0.85  1.00  0.90  0.83
    disp -0.85  0.90  1.00  0.79
    hp   -0.78  0.83  0.79  1.00
    Sample Size 
         mpg cyl disp hp
    mpg   32  32   32 32
    cyl   32  32   32 32
    disp  32  32   32 32
    hp    32  32   32 32
    Probability value 
         mpg cyl disp hp
    mpg    0   0    0  0
    cyl    0   0    0  0
    disp   0   0    0  0
    hp     0   0    0  0
    

    还有一个无耻的自我广告:https://gist.github.com/887249

    【讨论】:

    • pairs panel 函数还会为您提供相关性,以及变量的分布和回归线。
    • @richiemirrisroe,没错,但pairs 生成的是图表,而不是表格。如果您更喜欢图形而不是表格数据摘要,还有corrgram 包。
    【解决方案4】:

    您可能想看看 Quick-R,它有很多关于如何在 R 中进行基本统计的不错的小教程。例如关于相关性:

    http://www.statmethods.net/stats/correlations.html

    【讨论】:

      【解决方案5】:

      您还可以计算所有变量的相关性,但排除选定的变量,例如:

      mtcars <- data.frame(mtcars)
      # here we exclude gear and carb variables
      cors <- cor(subset(mtcars, select = c(-gear,-carb)))
      

      另外,要计算每个变量和一列之间的相关性,您可以使用sapply()

      # sapply effectively calls the corelation function for each column of mtcars and mtcars$mpg
      cors2 <- sapply(mtcars, cor, y=mtcars$mpg)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-14
        • 2022-08-19
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多