Korrelation zwischen Matrizen in R.

9

Ich habe Probleme bei der Verwendung der cor()und cor.test()Funktionen.

Ich habe nur zwei Matrizen (nur numerische Werte und die gleiche Anzahl von Zeilen und Spalten) und ich möchte die Korrelationsnummer und den entsprechenden p-Wert haben.

Wenn ich benutze, cor(matrix1, matrix2)erhalte ich die Korrelationskoeffizienten für alle Zellen. Ich möchte nur eine einzige Zahl als Ergebnis von cor.

Wenn ich das tue, cor.test(matrix1, matrix2)erhalte ich zusätzlich den folgenden Fehler

Error in cor.test.default(matrix1, matrix2) : 'x' must be a numeric vector

Wie kann ich p-Werte für Matrizen erhalten?

Die einfachen Tabellen, die ich korrelieren möchte, finden Sie hier:

http://dl.dropbox.com/u/3288659/table_exp1_offline_MEANS.csv

http://dl.dropbox.com/u/3288659/table_exp2_offline_MEANS.csv

L_T
quelle
4
Es ist ein wenig unklar, was Sie wollen. Wenn Sie sagen, Sie möchten nur ein Ergebnis für cor (Matrix1, Matrix2), versuchen Sie, (alle Zahlen in Matrix1) mit (allen Zahlen in Matrix2) zu korrelieren? In diesem Fall könnten Sie cor (as.vector (matrix1), as.vector (matrix2))
Marius
Was genau soll der p-Wert genau zeigen? (dh welche Hypothese testen Sie?)
chl
Nein, ich möchte nur die beiden Matrizen korrelieren, um zu wissen, wie ähnlich sie sich sind. Ich möchte keinen Vergleich Zelle für Zelle. Ich möchte nur eine einzelne Zahl von 0 bis 1, wie bei jeder Pearson-Korrelation, bei der zwei Vektoren für die Eingabe verwendet werden. Irgendein Vorschlag? Der von mir erwartete p-Wert muss mir die Bedeutung der Korrelation mitteilen.
L_T
1
Meinst du wie in cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Antworten:

12

Wenn Sie einfach die Korrelation zwischen den beiden Wertesätzen berechnen möchten, ohne die Matrixstruktur zu beachten, können Sie die Matrizen mithilfe von in Vektoren konvertieren c(). Dann wird Ihre Korrelation von berechnet cor(c(matrix1), c(matrix2)).

Martin O'Leary
quelle
Bei Verwendung Ihrer Funktion erhalte ich folgende Fehlermeldung: "Fehler in cor (c (Matrix1), c (Matrix2)): 'x' muss numerisch sein". Aber wenn Sie einen kurzen Blick auf meine Tabellen werfen, bemerken Sie, dass sie nur Zahlen enthalten ... Ich verstehe nicht
L_T
3
Ein R-Problem dieses:, read.csvdas Sie wahrscheinlich verwendet haben, gibt ein zurück, data.framedas kein a ist matrix. Sie müssen es also in ein matrixmit konvertieren, as.matrixbevor Sie es zu einem langen Vektor machen c()und die Ergebnisse angeben cor. Hier ist es in einer Zeile:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
Conjugateprior
5

Sie haben nichts darüber gesagt, was Ihre Daten tatsächlich sind. Dennoch...

Angenommen , Ihre Matrizen haben Spalten, die zwei Sätze von (unterschiedlichen) Variablen und (die gleiche Anzahl von) Zeilen darstellen, die Fälle darstellen.

Kanonische Korrelationsanalyse

