Darstellung der Korrelationsmatrix über die Zeit

7

Haben Sie aus Ihrer Erfahrung Vorschläge zur Darstellung zeitlich wechselnder Korrelationsmatrizen? Ich habe mir /quant/1565/how-do-i-graphically-represent-the-evolution-of-a-covariance-matrix-over-time angesehen , konnte aber keine finden guter Artikel. Ich stelle diese Frage, weil ich auf dem Gebiet der Datenanalyse ziemlich neu bin und das einzige Buch, das ich bisher gelesen habe, Wickhams ist ggplot2. Also dachte ich daran, Experten danach zu fragen.

Ich würde mich über jede Hilfe sehr freuen.

Wachturm
quelle
2
Die Wahl der grafischen Lösung hängt stark von Ihren Vergleichsprioritäten ab. Was für Sie am wichtigsten ist, um sofort per Blick zu vergleichen - Element mit Element innerhalb einer Matrix oder Element am Punkt t1 mit sich selbst am Punkt t2.
ttnphns

Antworten:

3

Hier gibt es eine Reihe von Problemen (und ob Sie sie verwenden, ggplot2scheint mir völlig orthogonal zu ihnen zu sein). Erkennen Sie zunächst, dass Korrelationen nicht unbedingt intuitiv und linear skaliert werden müssen (zum großen Teil, weil ihr möglicher Bereich begrenzt ist). Es lohnt sich darüber nachzudenken, wie Sie die Werte darstellen möchten. Zum Beispiel könnten Sie verwenden:

  1. die ursprünglichen Korrelationen ( Punkte)r
  2. Bestimmungskoeffizienten ( 's)r2
  3. z Punkte basierend auf den Ergebnissen der Fisher- Transformationrz von ' nach ' :
    zr=.5ln(1+r1r)

Ich weiß nicht wirklich etwas über Ihre Situation, daher fällt es mir schwer zu sagen, aber meine Standardeinstellung wäre die Verwendung der transformierten Scores ( ). zr

Als nächstes müssen Sie entscheiden, was mit den Daten geschehen soll (überhaupt oder mehr oder weniger prominent). Möchten Sie beispielsweise die absoluten Größen der Werte oder nur deren Änderungen einbeziehen (vgl. Niveaus vs. Änderungen in der Wirtschaft)? Interessieren Sie sich hauptsächlich für die Größenordnungen der Änderungen (dh Absolutwerte), ob sie zunehmen oder abnehmen (die Vorzeichen, entweder im absoluten Sinne oder in Richtung oder weg von keiner Korrelation) oder beides?

Vorausgesetzt , dass Sie eine Korrelation visualisieren möchten Matrix (dh ein Satz von Korrelationen), ist es zu bedenken , dass sie nicht sein wird , unabhängig . Beachten Sie, dass eine Änderung nur einer Variablen Auswirkungen auf mehrere Korrelationen hat, selbst wenn die anderen Variablen über die Zeit konstant sind. Es kommt also wieder darauf an, ob das für Sie wichtig ist.

Mit anderen Worten, es ist wichtig , genau herauszufinden, was Ihnen wirklich wichtig ist. Es wird keine Visualisierung geben, die alle diese Facetten erfasst.


Aus Ihrem Kommentar geht hervor, dass Sie vorher und nachher nur zwei Korrelationsmatrizen haben werden. Das vereinfacht die Dinge. Ohne Informationen über Ihre Situation, Daten oder Ziele würde ich wahrscheinlich ein Streudiagramm mit vorher und nachher auf der X-Achse und auf der Y-Achse und den beiden Punkten , die dieselbe Korrelation darstellen, die durch eine Linie verbunden sind Segment. Betrachten Sie dieses in R codierte Beispiel: zr

library(MASS)   # we'll use these packages
library(psych)
set.seed(541)   # this makes the example exactly reproducible
bef = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft[,5] = rnorm(100)  # above I generate data 2x from the same population, 
b.c = cor(bef)        #  here I change just 1 variable
a.c = cor(aft)        # then I make cor matrices, & extract the rs into a vector
b.v = b.c[upper.tri(b.c)]
a.v = a.c[upper.tri(a.c)]
d   = stack(list(bef=b.v, aft=a.v))
d$ind = relevel(d$ind, ref="bef")
windows(width=7, height=4)
  layout(matrix(1:2, nrow=1))
  plot(as.numeric(d$ind), fisherz(d$values), main="Fisher's z",
       axes=F, xlab="time", ylab=expression(z [r]), xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.5, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(fisherz(d$values), nrow=10, ncol=2)[i,]) }

  plot(as.numeric(d$ind), d$values, main="Raw rs",
       axes=F, xlab="time", ylab="r", xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.0, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(d$values, nrow=10, ncol=2)[i,]) }; rm(i)

