Come visualizzare una matrice di correlazioni con voci mancanti?


10

Vorrei ottenere una rappresentazione grafica delle correlazioni negli articoli che ho raccolto finora per esplorare facilmente le relazioni tra le variabili. Ho usato per disegnare un grafico (disordinato) ma ora ho troppi dati.

Fondamentalmente, ho un tavolo con:

  • [0]: nome della variabile 1
  • [1]: nome della variabile 2
  • [2]: valore di correlazione

La matrice "complessiva" è incompleta (ad esempio, ho la correlazione di V1 * V2, V2 * V3, ma non V1 * V3).

C'è un modo per rappresentare graficamente questo?

Risposte:


12

Basandomi sulla risposta di @ GaBorgulya, suggerirei di provare la fluttuazione o la trama del livello (ovvero i display delle mappe di calore).

Ad esempio, usando ggplot2 :

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(Qui, la voce mancante viene visualizzata in grigio chiaro, ma è possibile modificare la combinazione di colori predefinita e puoi anche inserire "NA" nella legenda.)

inserisci qui la descrizione dell'immagine

o

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(Qui, i valori mancanti non vengono semplicemente visualizzati. Tuttavia, è possibile aggiungere un geom_text()e visualizzare qualcosa come "NA" nella cella vuota.)

inserisci qui la descrizione dell'immagine


2
+1 per ggfluctuation, non l'avevo mai visto prima! Questo post ha altri codici utili per visualizzare questo tipo di data: stackoverflow.com/questions/5453336/…
Chase

@Chase (+1) Thx. A proposito, sembra che ho avuto qualche problema con la mia combinazione di colori per valori di correlazione negativi.
chl

Riordinando le righe e le colonne per ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] la visualizzazione sarà spesso più facile da visualizzare.
GaBorgulya,

@GaBorgulya Un buon punto. Lo uso quando eseguo analisi di dati esplorativi e le variabili non hanno un ordine particolare (come nel caso dei dati spaziali o temporali o dei dati strutturati che si desidera vedere così come sono). La mixOmics::cimfunzione è ottima per questo. Un problema correlato è stato discusso qui, stats.stackexchange.com/questions/8370/… .
chl

5

I tuoi dati potrebbero essere come

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Puoi riorganizzare il tuo tavolo lungo in uno largo con il seguente codice R.

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

Hai capito

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

Ora puoi usare le tecniche per visualizzare le matrici di correlazione (almeno quelle che possono far fronte a valori mancanti).


2
anche il reshapepacchetto può essere utile. Una volta che hai e, considera qualcosa comelibrary(reshape) cast(melt(e), name1 ~ name2)
Chase

3

Il corrplotpacchetto è una funzione utile per visualizzare le matrici di correlazione. Accetta una matrice di correlazione come oggetto di input e ha diverse opzioni per visualizzare la matrice stessa. Una bella caratteristica è che può riordinare le variabili usando il clustering gerarchico o i metodi PCA.

Vedi la risposta accettata in questo thread per una visualizzazione di esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.