Trazar la matriz de correlación en un gráfico

Tengo una matriz con algunos valores de correlación. Ahora quiero trazar eso en un gráfico que se parece más o menos a eso:

enter image description here

¿Cómo puedo lograr eso?

Rápido, sucio y en el estadio:

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

enter image description here

Parece más bien “menos”, pero vale la pena verificarlo (como dar más información visual):

Elipses de la matriz de correlación : Elipses de la matriz de correlación Círculos de matriz de correlación : Círculos de matriz de correlación

Encontrará más ejemplos en la viñeta de corrplot a los que hace referencia @assylias a continuación.

Muy fácil con Lattice :: levelplot:

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

enter image description here

La biblioteca ggplot2 puede manejar esto con geom_tile() . Parece que se pudo haber realizado algún cambio de escala en ese gráfico anterior, ya que no hay ninguna correlación negativa, así que tenlo en cuenta con tus datos. Usando el conjunto de datos 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") 

enter image description here

EDITAR :

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

enter image description here

permite especificar el color del punto medio y el valor predeterminado es el blanco, por lo que puede ser un buen ajuste aquí. Se pueden encontrar otras opciones en el sitio web ggplot aquí y aquí .

Usa el paquete 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") } 

Por ejemplo:

enter image description here

Más bien elegante IMO

Ese tipo de gráfico se llama un “mapa de calor”, entre otros términos. Una vez que tienes tu matriz de correlación, traza usando uno de los varios tutoriales que hay.

Usando gráficos base: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

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

He estado trabajando en algo similar a la visualización publicada por @daroczig, con un código publicado por @Ulrik usando la función plotcorr() del paquete ellipse . Me gusta el uso de elipses para representar correlaciones y el uso de colores para representar la correlación negativa y positiva. Sin embargo, quería que los llamativos colores se destacaran por correlaciones cercanas a 1 y -1, no para aquellos cercanos a 0.

Creé una alternativa en la que las elipsis blancas se superponen en círculos de colores. Cada elipse blanca tiene un tamaño tal que la proporción del círculo de color visible detrás de ella es igual a la correlación al cuadrado. Cuando la correlación es cercana a 1 y -1, la elipse blanca es pequeña y gran parte del círculo de color es visible. Cuando la correlación es cercana a 0, la elipse blanca es grande y poco del círculo de color es visible.

La función, plotcor() , está disponible en https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .

A continuación, se muestra un ejemplo de la gráfica resultante utilizando el conjunto de datos mtcars .

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

resultado de la llamada a la función plotcor ()

Me doy cuenta de que ha pasado un tiempo, pero los nuevos lectores pueden estar interesados ​​en rplot() del paquete corrr ( https://cran.rstudio.com/web/packages/corrr/index.html ), que puede producir los tipos de plots @daroczig menciona, pero diseña para un enfoque de canalización de datos:

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

La función corrplot () del paquete corrplot R también se puede usar para trazar un correlogtwig.

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

varios artículos que describen cómo calcular y visualizar la matriz de correlación se publican aquí:

Otra solución que aprendí recientemente es un mapa de calor interactivo creado con el paquete qtlcharts .

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

A continuación se muestra una imagen estática de la ttwig resultante. enter image description here

Puedes ver la versión interactiva en mi blog . Desplácese sobre el mapa de calor para ver los valores de fila, columna y celda. Haga clic en una celda para ver un diagtwig de dispersión con símbolos coloreados por grupo (en este ejemplo, el número de cilindros, 4 es rojo, 6 es verde y 8 es azul). Al pasar el cursor sobre los puntos en el diagtwig de dispersión se obtiene el nombre de la fila (en este caso, la marca del automóvil).

Como no puedo comentar, tengo que dar mi 2c a la respuesta por daroczig como un guion …

La gráfica de dispersión elipse es del paquete elipse y se genera 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]) 

(desde la página man)

El paquete de corrplot también puede, como se sugiere, ser útil con imágenes bonitas encontradas aquí