2016-07-24 22 views
5

Ich habe eine data.frame von 10 Variablen in R. Nennen wir sie var1var2 ... var10Korrelation zwischen mehreren Variablen eines Datenrahmens

I Korrelation eines var1 in Bezug auf var2, var3 ... var10

So finden wollen, können wir das tun?

cor Funktion kann Korrelation zwischen 2 Variablen gleichzeitig finden. Unter Verwendung dieser musste ich cor Funktion für jede Analyse schreiben

+0

Sie eine Erklärung gelten verwenden: 'gelten (iris [, 2: 4], 2, Funktion (x) cor (x, Iris $ Sepal.Length)) ' –

+6

Sie können' cor (data.frame) 'verwenden, das Ihnen eine Matrix von Korrelationen zwischen allen Variablen gibt . Extrahieren Sie einfach die relevante Zeile/Spalte aus dieser Matrix. – Sumedh

+0

'cor (dat $ var1, dat [c (" var2 "," var3 "," var4 ")])'. Also benutze Philipps Beispiel, cor (iris $ Sepal.Length, iris [2: 4]) ' – user20650

Antwort

3

Mein Paket corrr, das hilft, Korrelationen zu erforschen, hat eine einfache Lösung dafür. Ich werde den mtcars-Datensatz als Beispiel verwenden und sagen, wir wollen uns auf die Korrelation von mpg mit allen anderen Variablen konzentrieren.

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 

Hier correlate() erzeugt einen Datenrahmen Korrelation und focus() können Sie mit allen anderen auf den Korrelationen bestimmter Variablen konzentrieren.

FYI, focus() funktioniert ähnlich wie select() aus dem dplyr Paket, außer dass es Zeilen sowie Spalten ändert. Wenn Sie also mit select() vertraut sind, sollten Sie es einfach finden, zu verwenden. ZB:

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 
0

Eine weitere Möglichkeit, Bibliotheken Hmisc und corrplot zu verwenden, wäre Korrelationen zu erhalten zwischen allen Paaren, die Bedeutung und einem hübschen Grundstück etwa so:

#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"