У меня есть проблемы в использовании 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
r
correlation
L_T
источник
источник
cor(as.vector(matrix1), as.vector(matrix2))
?Ответы:
Если вы просто хотите вычислить корреляцию между двумя наборами значений, игнорируя структуру матрицы, вы можете преобразовать матрицы в векторы, используя
c()
. Тогда ваша корреляция вычисляетсяcor(c(matrix1), c(matrix2))
.источник
read.csv
которое вы, вероятно, использовали, возвращает a,data.frame
а не amatrix
. Таким образом, вам нужно преобразовать его в «matrix
с»,as.matrix
прежде чем сделать его одним длинным вектором сc()
и дать результатыcor
. Вот это в одной строке:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
Вы ничего не сказали о том, что ваши данные на самом деле. Тем не менее ...
Предположим, что в ваших матрицах есть столбцы, представляющие два набора (разных) переменных и (одинаковое количество) строк, представляющих наблюдения.
Канонический корреляционный анализ
В этой ситуации один потенциально интересный более структурированный корреляционный анализ состоит в том, чтобы найти канонические корреляции . Это предполагает, что вы хотите суммировать отношения между двумя наборами переменных в терминах корреляции (связей) между линейными комбинациями
matrix1
столбцов и линейными комбинациямиmatrix2
колонны. И вы захотите сделать это, если вы подозреваете, что существует пространство небольшой размерности, возможно, даже 1, которое выявит основную структуру корреляции во всех случаях, которая скрыта их реализацией в текущих переменных системах координат, определяемых переменными. Следовательно, значение этой (канонической) корреляции в некотором смысле суммирует многовариантные линейные отношения между двумя матрицами. Действительно, в то время как CCA работает для матриц с различным числом переменных, она сводится к корреляции Пирсона, когда каждая «матрица» представляет собой только один столбец.Реализация
Канонический корреляционный анализ описан в большинстве многомерных аналитических текстов, что, пожалуй, наиболее полезно, если вы довольны матричной алгеброй вплоть до собственного анализа. Он реализован как
cancor
в базе R, а также в пакете CCA , который описан здесь .источник
cancor(matrix1, matrix2)
.matrix1
A i j i jЕсли вы свободно интерпретируете корреляцию как означающую сходство, вы можете использовать определение, основанное на внутреннем продукте, например:
С вашими данными это дает 0,996672.
Альтернативой, если матричная структура не важна, является простое выравнивание матриц по векторам и использование выбранной вами меры корреляции. Так как я не знаю распределение ваших данных, я использовал скалярное произведение, чтобы получить 0,976.
Кстати, кажется, ваши данные сильно коррелированы.
источник