R
に10個の変数のdata.frame
があります。それらをvar1
var2
...var10
と呼びましょう
var1
、var2
... var3
に関してvar10
のいずれかの相関関係を見つけたい
どうすればそれができますか?
cor
関数は、一度に2つの変数間の相関を見つけることができます。それを使用して、分析ごとにcor
関数を作成する必要がありました
相関関係の調査に役立つ私のパッケージ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
_
さらに良いことに、1つの変数をすべてにマップするだけでなく、すべての変数を他のすべてにマップするという相関関係を取得できると思います。これは、1行のコードで簡単に実行できます。プリインストールされたmtcars
データセットを使用します。
library(dplyr)
cor(select(mtcars, mpg, wt, disp, drat, qsec, hp ))
別の方法は、ライブラリ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"