Wie kann eine Korrelationsmatrix mit fehlenden Einträgen angezeigt werden?

10

Ich möchte eine grafische Darstellung der Korrelationen in Artikeln erhalten, die ich bisher gesammelt habe, um die Beziehungen zwischen Variablen leicht untersuchen zu können. Früher habe ich ein (unordentliches) Diagramm gezeichnet, aber jetzt habe ich zu viele Daten.

Grundsätzlich habe ich einen Tisch mit:

  • [0]: Name der Variablen 1
  • [1]: Name der Variablen 2
  • [2]: Korrelationswert

Die "Gesamt" -Matrix ist unvollständig (z. B. habe ich die Korrelation von V1 * V2, V2 * V3, aber nicht V1 * V3).

Gibt es eine Möglichkeit, dies grafisch darzustellen?

Coronier
quelle

Antworten:

12

Aufbauend auf der Antwort von @ GaBorgulya würde ich vorschlagen, Fluktuation oder Level-Plot (auch bekannt als Heatmap-Anzeigen) zu versuchen.

Beispiel: Verwenden von 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="")

(Hier werden fehlende Einträge in einfachem Grau angezeigt, aber das Standardfarbschema kann geändert werden, und Sie können auch "NA" in die Legende einfügen.)

Geben Sie hier die Bildbeschreibung ein

oder

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

(Hier werden fehlende Werte einfach nicht angezeigt. Sie können jedoch ein hinzufügen geom_text()und so etwas wie "NA" in der leeren Zelle anzeigen.)

Geben Sie hier die Bildbeschreibung ein

chl
quelle
2
+1 für ggfluctuation, hatte das noch nie gesehen! Dieser Beitrag hat anderen nützlichen Code, um diese Art von Daten zu visualisieren: stackoverflow.com/questions/5453336/…
Chase
@Chase (+1) Thx. Übrigens hatte ich anscheinend ein Problem mit meinem Farbschema für negative Korrelationswerte.
Chl
Wenn Sie die Zeilen und Spalten nach ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] neu anordnen, ist die Visualisierung häufig einfacher zu überblicken.
GaBorgulya
@ GaBorgulya Guter Punkt. Ich verwende dies, wenn ich eine explorative Datenanalyse durchführe und die Variablen keine bestimmte Reihenfolge haben (wie dies bei räumlichen oder zeitlichen Daten oder strukturierten Daten der Fall wäre, die Sie so sehen möchten, wie sie sind). Die mixOmics::cimFunktion ist dafür sehr gut. Ein verwandtes Problem wurde hier diskutiert, stats.stackexchange.com/questions/8370/… .
Chl
5

Ihre Daten können wie sein

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Sie können Ihren langen Tisch mit dem folgenden R-Code in einen breiten Tisch umordnen

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),]

Du kriegst

  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

Jetzt können Sie Techniken zur Visualisierung von Korrelationsmatrizen verwenden (zumindest solche, die mit fehlenden Werten umgehen können).

GaBorgulya
quelle
2
Das reshapePaket kann auch nützlich sein. Wenn Sie haben e, denken Sie an etwas wielibrary(reshape) cast(melt(e), name1 ~ name2)
Chase
3

Das corrplotPaket ist eine nützliche Funktion zur Visualisierung von Korrelationsmatrizen. Es akzeptiert eine Korrelationsmatrix als Eingabeobjekt und verfügt über mehrere Optionen zum Anzeigen der Matrix selbst. Eine nette Funktion ist, dass es Ihre Variablen mithilfe von hierarchischen Clustering- oder PCA-Methoden neu anordnen kann.

In der akzeptierten Antwort in diesem Thread finden Sie eine Beispielvisualisierung.

Iris Tsui
quelle