2016-03-21 4 views
4

У меня есть блок данных с 49 переменными и 4M строками. Я хочу вычислить корреляционную матрицу 49 х 49. Все столбцы имеют числовое число.Ускорение вычисления корреляционной матрицы в R

Вот пример:

df <- data.frame(replicate(49,sample(0:50,4000000,rep=TRUE))) 

Я использовал стандартную cor функцию.

cor_matrix <- cor(df, use = "pairwise.complete.obs") 

Это занимает очень много времени. У меня 16 ГБ оперативной памяти и i5 одноядерный 2,60 ГГц.

Есть ли способ сделать этот расчет быстрее на моем рабочем столе?

+1

Вы можете проверить [здесь] (http://www.r-bloggers.com/bigcor-large-correlation-matrices-in-r/) – akrun

+1

Ваша основная проблема - 'use =" pairwise.complete.obs " '. В моей системе (протестировано 12 столбцов), которая занимает в пять раз больше, чем 'use =" все ". – Roland

ответ

1

Существует более быстрая версия функции cor в пакете WGCNA (используется для вывода генных сетей на основе корреляций). На моем 3,1 ГГц i7 ж/16 ГБ оперативной памяти может решить ту же 49 х 49 матрицы о 20x быстрее:

mat <- replicate(49, as.numeric(sample(0:50,4000000,rep=TRUE))) 

system.time(
    cor_matrix <- cor(mat, use = "pairwise.complete.obs") 
) 
user system elapsed 
40.391 0.017 40.396 

system.time(
    cor_matrix_w <- WGCNA::cor(mat, use = "pairwise.complete.obs") 
) 
user system elapsed 
1.822 0.468 2.290 

all.equal(cor_matrix, cor_matrix_w) 
[1] TRUE 

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

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