fdif       = abs(fisherz(a.c)-fisherz(b.c))
diag(fdif) = 0
windows()
  image(1:5, 1:5, z=fdif, 
        xlab="", ylab="", col=gray.colors(8)[8:3])
  for(i in 1:5){ for(j in 1:5){ text(i,j,round(fdif,2)[i,j]) }}

Geben Sie hier die Bildbeschreibung ein

Die obigen Abbildungen zeigen sowohl die Ebenen der Korrelationen als auch das Ausmaß der Änderung. Sie können verschiedene Merkmale sehen, z. B. eine Konvergenz in Richtung . Der Unterschied zwischen der Verwendung von und besteht darin, dass die Punkte vorher gleichmäßiger verteilt sind. Der Abstand zwischen und beispielsweise dem Abstand zwischen und . Andererseits sind für die Korrelationen naher=0zrrr0.4.4.8zr0sind zusammengeklumpt und die starke Korrelation ist viel weiter vom Rest entfernt. Was diese Zahlen nicht erfassen, ist die Nichtunabhängigkeit dieser Linien. Sie können in der Heatmap unten sehen (unter Verwendung der absoluten Werte der Unterschiede in ), dass die größeren Änderungen mit Variable 5 verbunden sind. zr

Geben Sie hier die Bildbeschreibung ein

gung - Monica wieder einsetzen
quelle
Vielen Dank für deine Hilfe. Ich habe vor zwei Tagen die Antwort von Irishstat für meine Präsentation verwendet. Es ging gut. In Zukunft werde ich jedoch die Transformation von Fisher verwenden. Ich mag das.
Wachturm
1

Meiner Meinung nach ist es besser, die Auswirkung von Parameteränderungen (ein Proxy für lokale Korrelationen) zu quantifizieren, als einen visuellen Versuch zu unternehmen, da Versuche visueller Vergleiche sehr subjektiv sein können. Ihre Frage ähnelt "Wie teste ich, ob die Parameter von mir Modellwechsel im Laufe der Zeit ". Ich habe den Chow-Test so programmiert, dass festgestellt wird, zu welchem ​​Zeitpunkt die Parameter am stärksten voneinander abweichen. Dies zu finden führt zu einem direkten Signifikanztest, der möglicherweise zu dem Schluss führt, dass "frühere Daten" beiseite gelegt werden sollten.

IrishStat
quelle
Was ist Ihre Antwort auf die Frage, die nach grafischen Möglichkeiten zur Visualisierung der Änderungen im Zeitverlauf zu fragen scheint ?
whuber
Ich glaube, ich habe versucht, ihm von einer Alternative zu Grafiken zu erzählen, die meiner Meinung nach eine funktionierende Definition der statistischen Analyse darstellt
IrishStat
@IrishStat - Nachdem ich beide sorgfältig durchgeführt habe, dh visuelle Vergleiche mit der Quantifizierung, habe ich festgestellt, dass die Quantifizierung viel besser ist. Im Wesentlichen werde ich zwei Matrizen "vorher und nachher" erstellen und dann zeigen, was los ist. Danke nochmal für deine Hilfe.
Wachturm
Das Problem, das Sie möglicherweise haben, besteht darin, zu bestimmen, wie [position
IrishStat
1
Möglicherweise besteht das Problem darin, zu bestimmen, wie der Haltepunkt angegeben werden soll. Der von mir vorgeschlagene Ansatz kann tatsächlich den wichtigsten Bruchpunkt bestimmen. Darüber hinaus können Korrelationen durch Anomalien stark gedämpft werden, sodass Sie zu dem Schluss kommen, dass keine Beziehung besteht. Das ist der Grund, warum man auf erkennbare Anomalien reagieren muss, um Bruchstellen richtig einzuschätzen, aber das ist nur meine Zwei-Cent-Meinung.
IrishStat