Корреляция между матрицами в 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

L_T
источник
4
Немного неясно, чего вы хотите. Когда вы говорите, что хотите получить один результат для cor (matrix1, matrix2), вы пытаетесь сопоставить (все числа в matrix1) с (все числа в matrix2)? В этом случае вы можете попробовать cor (as.vector (matrix1), as.vector (matrix2))
Marius
Какое именно значение p должно показывать? (то есть, какую гипотезу вы проверяете?)
гл.
Нет, я просто хочу соотнести две матрицы, чтобы узнать, насколько они похожи. Я не хочу сравнение за ячейкой. В результате я просто хочу получить одно число от 0 до 1, как это делает любая корреляция Пирсона с использованием двух векторов на входе. Любое предложение? Р-значение, которое я ожидаю, должно сказать мне значение корреляции.
L_T
1
Вы имеете в виду как в cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Ответы:

12

Если вы просто хотите вычислить корреляцию между двумя наборами значений, игнорируя структуру матрицы, вы можете преобразовать матрицы в векторы, используя 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)))
сопряженный
5

Вы ничего не сказали о том, что ваши данные на самом деле. Тем не менее ...

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

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

В этой ситуации один потенциально интересный более структурированный корреляционный анализ состоит в том, чтобы найти канонические корреляции . Это предполагает, что вы хотите суммировать отношения между двумя наборами переменных в терминах корреляции (связей) между линейными комбинациями matrix1столбцов и линейными комбинациямиmatrix2колонны. И вы захотите сделать это, если вы подозреваете, что существует пространство небольшой размерности, возможно, даже 1, которое выявит основную структуру корреляции во всех случаях, которая скрыта их реализацией в текущих переменных системах координат, определяемых переменными. Следовательно, значение этой (канонической) корреляции в некотором смысле суммирует многовариантные линейные отношения между двумя матрицами. Действительно, в то время как CCA работает для матриц с различным числом переменных, она сводится к корреляции Пирсона, когда каждая «матрица» представляет собой только один столбец.

Реализация

Канонический корреляционный анализ описан в большинстве многомерных аналитических текстов, что, пожалуй, наиболее полезно, если вы довольны матричной алгеброй вплоть до собственного анализа. Он реализован как cancorв базе R, а также в пакете CCA , который описан здесь .

conjugateprior
источник
Привет спасибо. Мои данные - это две простые матрицы, содержащие одинаковые переменные. Структура двух матриц идентична. Значения в каждой ячейке являются результатами эксперимента, в котором эти переменные оценивались по 9-балльной шкале Лайкерта и усреднялись по участникам. Какую стратегию лучше всего найти, есть корреляция между двумя матрицами? Можете ли вы сделать пример в R?
L_T
1
С базой R это просто cancor(matrix1, matrix2).
конъюнктур
Но, возможно, вы можете уточнить немного. Вызов . Тогда что такое ? Это ответ человека на предмет Лайкерта? Конечно нет. Так, где среднее число участников входит? matrix1 A i j i jAAijij
конъюнктур
Привет, было 10 участников, они должны были выразить «степень согласованности» между парами стимулов (обратите внимание, что это не эксперимент по оценке различий). Я сделал 2 эксперимента. и я хочу сравнить результаты в двух условиях. Каждая ячейка представляет собой среднее значение оценок участников для каждой пары стимулов. Тогда я должен все еще использовать cancor?
L_T
Я использовал cancor, но у меня нет ни одного значения коэффициента, выражающего корреляцию, ни значения p, выражающего его значимость. Пожалуйста помоги!
L_T
3

Если вы свободно интерпретируете корреляцию как означающую сходство, вы можете использовать определение, основанное на внутреннем продукте, например:

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

С вашими данными это дает 0,996672.

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

Кстати, кажется, ваши данные сильно коррелированы.

Эмре
источник
Похоже, что это коэффициент rv , который задает OP: значение от 0 до 1, которое говорит о том, насколько похожи обе матрицы.
ЛОП