Jak wyświetlić macierz korelacji z brakującymi wpisami?

10

Chciałbym uzyskać graficzną reprezentację korelacji w artykułach, które zebrałem do tej pory, aby łatwo zbadać relacje między zmiennymi. Kiedyś rysowałem (niechlujny) wykres, ale teraz mam za dużo danych.

Zasadniczo mam stół z:

  • [0]: nazwa zmiennej 1
  • [1]: nazwa zmiennej 2
  • [2]: wartość korelacji

Matryca „ogólna” jest niekompletna (np. Mam korelację V1 * V2, V2 * V3, ale nie V1 * V3).

Czy istnieje sposób na przedstawienie tego graficznie?

Koroner
źródło

Odpowiedzi:

12

Opierając się na odpowiedzi @ GaBorgulya, sugerowałbym wypróbowanie fluktuacji lub wykresu poziomu (inaczej wyświetlaczy map termicznych).

Na przykład za pomocą 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="")

(W tym miejscu brakujący wpis jest wyświetlany w kolorze szarym, ale domyślny schemat kolorów można zmienić, a także w legendzie można wpisać „NA”).

wprowadź opis zdjęcia tutaj

lub

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

(Tutaj brakujące wartości po prostu nie są wyświetlane. Możesz jednak dodać a geom_text()i wyświetlić coś takiego jak „NA” w pustej komórce.)

wprowadź opis zdjęcia tutaj

chl
źródło
2
+1 za ggfluctuation, nie widziałem tego wcześniej! Ten post zawiera inny użyteczny kod do wizualizacji tego typu datownika: stackoverflow.com/questions/5453336/…
Chase
@Chase (+1) Thx. BTW, wygląda na to, że miałem problem ze schematem kolorów dla ujemnych wartości korelacji.
chl
Zmiana kolejności wierszy i kolumn za pomocą ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] wizualizacja będzie często łatwiejsza do przeglądania.
GaBorgulya
@GaBorgulya Dobry punkt. Używam tego, gdy robię eksploracyjną analizę danych, a zmienne nie mają określonej kolejności (tak jak w przypadku danych przestrzennych lub czasowych lub danych strukturalnych, które chcesz zobaczyć jako takie). mixOmics::cimFunkcja jest bardzo dobry do tego. Temat pokrewny został tutaj omówiony, stats.stackexchange.com/questions/8370/… .
chl
5

Twoje dane mogą być podobne

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Możesz zmienić układ długiego stołu na szeroki przy użyciu następującego kodu 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),]

Dostajesz

  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

Teraz możesz użyć technik wizualizacji macierzy korelacji (przynajmniej takich, które poradzą sobie z brakującymi wartościami).

GaBorgulya
źródło
2
reshapeopakowanie może być również użyteczne. Gdy już to zrobisz e, zastanów się nad czymś takimlibrary(reshape) cast(melt(e), name1 ~ name2)
Chase
3

The corrplotPakiet jest użyteczną funkcją dla wizualizacji macierze korelacji. Akceptuje macierz korelacji jako obiekt wejściowy i ma kilka opcji wyświetlania samej macierzy. Przyjemną cechą jest to, że może zmieniać kolejność zmiennych przy użyciu metod hierarchicznego grupowania lub metod PCA.

Zobacz zaakceptowaną odpowiedź w tym wątku, aby zobaczyć przykładową wizualizację.

Iris Tsui
źródło