Коэффициент Пирсона на строки на больших матрицах - PullRequest
0 голосов
/ 07 мая 2018

В настоящее время я работаю с большой матрицей (4 строки и около 8000 строк). Я хочу выполнить корреляционный анализ, используя коэффициент корреляции Пирсона между различными строками, составляющими эту матрицу.

Я бы хотел поступить следующим образом:

Найти коэффициент корреляции Пирсона между строками 1 и 2. Затем между строками 1 и 3 ... и т. Д. С остальными строками.

  • Затем найдите коэффициент корреляции Пирсона между строками 2 и 3. Затем между строками 2 и 4 ... и т. Д. С остальными строками. Обратите внимание, что я больше не найду коэффициент в строке 1 ...

  • Для тех коэффициентов, которые выше или ниже 0,7 или -0,7 соответственно, я хотел бы перечислить в отдельном файле имена строк, соответствующие этим коэффициентам, плюс коэффициент. Например.: строка 230 - строка 5812 - 0,76

Я написал следующий код для этой цели. К сожалению, это занимает слишком много времени (я оценил почти неделю :().

for (i in 1:7999) {
print("Analyzing row:")
print(i)    
for (j in (i+1):8000) {
    value<- cor(alpha1k[i,],alpha1k[j,],use = "everything",method = "pearson")
    if(value>0.7 | value<(-0.7)){
        aristi <- c(row.names(alpha1k)[i],row.names(alpha1k)[j],value)
        arist1p<-rbind(arist1p,aristi)

    }
}

Тогда мой вопрос, есть ли способ, которым я мог бы сделать это быстрее. Я читал о параллельных вычислениях, но понятия не имею, как это сделать. Надеюсь, я прояснил себя достаточно, заранее спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Как отметил Роланд, вы можете использовать матричную версию cor, чтобы упростить вашу задачу. Просто перенесите свою матрицу, чтобы получить сравнение строк.

mydf <- data.frame(a = c(1,2,3,1,2,3,1,2,3,4), b = rep(5,2,10), c = c(1:10))
cor_mat <- cor(t(mydf)) # correlation of your transposed matrix
idx <- which((abs(cor_mat) > 0.7), arr.ind = T) # get relevant indexes in a matrix form
cbind(idx, cor_mat[idx]) # combine coordinates and the correlation

Обратите внимание, что параметры use = everything и method = "pearson" используются по умолчанию для корреляции. Нет необходимости указывать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...