In dieser Situation besteht eine potenziell interessante, strukturiertere Korrelationsanalyse darin, die kanonischen Korrelationen zu finden . Dies setzt voraus, dass Sie die Beziehung zwischen den beiden Variablensätzen im Hinblick auf die Korrelation (en) zwischen linearen Kombinationen von matrix1Spalten und linearen Kombinationen von zusammenfassen möchtenmatrix2Säulen. Und Sie würden dies tun wollen, wenn Sie den Verdacht hätten, dass es einen Raum mit kleiner Dimensionalität gibt, vielleicht sogar 1, der eine zugrunde liegende Korrelationsstruktur über die Fälle hinweg aufzeigt, die durch ihre Realisierung in den aktuellen variablendefinierten Koordinatensystemen verdeckt wird. Folglich würde der Wert dieser (kanonischen) Korrelation gewissermaßen eine multivariate lineare Beziehung zwischen den beiden Matrizen zusammenfassen. Während CCA für Matrizen mit unterschiedlicher Anzahl von Variablen arbeitet, reduziert es sich auf die Pearson-Korrelation, wenn jede 'Matrix' nur eine einzelne Spalte ist.

Implementierung

Die kanonische Korrelationsanalyse wird in den meisten multivariaten Analysetexten beschrieben. Dies ist möglicherweise am hilfreichsten, wenn Sie mit der Matrixalgebra bis zur Eigenanalyse zufrieden sind. Es ist wie cancorin Basis R und auch in dem hier beschriebenen CCA- Paket implementiert .

Konjugatprior
quelle
Hallo danke. Meine Daten sind einfach zwei Matrizen, die dieselben Variablen enthalten. Die Struktur der beiden Matrizen ist identisch. Die Werte in jeder Zelle sind die Ergebnisse eines Experiments, bei dem diese Variablen auf einer 9-Punkte-Likert-Skala bewertet und über die Teilnehmer gemittelt wurden. Welches ist die beste Strategie, um eine Korrelation zwischen den beiden Matrizen zu finden? Können Sie ein Beispiel in R machen?
L_T
1
Mit Basis R ist es einfach cancor(matrix1, matrix2).
Conjugateprior
Aber vielleicht können Sie etwas klarstellen. Rufen Sie . Was ist dann ? Ist es die Antwort der -ten Person auf den -ten Likert-Gegenstand? Sicher nicht. Woher kommt also der Durchschnitt der Teilnehmer? matrix1 A i j i jAAijij
Conjugateprior
Hallo, es waren 10 Teilnehmer, sie mussten den "Grad der Kohärenz" zwischen den Stimuli der Paare ausdrücken (beachten Sie, dass es sich nicht um ein Experiment zur Bewertung der Unähnlichkeit handelt). Ich habe 2 Experimente gemacht. und ich möchte die Ergebnisse unter den 2 experimentellen Bedingungen vergleichen. Jede Zelle ist der Durchschnitt der Bewertungen der 10 Teilnehmer für jedes Stimuluspaar. Dann sollte ich noch cancor verwenden?
L_T
Ich habe cancor verwendet, aber ich bekomme weder einen einzelnen Koeffizientenwert, der die Korrelation ausdrückt, noch einen p-Wert, der ihre Bedeutung ausdrückt. Bitte helfen Sie!
L_T
3

Wenn Sie Korrelation lose als Ähnlichkeit interpretieren, können Sie eine Definition verwenden, die auf dem inneren Produkt basiert, wie z.

A,Btr(ABT)x| | x,x1/2cAB=A,BA||BA,Btr(ABT)x||x,x1/2

Mit Ihren Daten ergibt dies 0,996672.

Die Alternative, wenn die Matrixstruktur nicht wichtig ist, besteht darin, die Matrizen einfach in Vektoren zu reduzieren und das Korrelationsmaß Ihrer Wahl zu verwenden. Da ich die Verteilung Ihrer Daten nicht kenne, habe ich das Punktprodukt verwendet, um 0,976 zu erhalten.

Auf jeden Fall scheinen Ihre Daten stark korreliert zu sein.

Emre
quelle
Dies scheint der rv-Koeffizient zu sein , nach dem das OP gefragt hat: ein Wert zwischen 0 und 1, der angibt, wie ähnlich beide Matrizen sind.
11.