首页 文章

数据帧的多个变量之间的相关性

提问于
浏览
5

我在 R 中有一个 data.frame 的10个变量 . 让我们称他们为 var1 var2 ... var10

我想找到 var1 之一与 var2var3 ... var10 的相关性

我们怎么能这样做?

cor 函数可以一次找到2个变量之间的相关性 . 通过使用我必须为每个分析编写 cor 函数

2 回答

  • 0

    我的包 corrr ,有助于探索相关性,有一个简单的解决方案 . 我将使用mtcars数据集作为示例,并说我们要关注 mpg 与所有其他变量的相关性 .

    install.packages("corrr")  # though keep eye out for new version coming soon
    library(corrr)
    mtcars %>% correlate() %>% focus(mpg)
    
    
    #>    rowname        mpg
    #>      <chr>      <dbl>
    #> 1      cyl -0.8521620
    #> 2     disp -0.8475514
    #> 3       hp -0.7761684
    #> 4     drat  0.6811719
    #> 5       wt -0.8676594
    #> 6     qsec  0.4186840
    #> 7       vs  0.6640389
    #> 8       am  0.5998324
    #> 9     gear  0.4802848
    #> 10    carb -0.5509251
    

    这里, correlate() 生成相关数据框, focus() 让您可以专注于某些变量与所有其他变量的相关性 .

    仅供参考, focus()dplyr 包中的 select() 类似,不同之处在于它会改变行和列 . 因此,如果您熟悉 select() ,您会发现它很容易使用 focus() . 例如 . :

    mtcars %>% correlate() %>% focus(mpg:drat)
    
    #>   rowname        mpg        cyl       disp         hp        drat
    #>     <chr>      <dbl>      <dbl>      <dbl>      <dbl>       <dbl>
    #> 1      wt -0.8676594  0.7824958  0.8879799  0.6587479 -0.71244065
    #> 2    qsec  0.4186840 -0.5912421 -0.4336979 -0.7082234  0.09120476
    #> 3      vs  0.6640389 -0.8108118 -0.7104159 -0.7230967  0.44027846
    #> 4      am  0.5998324 -0.5226070 -0.5912270 -0.2432043  0.71271113
    #> 5    gear  0.4802848 -0.4926866 -0.5555692 -0.1257043  0.69961013
    #> 6    carb -0.5509251  0.5269883  0.3949769  0.7498125 -0.09078980
    
  • 4

    另一种方法是使用库Hmisc和corrplot来获得所有对之间的相关性,重要性和漂亮的情节如下:

    #Your data frame (4 variables instead of 10)    
    df<-data.frame(a=c(1:100),b=rpois(1:100,.2),c=rpois(1:100,.4),d=rpois(1:100,.8),e=2*c(1:100))
    
    #setup 
    library(Hmisc) 
    library(corrplot)
    
     df<-scale(df)# normalize the data frame. This will also convert the df to a matrix.  
    
    corr<-rcorr(df) # compute Pearson's (or spearman's corr) with rcorr from Hmisc package. I like rcorr as it allows to separately access the correlations, the # or observations and the p-value. ?rcorr is worth a read.
    corr_r<-as.matrix(corr[[1]])# Access the correlation matrix. 
    corr_r[,1]# subset the correlation of "a" (=var1 ) with the rest if you want.
    pval<-as.matrix(corr[[3]])# get the p-values
    
    corrplot(corr_r,method="circle",type="lower",diag=FALSE,tl.col="black",tl.cex=1,tl.offset=0.1,tl.srt=45)# plot all pairs
    
    corrplot(corr_r,p.mat = pval,sig.level=0.05,insig = "blank",method="circle",type="lower",diag=FALSE,tl.col="black",tl.cex=1,tl.offset=0.1,tl.srt=45)# plot pairs with significance cutoff defined by "p.mat"
    

相关问题