R: корреляция Пирсона rcorr (x, y) [x = матрица, y = вектор] игнорирует y

У меня есть матрица x (30x2000) выражений гена 2000 в разных клеточных линиях и вектор y (30x1) непрерывного переменного результата. Я хочу рассчитать корреляцию Пирсона между каждым геном и результатом, поэтому я ожидаю, что вектор rx-значений 2000x1. Я использовал rcorr(x,y), но в результате получается матрица 2000x2000, поэтому я предполагаю, что она игнорирует y и вычисляет все гены против всех (в руководстве написано:

x = числовая матрица с не менее чем 5 строками и не менее 2 столбцов (если y отсутствует)

Но могу ли я иметь более одного столбца и иметь y тоже? Должен ли я использовать другую функцию?

2 ответа

Вам нужно apply функцию cor по столбцам вашей матрицы x...

apply( x , 2 , cor , y = y )

Воспроизводимый пример

# For reproducible data
set.seed(1)
# 3 x 4 matrix
x <- matrix( runif(12) , nrow = 3 )
# [,1] [,2] [,3] [,4]
#[1,] 0.2655087 0.9082078 0.9446753 0.06178627
#[2,] 0.3721239 0.2016819 0.6607978 0.20597457
#[3,] 0.5728534 0.8983897 0.6291140 0.17655675
# Length 3 vector
y <- runif(3)
#[1] 0.6870228 0.3841037 0.7698414
# Length 4 otuput vector
apply( x , 2 , cor , y = y )
#[1] 0.3712437 0.9764443 0.2249998 -0.4903723


Использование функции cor будет работать. В общем случае, если x является MxN иy y является MxP, то cor(x,y) будет матрицей NxP, где запись (i, j) является корреляцией между x[,i] и y[,j].

Основываясь на примере воспроизводимого SimonO101:

> set.seed(1)
> x <- matrix( runif(12) , nrow = 3 )
> y <- runif(3)
> cor(x,y)
 [,1]
[1,] 0.3712437
[2,] 0.9764443
[3,] 0.2249998
[4,] -0.4903723

Если вам нужен только вектор, а не матрица:

> array(cor(x,y))
[1] 0.3712437 0.9764443 0.2249998 -0.4903723

licensed under cc by-sa 3.0 with attribution.