J'ai une matrice avec des valeurs de corrélation. Maintenant, je veux tracer cela dans un graphique qui ressemble plus ou moins à ça:
Comment puis-je y parvenir?
J'ai une matrice avec des valeurs de corrélation. Maintenant, je veux tracer cela dans un graphique qui ressemble plus ou moins à ça:
Comment puis-je y parvenir?
Réponses:
Rapide, sale et approximatif:
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))
Ressemble plutôt "moins", mais vaut la peine d'être vérifié (car il donne plus d'informations visuelles):
Ellipses de la matrice de corrélation :
les
cercles de la matrice de corrélation :
Veuillez trouver plus d'exemples dans la vignette corrplot référencée par @assylias ci-dessous.
ellipse:plotcorr
.
La bibliothèque ggplot2 peut gérer cela avec geom_tile()
. Il semble que ce graphique ci-dessus ait pu être redimensionné, car il n'y a pas de corrélations négatives, alors prenez cela en considération avec vos données. Utilisation du mtcars
jeu de données:
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")
MODIFIER :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
permet de spécifier la couleur du point médian et le blanc par défaut peut donc être un bon ajustement ici. D'autres options peuvent être trouvées sur le site Web de ggplot ici et ici .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
avec "white"
au milieu pour laisser les couleurs refléter la symétrie de la corrélation efficace.
scale_fill_gradient2()
la fonctionnalité que vous décrivez soit obtenue automatiquement. Je ne savais pas que cela existait.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
le rendra interactif
X1
utiliser:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Utilisez le package 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")
}
Par exemple:
OMI plutôt élégante
Ce type de graphique est appelé une "carte thermique" entre autres termes. Une fois que vous avez votre matrice de corrélation, tracez-la à l'aide de l'un des différents didacticiels disponibles.
Utilisation des graphiques de base: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
En utilisant ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
J'ai travaillé sur quelque chose de similaire à la visualisation publiée par @daroczig, avec du code posté par @Ulrik en utilisant la plotcorr()
fonction du ellipse
package. J'aime l'utilisation des ellipses pour représenter les corrélations et l'utilisation des couleurs pour représenter les corrélations négatives et positives. Cependant, je voulais que les couleurs accrocheuses se démarquent pour les corrélations proches de 1 et -1, pas pour celles proches de 0.
J'ai créé une alternative dans laquelle des ellipses blanches sont superposées sur des cercles colorés. Chaque ellipse blanche est dimensionnée de telle sorte que la proportion du cercle coloré visible derrière elle est égale à la corrélation au carré. Lorsque la corrélation est proche de 1 et -1, l'ellipse blanche est petite et une grande partie du cercle coloré est visible. Lorsque la corrélation est proche de 0, l'ellipse blanche est grande et une petite partie du cercle coloré est visible.
La fonction, plotcor()
est disponible à l' adresse https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .
Un exemple du graphique résultant utilisant l' mtcars
ensemble de données est présenté ci-dessous.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Je me rends compte que cela fait un moment, mais les nouveaux lecteurs pourraient être intéressés rplot()
par le corrr
package ( https://cran.rstudio.com/web/packages/corrr/index.html ), qui peut produire les types de parcelles que @daroczig mentionne , mais concevoir une approche de pipeline de données:
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 fonction corrplot () du package corrplot R peut également être utilisée pour tracer un corrélogramme.
library(corrplot)
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")
plusieurs articles décrivant comment calculer et visualiser la matrice de corrélation sont publiés ici:
Une autre solution que j'ai récemment découverte est une carte thermique interactive créée avec le package qtlcharts .
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Vous trouverez ci-dessous une image statique du graphique résultant.
Vous pouvez voir la version interactive sur mon blog . Passez la souris sur la carte thermique pour voir les valeurs de ligne, de colonne et de cellule. Cliquez sur une cellule pour voir un nuage de points avec des symboles colorés par groupe (dans cet exemple, le nombre de cylindres, 4 est rouge, 6 est vert et 8 est bleu). Le survol des points du nuage de points donne le nom de la ligne (dans ce cas, la marque de la voiture).
Comme je ne peux pas commenter, je dois donner mon 2c à la réponse de Daroczig en guise de réponse ...
Le nuage de points ellipse est en effet issu du package ellipse et généré avec:
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])
(à partir de la page de manuel)
Le paquet corrplot peut également - comme suggéré - être utile avec de jolies images trouvées ici