Mam problemy z korzystaniem z funkcji cor()
i cor.test()
.
Mam tylko dwie macierze (tylko wartości liczbowe i taką samą liczbę wierszy i kolumn) i chcę mieć liczbę korelacji i odpowiednią wartość p.
Kiedy używam cor(matrix1, matrix2)
, otrzymuję współczynniki korelacji dla wszystkich komórek. Chcę tylko jedną liczbę w wyniku kore.
Dodatkowo, kiedy to zrobię, pojawia cor.test(matrix1, matrix2)
się następujący błąd
Error in cor.test.default(matrix1, matrix2) : 'x' must be a numeric vector
Jak mogę uzyskać wartości p dla matryc?
Tutaj znajdziesz proste tabele, które chcę skorelować:
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
źródło
źródło
cor(as.vector(matrix1), as.vector(matrix2))
?Odpowiedzi:
Jeśli chcesz po prostu obliczyć korelację między dwoma zestawami wartości, ignorując strukturę macierzy, możesz przekonwertować macierze na wektory za pomocą
c()
. Następnie twoja korelacja jest obliczana przezcor(c(matrix1), c(matrix2))
.źródło
read.csv
który prawdopodobnie użyłeś, zwraca a,data.frame
które nie jest amatrix
. Więc trzeba go przekonwertować do byciamatrix
zas.matrix
przed czyni go jednym z długim wektoremc()
, a otrzymane wyniki docor
. Tutaj jest w jednym wierszu:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
Nie powiedziałeś nic o tym, jakie są twoje dane. Niemniej jednak...
Załóżmy, że macierze mają kolumny reprezentujące dwa zestawy (różnych) zmiennych i (taką samą liczbę) wierszy reprezentujących przypadki.
Kanoniczna analiza korelacji
W tej sytuacji jedną potencjalnie interesującą bardziej uporządkowaną analizą korelacji jest znalezienie korelacji kanonicznych . Zakłada się, że chcesz podsumować związek między dwoma zestawami zmiennych pod względem korelacji między liniowymi kombinacjami
matrix1
kolumn i liniowymi kombinacjamimatrix2
kolumny. I chciałbyś to zrobić, gdybyś podejrzewał, że istnieje przestrzeń o małych wymiarach, być może nawet 1, która ujawniłaby leżącą u podstaw strukturę korelacji między przypadkami, która jest zaciemniona przez ich realizację w obecnych układach współrzędnych zdefiniowanych przez zmienne. W związku z tym wartość tej (kanonicznej) korelacji w pewnym sensie podsumowałaby wielowymiarową liniową zależność między dwiema macierzami. Rzeczywiście, podczas gdy CCA działa dla macierzy o różnej liczbie zmiennych, redukuje się do korelacji Pearsona, gdy każda „macierz” jest tylko jedną kolumną.Realizacja
Kanoniczna analiza korelacji jest opisana w większości tekstów analizy wielowymiarowej, co może być najbardziej pomocne, jeśli jesteś zadowolony z algebry macierzowej aż do analizy własnej. Jest zaimplementowany jak
cancor
w bazie R, a także w opisanym tutaj pakiecie CCA .źródło
cancor(matrix1, matrix2)
.matrix1
Jeśli luźno interpretujesz korelację jako podobieństwo, możesz użyć definicji opartej na produkcie wewnętrznym, takiej jak:
Z twoich danych daje to 0,996672.
Alternatywą, jeśli struktura macierzy nie jest ważna, jest po prostu spłaszczenie macierzy do wektorów i użycie wybranej miary korelacji. Ponieważ nie znam dystrybucji danych, użyłem produktu kropkowego, aby uzyskać 0,976.
Z drugiej strony wydaje się, że Twoje dane są wysoce skorelowane.
źródło