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
r
correlation
L_T
quelle
quelle
cor(as.vector(matrix1), as.vector(matrix2))
?Antworten:
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 berechnetcor(c(matrix1), c(matrix2))
.quelle
read.csv
das Sie wahrscheinlich verwendet haben, gibt ein zurück,data.frame
das kein a istmatrix
. Sie müssen es also in einmatrix
mit konvertieren,as.matrix
bevor Sie es zu einem langen Vektor machenc()
und die Ergebnisse angebencor
. Hier ist es in einer Zeile:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
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
matrix1
Spalten und linearen Kombinationen von zusammenfassen möchtenmatrix2
Sä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
cancor
in Basis R und auch in dem hier beschriebenen CCA- Paket implementiert .quelle
cancor(matrix1, matrix2)
.matrix1
A i j i jWenn Sie Korrelation lose als Ähnlichkeit interpretieren, können Sie eine Definition verwenden, die auf dem inneren Produkt basiert, wie z.
⟨A,B⟩≡tr(ABT)‖x| | ≡⟨x,x⟩1/2cAB=⟨A,B⟩∥A∥||B∥ ⟨A,B⟩≡tr(ABT) ∥x||≡⟨x,x⟩1/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.
quelle