2013-04-08 106 views
6

Ho cercato di creare un grafico fuori dalla matrice di correlazione e di avere tre colori per rappresentare i coefficienti di correlazione utilizzando il reticolo della libreria.Heatmap o grafico per una matrice di correlazione

library(lattice) 

levelplot(cor) 

ottengo il seguente grafico:

Plot of correlation matrix

La trama è solo per un sottoinsieme dei dati che ho avuto. Quando uso l'intero set di dati (400X400), diventa poco chiaro e la colorazione non viene mostrata correttamente e viene mostrata come punti. È possibile ottenere lo stesso in forma di tegola per una matrice grande?

Ho provato a utilizzare la funzione pheatmap ma non desidero che i miei valori siano raggruppati in cluster e voglio solo una rappresentazione di valori alti e bassi chiaramente in una forma di tile.

+0

Hai provato ad aumentare la risoluzione png? Supponi, 4 pixel per variabile = 4x400 diventa immagine 1600x1600 png. – Marek

+0

Scusami, non capisco come farlo e non l'ho provato – user2258452

+0

Puoi scrivere l'immagine in png ad esempio: 'png (" cor.png ", 1600,1600); print (levelplot (cor)); dev. off() '. – Marek

risposta

0

@Lucas fornisce buoni consigli in questo caso poiché il corrplot è molto utile per visualizzare le matrici di correlazione. Tuttavia, non affronta il problema originale di tracciare una matrice di correlazione di grandi dimensioni. In effetti, il corrplot fallirà anche nel tentativo di visualizzare questa grande matrice di correlazione. Per una soluzione semplice, potresti prendere in considerazione la possibilità di ridurre il numero di variabili. Cioè, suggerirei di considerare la correlazione tra un sottoinsieme di variabili che sai essere importanti per il tuo problema. Cercare di capire la struttura di correlazione di quelle molte variabili sarà un compito difficile (anche se puoi visualizzarlo)!

+0

Quante variabili sono 'grandi', per favore? – smci

12

Se si vuole fare un tracciato di correlazione, utilizzare la libreria corrplot in quanto ha un sacco di flessibilità per creare figure HeatMap simile per le correlazioni

library(corrplot) 
#create data with some correlation structure 
jnk=runif(1000) 
jnk=(jnk*100)+c(1:500, 500:1) 
jnk=matrix(jnk,nrow=100,ncol=10) 
jnk=as.data.frame(jnk) 
names(jnk)=c("var1", "var2","var3","var4","var5","var6","var7","var8","var9","var10") 

#create correlation matrix 
cor_jnk=cor(jnk, use="complete.obs") 
#plot cor matrix 
corrplot(cor_jnk, order="AOE", method="circle", tl.pos="lt", type="upper",   
tl.col="black", tl.cex=0.6, tl.srt=45, 
     addCoef.col="black", addCoefasPercent = TRUE, 
     p.mat = 1-abs(cor_jnk), sig.level=0.50, insig = "blank") 

enter image description here Il codice di cui sopra aggiunge solo colore per le correlazioni che hanno una correlazione> abs (0.5), ma puoi facilmente cambiarlo. Infine, ci sono molti modi in cui è possibile configurare l'aspetto del grafico (cambiare il gradiente di colore, la visualizzazione delle correlazioni, la visualizzazione di piena vs solo metà matrice, ecc.). L'argomento dell'ordine è particolarmente utile in quanto consente di ordinare le variabili nella matrice di correlazione in base a PCA, in modo che siano ordinate in base alle somiglianze nella correlazione.

per piazze, ad esempio, (simile al tuo trama originale) - basta cambiare il metodo per le piazze: enter image description here

EDIT: @Carson. È ancora possibile utilizzare questo metodo per matrici di correlazione di dimensioni ragionevoli: ad esempio una matrice di 100 variabili di seguito. Oltre a ciò, non riesco a vedere quale sia l'uso di fare una rappresentazione grafica di una matrice di correlazione con così tante variabili senza qualche subsetting, dato che sarà molto difficile interpretare. enter image description here

Problemi correlati