Ho una matrice con alcuni valori di correlazione. Ora voglio tracciarlo in un grafico che assomiglia più o meno a quello:
Come posso ottenerlo?
Ho una matrice con alcuni valori di correlazione. Ora voglio tracciarlo in un grafico che assomiglia più o meno a quello:
Come posso ottenerlo?
Risposte:
Veloce, sporco e allo stesso modo:
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))
Sembra piuttosto "meno", ma vale la pena controllare (dato che fornisce più informazioni visive):
Ellissi matrice di correlazione : cerchi delle matrici di correlazione :
Si prega di trovare altri esempi in vignetta corrplot a cui fa riferimento @assylias di seguito.
ellipse:plotcorr
.
La libreria ggplot2 può gestirlo con geom_tile()
. Sembra che potrebbe essere stato eseguito un ridimensionamento nel grafico sopra poiché non ci sono correlazioni negative, quindi tienilo in considerazione con i tuoi dati. Utilizzo del mtcars
set di dati:
library(ggplot2)
library(reshape)
z <- cor(mtcars)
z.m <- melt(z)
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient(low = "blue", high = "yellow")
MODIFICA :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
permette di specificare il colore del punto medio e il valore predefinito è bianco, quindi potrebbe essere una bella regolazione qui. Altre opzioni possono essere trovate sul sito web di ggplot qui e qui .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
con "white"
al centro per lasciare che i colori riflettano la simmetria della correlazione efficiente.
scale_fill_gradient2()
raggiunga la funzionalità che descrivi automaticamente. Non sapevo che esistesse.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
renderà interattivo
X1
utilizzare:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
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:
Piuttosto elegante IMO
Questo tipo di grafico è chiamato "mappa di calore" tra gli altri termini. Una volta ottenuta la matrice di correlazione, tracciarla utilizzando uno dei vari tutorial disponibili.
Utilizzo della grafica di base: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
Utilizzando ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Ho lavorato a qualcosa di simile alla visualizzazione pubblicata da @daroczig, con il codice pubblicato da @Ulrik utilizzando la plotcorr()
funzione delellipse
pacchetto. Mi piace l'uso dei puntini di sospensione per rappresentare le correlazioni e l'uso dei colori per rappresentare la correlazione negativa e positiva. Tuttavia, volevo che i colori accattivanti risaltassero 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 a 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 è prossima a 1 e -1, l'ellisse bianca è piccola e gran parte del cerchio colorato è visibile. Quando la correlazione è prossima allo 0, l'ellisse bianca è grande e una piccola parte del cerchio colorato è visibile.
La funzione plotcor()
è disponibile su https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .
Di mtcars
seguito è mostrato un esempio del grafico risultante utilizzando il set di dati.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Mi rendo conto che è passato un po 'di tempo, ma i nuovi lettori potrebbero essere interessati rplot()
dal corrr
pacchetto ( https://cran.rstudio.com/web/packages/corrr/index.html ), che può produrre il tipo di trame menzionato da @daroczig , ma progettare per un approccio alla pipeline di dati:
install.packages("corrr")
library(corrr)
mtcars %>% correlate() %>% rplot()
mtcars %>% correlate() %>% rearrange() %>% rplot()
mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15)
mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15)
mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15)
La funzione corrplot () dal pacchetto corrplot R può essere utilizzata anche 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 mappa termica interattiva creata con il pacchetto qtlcharts .
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Di seguito è un'immagine statica della trama risultante.
Puoi vedere la versione interattiva sul mio blog . Passa il mouse sulla mappa termica 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 con il mouse sui punti dello scatterplot si ottiene il nome della riga (in questo caso la marca dell'auto).
Dato che non posso commentare, devo dare il mio 2c alla risposta di daroczig come risposta ...
Il grafico a dispersione dell'ellisse proviene effettivamente dal pacchetto ellipse 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 belle immagini trovate qui