Korelacja między macierzami w R


9

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


4
To jest trochę niejasne, czego chcesz. Kiedy mówisz, że chcesz tylko jeden wynik dla cor (macierz1, macierz2), czy próbujesz skorelować (wszystkie liczby w macierzy1) z (wszystkie liczby w macierzy2)? W takim przypadku możesz wypróbować cor (as.vector (matrix1), as.vector (matrix2))
Marius

Jaka jest dokładnie oczekiwana wartość p? (tj. jaką hipotezę testujesz?)
chl

Nie, chcę tylko skorelować dwie macierze, aby wiedzieć, jak bardzo są one podobne. Nie chcę porównania komórek po komórkach. Chcę w rezultacie pojedynczej liczby od 0 do 1, tak jak każda korelacja Pearsona używa dwóch wektorów na wejściu. Jakieś sugestie? Oczekiwana przeze mnie wartość p musi powiedzieć mi o znaczeniu korelacji.
L_T

1
Masz na myśli jak w cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Odpowiedzi:


13

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 przez cor(c(matrix1), c(matrix2)).


Używając twojej funkcji, otrzymuję następujący błąd: „Błąd w cor (c (macierz1), c (macierz2)):„ x ”musi być liczbą”. Ale jeśli
rzucisz

3
Problem R ten: read.csvktóry prawdopodobnie użyłeś, zwraca a, data.framektóre nie jest a matrix. Więc trzeba go przekonwertować do bycia matrixz as.matrixprzed czyni go jednym z długim wektorem c(), a otrzymane wyniki do cor. Tutaj jest w jednym wierszu:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
sprzężonyprzym

6

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 matrix1kolumn i liniowymi kombinacjamimatrix2kolumny. 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 cancorw bazie R, a także w opisanym tutaj pakiecie CCA .


Cześć, dzięki. Moje dane to proste dwie macierze zawierające te same zmienne. Struktura dwóch macierzy jest identyczna. Wartości w każdej komórce są wynikami eksperymentu, w którym zmienne te zostały ocenione w 9-punktowej skali Likerta i uśrednione dla wszystkich uczestników. Którą najlepszą strategią do znalezienia jest korelacja między dwiema matrycami? Czy potrafisz podać przykład w języku R?
L_T

1
Z podstawą R jest po prostu cancor(matrix1, matrix2).
conjugateprior

Ale może możesz trochę wyjaśnić. Zadzwoń . Czym jest ? Czy jest to odpowiedź tej osoby na -ty element Likerta? Na pewno nie. Skąd zatem bierze się średnia liczba uczestników? matrix1 AAijij
conjugateprior

Cześć, było 10 uczestników, musieli wyrazić „stopień spójności” pomiędzy parami bodźców (zauważ, że to nie jest eksperyment oceniający odmienność). Zrobiłem 2 eksperymenty. i chcę porównać wyniki w 2 warunkach eksperymentalnych. Każda komórka jest średnią ocen uczestników 1o dla każdej pary bodźców. Więc czy nadal powinienem używać Cancor?
L_T

Użyłem Cancora, ale nie otrzymuję ani jednej wartości współczynnika wyrażającej korelację, ani wartości p wyrażającej jej znaczenie. Proszę pomóż!
L_T

3

Jeśli luźno interpretujesz korelację jako podobieństwo, możesz użyć definicji opartej na produkcie wewnętrznym, takiej jak:

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

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.


Wydaje się, że współczynnik rv jest tym, o co poprosił PO: wartość między 0 a 1, która mówi o tym, jak podobne są obie macierze.
llrs
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.