Zeichnen Sie die Korrelationsmatrix in ein Diagramm ein

Ich habe eine Matrix mit einigen Korrelationswerten. Nun möchte ich das in einem Diagramm darstellen, das mehr oder weniger so aussieht:

Bildbeschreibung hier eingeben

Wie kann ich das erreichen?

Schnell, dreckig und im Stadion:

library(lattice) #Build the horizontal and vertical axis information hor < - c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225") ver <- paste("DM1-", hor, sep="") #Build the fake correlation matrix nrowcol <- length(ver) cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver)) for (i in 1:nrowcol) cor[i,i] = 1 #Build the plot rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb") levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01)) 

Bildbeschreibung hier eingeben

Eher “weniger” aussehen, aber es lohnt sich zu überprüfen (wie geben mehr visuelle Informationen):

Korrelationsmatrixellipsen : Korrelationsmatrixellipsen Korrelationsmatrixkreise : Korrelationsmatrixkreise

Weitere Beispiele finden Sie in der Corrplot-Vignette, auf die @assylias unten verweist.

Sehr einfach mit Gitter :: Levelplot:

 z < - cor(mtcars) require(lattice) levelplot(z) 

Bildbeschreibung hier eingeben

Die Bibliothek ggplot2 kann dies mit geom_tile() umgehen. Es sieht so aus, als ob in diesem Diagramm oben etwas Neuskalierung vorgenommen wurde, da es keine negativen Korrelationen gibt. Berücksichtigen Sie dies bei Ihren Daten. Verwenden des mtcars Datasets:

 library(ggplot2) library(reshape) z < - cor(mtcars) zm <- melt(z) ggplot(zm, aes(X1, X2, fill = value)) + geom_tile() + scale_fill_gradient(low = "blue", high = "yellow") 

Bildbeschreibung hier eingeben

EDIT :

 ggplot(zm, aes(X1, X2, fill = value)) + geom_tile() + scale_fill_gradient2(low = "blue", high = "yellow") 

Bildbeschreibung hier eingeben

erlaubt es, die Farbe des Mittelpunktes zu bestimmen und es ist standardmäßig weiß, so kann hier eine schöne Einstellung sein. Weitere Optionen finden Sie hier und hier auf der ggplot-Website.

Verwenden Sie das corrplot-Paket:

 library(corrplot) data(mtcars) M < - cor(mtcars) ## different color series col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white", "cyan", "#007FFF", "blue","#00007F")) col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7", "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061")) col3 <- colorRampPalette(c("red", "white", "blue")) col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F", "cyan", "#007FFF", "blue","#00007F")) wb <- c("white","black") par(ask = TRUE) ## different color scale and methods to display corr-matrix corrplot(M, method="number", col="black", addcolorlabel="no") corrplot(M, method="number") corrplot(M) corrplot(M, order ="AOE") corrplot(M, order ="AOE", addCoef.col="grey") corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey") corrplot(M, order="AOE", col=col1(10),addCoef.col="grey") corrplot(M, order="AOE", col=col2(200)) corrplot(M, order="AOE", col=col2(200),addCoef.col="grey") corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey") corrplot(M, order="AOE", col=col2(10),addCoef.col="grey") corrplot(M, order="AOE", col=col3(100)) corrplot(M, order="AOE", col=col3(10)) corrplot(M, method="color", col=col1(20), cl.length=21,order = "AOE", addCoef.col="grey") if(TRUE){ corrplot(M, method="square", col=col2(200),order = "AOE") corrplot(M, method="ellipse", col=col1(200),order = "AOE") corrplot(M, method="shade", col=col3(20),order = "AOE") corrplot(M, method="pie", order = "AOE") ## col=wb corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no") ## like Chinese wiqi, suit for either on screen or white-black print. corrplot(M, col = wb, bg="gold2", order="AOE", addcolorlabel="no") } 

Beispielsweise:

Bildbeschreibung hier eingeben

Eher elegante IMO

Diese Art von Graphen wird unter anderen Begriffen als “Heatmap” bezeichnet. Sobald Sie Ihre Korrelationsmatrix erhalten haben, zeichnen Sie sie mit einem der verschiedenen Tutorials auf.

