lineas - varias graficas en r
Trazar la matriz de correlación en un gráfico (11)
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í
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:
¿Cómo puedo lograr eso?
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))
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)
z.m <- melt(z)
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient(low = "blue", high = "yellow")
EDITAR :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
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 here y here .
La función corrplot () del paquete corrplot R también se puede usar para trazar un correlograma.
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í:
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 parcelas @daroczig menciona, pero diseña para un enfoque de canalización de datos:
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)
Muy fácil con Lattice :: levelplot:
z <- cor(mtcars)
require(lattice)
levelplot(z)
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 trama resultante.
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 diagrama 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 diagrama de dispersión se obtiene el nombre de la fila (en este caso, la marca del automóvil).
Parece más bien "menos", pero vale la pena verificarlo (como dar más información visual):
Elipses de la 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.
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))
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:
Más bien elegante IMO