Кореляція між матрицями в R


9

У мене проблеми з використанням cor()і cor.test()функцій.

У мене просто дві матриці (тільки числові значення, однакова кількість рядків і стовпців), і я хочу мати номер кореляції та відповідне p-значення.

Під час використання cor(matrix1, matrix2)я отримую коефіцієнти кореляції для всіх комірок. Я просто хочу одне число в результаті кор.

Крім того, коли я це роблю, cor.test(matrix1, matrix2)я отримую таку помилку

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

Як я можу отримати значення p для матриць?

Тут ви знайдете прості таблиці, з якими я хочу співвіднести:

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

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


4
Трохи незрозуміло, чого ти хочеш. Коли ви говорите, що хочете отримати один результат для cor (matrix1, matrix2), ви намагаєтеся співвіднести (всі числа в matrix1) з (усі числа в matrix2)? У такому випадку ви можете спробувати cor (as.vector (matrix1), as.vector (matrix2))
Marius

Яке саме р-значення очікується показати точно? (тобто, яку гіпотезу ви перевіряєте?)
chl

Ні, я просто хочу співвіднести дві матриці, щоб знати, наскільки вони схожі. Я не хочу порівнювати клітинку за кліткою. Я просто хочу, як результат, одне число від 0 до 1, як і кожне співвідношення груш, використовуючи два вхідні вектори. Будь-яка пропозиція? Значення р, яке я очікую, повинне підказати мені значення кореляції.
L_T

1
Ви маєте на увазі як в cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Відповіді:


13

Якщо ви просто хочете обчислити кореляцію між двома наборами значень, ігноруючи матричну структуру, ви можете перетворити матриці у вектори, використовуючи c(). Тоді ваше співвідношення обчислюється cor(c(matrix1), c(matrix2)).


Використовуючи вашу функцію, я отримую цю помилку: "Помилка в cor (c (matrix1), c (matrix2)): 'x' має бути числовою". Але якщо ви швидко подивитесь на мої таблиці, ви помітите, що вони містять лише цифри ... Я не розумію
L_T

3
Випуск R цього питання: read.csvякий ви, ймовірно, використовували, повертає a, data.frameщо не є a matrix. Так що вам потрібно , щоб перетворити його , щоб бути matrixз , as.matrixперш ніж зробити це один довгий вектор з c()і даючи результати cor. Ось це в одному рядку:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
сполучаєтьсяпріор

6

Ви нічого не сказали про те, якими є фактично ваші дані. Тим не менш ...

Припустимо , у ваших матрицях є стовпці, що представляють два набори (різних) змінних та (однакова кількість) рядків, що представляють регістри.

Канонічний кореляційний аналіз

У цій ситуації можливим цікавим більш структурованим кореляційним аналізом є пошук канонічних кореляцій . Це передбачає, що ви хочете узагальнити зв'язок між двома наборами змінних з точки зору співвідношення (-ів) між лінійними комбінаціями matrix1стовпців та лінійними комбінаціямиmatrix2стовпчики. І ви б хотіли це зробити, якщо б ви підозрювали, що існує простір невеликої розмірності, можливо, навіть 1, який би виявив основоположну структуру кореляції у всіх випадках, які затьмарюються їх реалізацією в поточних системах координат, визначених змінними. Отже, значення цього (канонічного) співвідношення в певному сенсі узагальнило б багатовимірне лінійне співвідношення між двома матрицями. Дійсно, хоча CCA працює для матриць з різною кількістю змінних, вона зводиться до співвідношення Пірсона, коли кожна 'матриця' є лише одним стовпчиком.

Впровадження

Канонічний кореляційний аналіз описаний у більшості текстів багатофакторного аналізу, що, мабуть, є найбільш корисним, якщо вам подобається матрична алгебра аж до ейгенаналізу. Він реалізований як cancorв базовій частині R, так і в пакеті CCA, який описаний тут .


Привіт спасибі Мої дані - це прості дві матриці, що містять однакові змінні. Структура двох матриць однакова. Значення в кожній комірці є результатами експерименту, коли ці змінні оцінювались за 9-бальною шкалою Лікерта та усереднювались для учасників. Яку найкращу стратегію можна знайти, якщо існує кореляція між двома матрицями? Чи можете ви зробити приклад в R?
L_T

1
З базою R це просто cancor(matrix1, matrix2).
сполученийперіор

Але, можливо, ви можете трохи уточнити. Дзвінокmatrix1 A. Тоді що єAij? Цеi-відповідь людини на j-й предмет Лайкерта? Напевно ні. То де ж приходить середній показник серед учасників?
сполученийперіор

Привіт, було 10 учасників, вони мали виразити "ступінь узгодженості" між подразниками пар (зауважте, що це не експеримент з оцінкою несхожості). Я зробив 2 експерименти. і я хочу порівняти результати за 2 експріментальних умов. Кожна клітина - це середнє значення оцінок учасників 1о для кожної пари подразників. Тоді мені все-таки слід користуватися cancor?
L_T

Я використовував cancor, але не отримую жодного значення коефіцієнта, що виражає кореляцію, а також значення p, яке виражає його значення. Будь ласка, допоможіть!
L_T

3

Якщо ви вільно трактуєте кореляцію на означення подібності, ви можете використовувати визначення на основі внутрішнього продукту, наприклад:

cAB=A,BA||Bде іA,Btr(ABT)x||x,x1/2

За вашими даними, це дає 0,996672.

Альтернативою, якщо структура матриці не є важливою, є просто розрівняти матриці у вектори та використовувати міру кореляції на ваш вибір. Оскільки я не знаю розповсюдження ваших даних, я використав точковий продукт, щоб отримати 0,976.

Таким чином, здається, що ваші дані сильно корелюються.


Це здається коефіцієнтом rv , який запитував ОП: значення між 0 і 1, яке говорить про те, наскільки схожі обидві матриці.
llrs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.