Tracciare la matrice di correlazione in un grafico

Ho una matrice con alcuni valori di correlazione. Ora voglio tracciare quello in un grafico che sembra più o meno così:

inserisci la descrizione dell'immagine qui

Come posso ottenerlo?

Veloce, sporco e in campo:

library(latex) #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)) 

inserisci la descrizione dell'immagine qui

Piuttosto “meno” assomiglia, ma vale la pena controllare (come dare più informazioni visive):

Ellissi della matrice di correlazione : Ellissi della matrice di correlazione Cerchi della matrice di correlazione : Cerchi della matrice di correlazione

Si prega di trovare altri esempi nella vignetta corrplot a cui fa riferimento @assylias di seguito.

Molto facile con latex :: levelplot:

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

inserisci la descrizione dell'immagine qui

La libreria ggplot2 può gestirli con geom_tile() . Sembra che potrebbe esserci stato qualche ridimensionamento fatto in quella trama in quanto non ci sono correlazioni negative, quindi prendilo in considerazione con i tuoi dati. Usando il set di dati mtcars :

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

inserisci la descrizione dell'immagine qui

MODIFICA :

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

inserisci la descrizione dell'immagine qui

consente di specificare il colore del punto medio e il suo valore predefinito è il bianco, quindi potrebbe essere una buona regolazione qui. Altre opzioni sono disponibili sul sito Web ggplot qui e qui .

Usa il pacchetto corrplot:

 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") } 

Per esempio:

inserisci la descrizione dell'immagine qui

Piuttosto elegante IMO

Quel tipo di grafico è chiamato una “mappa di calore” tra gli altri termini. Una volta ottenuta la matrice di correlazione, tracciala utilizzando uno dei vari tutorial disponibili.

Utilizzando la grafica di base: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

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

Ho lavorato su qualcosa di simile alla visualizzazione pubblicata da @daroczig, con il codice pubblicato da @Ulrik utilizzando la funzione plotcorr() del pacchetto ellipse . Mi piace l’uso delle ellissi per rappresentare le correlazioni e l’uso dei colors per rappresentare la correlazione negativa e positiva. Tuttavia, volevo che i colors acctriggersnti si distinguessero per le correlazioni vicine a 1 e -1, non per quelle vicine a 0.

Ho creato un’alternativa in cui le ellissi bianche sono sovrapposte ai cerchi colorati. Ogni ellisse bianca è dimensionata in modo che la proporzione del cerchio colorato visibile dietro di essa sia uguale alla correlazione al quadrato. Quando la correlazione è vicina a 1 e -1, l’ellisse bianca è piccola e gran parte del cerchio colorato è visibile. Quando la correlazione è vicina a 0, l’ellisse bianca è grande e poco del cerchio colorato è visibile.

La funzione, plotcor() , è disponibile all’indirizzo https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .

Di seguito viene mostrato un esempio del mtcars risultante che utilizza il set di dati mtcars .

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

risultato della chiamata alla funzione plotcor ()

Mi rendo conto che è passato un po ‘di tempo, ma i nuovi lettori potrebbero essere interessati a rplot() dal pacchetto corrr ( https://cran.rstudio.com/web/packages/corrr/index.html ), che può produrre i tipi di le trame @daroczig menzionano, ma progettano per un approccio di pipeline di dati:

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

La funzione corrplot () dal pacchetto R di corrplot può anche essere utilizzata per tracciare un correlogramma.

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

diversi articoli che descrivono come calcolare e visualizzare la matrice di correlazione sono pubblicati qui:

Un’altra soluzione che ho imparato di recente è una heatmap intertriggers creata con il pacchetto qtlcharts .

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

Di seguito è riportata un’immagine statica della trama risultante. inserisci la descrizione dell'immagine qui

Puoi vedere la versione intertriggers sul mio blog . Passa il mouse sopra la heatmap per visualizzare i valori di riga, colonna e cella. Fare clic su una cella per visualizzare un grafico a dispersione con simboli colorati per gruppo (in questo esempio, il numero di cilindri, 4 è rosso, 6 è verde e 8 è blu). Passando sopra i punti nel diagramma a dispersione si dà il nome della fila (in questo caso la marca della macchina).

Dal momento che non posso commentare, devo dare il mio 2c alla risposta di daroczig come un anser …

Il grafico a dispersione ellittica deriva infatti dal pacchetto ellisse e generato con:

 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]) 

(dalla pagina man)

Il pacchetto corrplot può anche - come suggerito - essere utile con le belle immagini trovate qui