2016-09-22 2 views
0

Так что у меня очень большой dataframe что выложенный как и в этом примере:Корреляция данных экспрессии генов по данным выживаемости в R cor.test, corr.test или corr?

line gene1 gene2 gene3 gene4 gene5 survival 
1  4.05  7.65  0.25  0.789 10.5 0.90 
2  2.51  4.36  12.5  7.56  8.99 0.50 
3  3.65  2.55  48.8  5.65  5.89 0.25 
4  5.65  1.54  8.99  9.2  0.01 0.10 

Единственное отличие состоит в том, что я имею дело с более чем 18 000 генов в моих фактических данных. line относится к генетическим линиям мух, а числа в каждом столбце «ген» относятся к относительной экспрессии генов. survival - доля выживания в каждой строке. То, что я хотел бы сделать, это сопоставить столбцы с 2 по 5 (выражения генов) со столбцом 6 (survival). Я попытался это с cor и она отлично работает:

cor1<-cor(master2[c(2:5)], master2$surv, method="pearson") 

Однако, я хочу, чтобы это сделать с помощью cor.test или corr.test (от psych пакета) для вывода р-значений и сделать некоторые корректировки на них.

Я пробовал:

cor1<-cor.test(master2[c(2:5)], master2$surv, method="pearson") 

и получите:

Error in cor.test.default(master2[c(2:5)], master2$surv, method = "pearson") : 
'x' and 'y' must have the same length 

И я также пытался:

cor1<-corr.test(master2[c(2:18141)], master2$surv, method="pearson") 

И получите:

Error in 1:ncol(y) : argument of length 0 

Любая помощь будет принята с благодарностью !!!

Спасибо заранее,

Phil

ответ

2

Во-первых, в моем опыте делать что-то подобное с большим набором данных экспрессии генов, psych::corr.test() является далеко выше, особенно для матрицы на матрицу или ФР Д.Ф..

Преимущество psych::corr.test() также является причиной, по которой вы получаете эту ошибку. Оба входа должны быть как матрицами, так и файловыми кадрами - когда вы используете master2$surv для извлечения одного столбца, он больше не является фреймворком данных! Попробуйте использовать master2[,ncol(master2)], чтобы извлечь последний столбец.

Edit:

Вы сможете использовать cor.test как хорошо, но вам нужно будет sapply по столбцам, представляющих интерес в качестве первого аргумента т.е. 2:5 в вашем примере. Производительность мудрая, если это 4 столбца, вероятно, не имеет большого значения, но если это тысячи, я бы порекомендовал pysch::corr.test.

+0

Я попытался: cor1 <-corr.test (master2 [c (2: 18141)], master2 $ surv [, ncol (master2], method = "pearson") и получить сообщение об ошибке (Ошибка: неожиданно) 'in' cor1 <-corr.test (master2 [c (2: 18141)], master2 $ surv [, ncol (master2] ") Итак, я попытался: cor1 <-corr.test (master2 [c (2: 18141)], master2 $ surv [, ncol (master2)], method = "pearson") и получил ошибку в master2 $ surv [, ncol (master2)]: неправильное количество измерений – Melderon

+0

Извинения, это была ошибка копирования мой конец. Вы хотите 'master2 [, ncol (master2)]', а не 'master2 $ surv [, ncol (master2)]'. – vincentmajor

0

Вот как реализовать apply, упомянутый выше.Первое подмножество переменные в качестве матриц:

mat <- df[, 2:5] 
survival <- df[, 6] 

Теперь примените cor.test() по столбцам mat: коэффициенты корреляции

cor <- apply(mat, 2, function(x) cor.test(survival, x)) 

Extract с

unlist(sapply(cor, "[", 4)) 

18 000 переменных должны быть легко выполнимы на приличной машина.

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