2016-07-28 7 views
2

надеюсь, что это сообщение не является дубликатом, но я потратил довольно много времени на поиск и не смог найти ответ.Сравните только попарные сравнения МЕЖДУ двумя матрицами, использующими rcorr() в R

У меня есть две матрицы, которые я пытаюсь сделать с помощью парных корреляций между ними, которые выглядят так.

Matrix 1 
     gene1  gene2  gene3 
ID1 12  32  43 
ID2 94  34  95 
ID3 90  54  23 
ID4 43  76  65 

Matrix2 
     TE1  TE2  TE3  
ID1 94  90  82 
ID2 23  46  94 
ID3 23  49  39 
ID4 39  34  46 

Я в состоянии получить таблицу 2 значений R^с помощью базовой функции кора(), которая только делает сравнение между матрицами, в парном образе. Результат выглядит примерно так:

 gene1  gene2  gene3 
TE1 0.98   0.48   0.45 
TE2 0.77   0.46   0.76 
TE3 0.45   0.56   0.76 

Это замечательно! Но проблема в том, что мне тоже нужны значения p, поэтому я могу сократить матрицу до тех, у которых только p значений меньше определенного обрезания (потому что мои реальные матрицы - [30,800] и [30,1000], и мне нужен способ сократите данные до чего-то понятного).

Пакет rcorr() отлично подходит для этого, так как он производит матрицу r корреляций, матрицу P значений p и вектор числа наблюдений. НО, я не смог найти способ сравнить только матрицы BETWEEN - он также сравнивает матрицы WITHIN. Я получаю результат, похожий на этот:

 gene1 gene2 gene3 TE1 TE2 TE3 
gene1 1.0  0.5  0.5  0.5 0.3 0.9 
gene2   1.0  0.4  0.7 0.7 0.5 
gene3     1.0  0.8 0.8 0.5 
TE1       1.0 0.8 0.2 
TE2         1.0 0.7 
TE3          1.0 

Это составленные данные, но это иллюстрирует точку. Это дает в два раза больше данных, чем мне на самом деле, и замедляет вычисления, а также создает диаграммы корреляции, которые нонсенс визуально.

Итак, мой вопрос заключается в следующем: существует ли способ сравнения только между, а не внутри матриц с использованием функции пакета Hmisc rcorr()?

Я также попробовал cor.test в списках матриц:

cor.test(c(matrix1),c(matrix2), method="pearson") 

, но я получаю сообщение об ошибке, что 'x' and 'y' must have the same length.

Далее я должен выяснить, как на самом деле подмножить матрицы на основе списка с высокой корреляцией и низким значением p, но я вижу, что здесь есть некоторые полезные ответы, которые мне нужно тщательно изучить.

ответ

0

Там, вероятно, является более простой способ сделать это, но один вариант сделать cor.test для каждой паре столбцов

tmp <- with(expand.grid(seq(ncol(matrix1)), seq(ncol(matrix2))), 
      mapply(function(i, j) cor.test(matrix1[, i], matrix2[, j]), 
        Var1, Var2)) 

, а затем извлечь элементы из теста объектов

matrix(unlist(tmp['estimate', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2   TE3 
#gene1 -0.8757869 -0.4755768 -0.008312574 
#gene2 -0.3567850 -0.7585136 -0.834883959 
#gene3 -0.2723512 -0.3764091 0.546779587 

matrix(unlist(tmp['p.value', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2  TE3 
#gene1 0.05156122 0.4181472 0.98941622 
#gene2 0.55555798 0.1371765 0.07851595 
#gene3 0.65756758 0.5323119 0.34025894 

Вы может проверить, что это правильно, сравнивая вывод cor(matrix1, matrix2) с матрицей оценок, матрицы должны быть равны.

+0

Итак, я приму этот ответ, потому что он работает, и я могу использовать его в будущем. Спасибо! Но мне удалось сделать то же самое с помощью rcorr() в конце, с функцией из этого сообщения в блоге [ссылка] (http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start -руководство к анализу формата-и-визуализации-а-корреляционной матрицы-используя-R-программного обеспечения). Я использовал функцию «flatten» для извлечения значений pvalues ​​и корреляции для каждого парного сравнения, а затем использовал строковые характеристики из имен, чтобы исключить все, кроме попарных сравнений, которые я хотел, а затем использовал 'dcast()' для создания матрицы. – lmrta

 Смежные вопросы

  • Нет связанных вопросов^_^