Verwenden von Basisgrafiken: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-olution/

Mit ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/

Ich habe an etwas ähnlich der Visualisierung gearbeitet, die von @daroczig gepostet wurde, mit Code, der von @Ulrik mit der function plotcorr() des ellipse gepostet wurde. Ich mag die Verwendung von Ellipsen, um Korrelationen darzustellen, und die Verwendung von colors, um negative und positive Korrelation darzustellen. Ich wollte jedoch, dass die auffälligen colors für Korrelationen nahe bei 1 und -1 auffallen, nicht für die nahe bei 0.

Ich habe eine Alternative geschaffen, in der weiße Ellipsen farbigen Kreisen überlagert sind. Jede weiße Ellipse ist so groß, dass der Anteil des dahinter sichtbaren farbigen Kreises gleich der quadrierten Korrelation ist. Wenn die Korrelation in der Nähe von 1 und -1 ist, ist die weiße Ellipse klein und ein großer Teil des farbigen Kreises ist sichtbar. Wenn die Korrelation nahe 0 ist, ist die weiße Ellipse groß und ein kleiner Teil des farbigen Kreises ist sichtbar.

Die function plotcor() steht unter https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r zur Verfügung .

Ein Beispiel für den resultierenden Plot, der mtcars Datensatz mtcars ist unten gezeigt.

 library(plotrix) library(seriation) library(MASS) plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1)) 

Ergebnis des Aufrufs der Funktion plotcor ()

Ich weiß, dass es eine Weile her ist, aber neue Leser könnten sich für rplot() aus dem corrr Paket ( https://cran.rstudio.com/web/packages/corrr/index.html ) interessieren, das die Art von Plots @daroczig erwähnt, aber Design für eine Datenpipeline Ansatz:

 install.packages("corrr") library(corrr) mtcars %>% correlate() %>% rplot() 

Bildbeschreibung hier eingeben

 mtcars %>% correlate() %>% rearrange() %>% rplot() 

Bildbeschreibung hier eingeben

 mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15) 

Bildbeschreibung hier eingeben

 mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15) 

Bildbeschreibung hier eingeben

 mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15) 

Bildbeschreibung hier eingeben

Die function corrplot () aus dem corrplot-R-Paket kann auch zum Zeichnen eines Korrelogramms verwendet werden.

 library(corrplot) M< -cor(mtcars) # compute correlation matrix corrplot(M, method="circle") 

Mehrere Artikel beschreiben, wie Korrelationsmatrix zu berechnen und zu visualisieren sind hier veröffentlicht:

Eine andere Lösung, über die ich kürzlich erfahren habe, ist eine interaktive Heatmap, die mit dem Paket qtlcharts erstellt wurde.

 install.packages("qtlcharts") library(qtlcharts) iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE) 

Unten ist ein statisches Bild des resultierenden Plots. Bildbeschreibung hier eingeben

Sie können die interaktive Version in meinem Blog sehen . Bewegen Sie den Mauszeiger über die Heatmap, um die Zeilen-, Spalten- und Zellenwerte anzuzeigen. Klicken Sie auf eine Zelle, um ein Streudiagramm mit Symbolen zu sehen, die nach Gruppe gruppiert sind (in diesem Beispiel ist die Anzahl der Zylinder rot, 6 ist grün und 8 ist blau). Das Schweben über die Punkte im Streudiagramm gibt den Namen der Reihe an (in diesem Fall die Marke des Autos).

Da ich keinen Kommentar abgeben kann, muss ich meiner Antwort von Daroczig meine 2c als Antwort geben …

Das Ellipsenstreuungsplot stammt tatsächlich aus dem Ellipsenpaket und wird erzeugt mit:

 corr.mtcars < - cor(mtcars) ord <- order(corr.mtcars[1,]) xc <- corr.mtcars[ord, ord] colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white", "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C") plotcorr(xc, col=colors[5*xc + 6]) 

(von der Manpage)

Das corrplot-Paket kann auch - wie vorgeschlagen - nützlich sein mit hübschen Bildern, die hier gefunden werden