В чем разница между cor и cor.test в R

У меня есть фрейм данных, в которых столбцы представляют собой разные образцы эксперимента. Я хотел найти корреляцию между этими образцами. Итак, корреляция между образцами v2 и v3, между образцами v2 и v4, .... Это фрейм данных:

> head(t1)
      V2          V3          V4         V5         V6
1 0.12725011 0.051021886 0.106049328 0.09378767 0.17799444
2 0.86096784 1.263327211 3.073650624 0.75607466 0.92244361
3 0.45791031 0.520207274 1.526476608 0.67499102 0.49817761
4 0.00000000 0.001139721 0.003158557 0.00000000 0.00000000
5 0.13383965 0.098943019 0.099922146 0.13871867 0.09750611
6 0.01016334 0.010187671 0.025410170 0.00000000 0.02369374
> nrow(t1)
[1] 23367

если я запускаю функцию cor для этого фрейма данных, чтобы получить корреляцию между выборками (столбцами), я получаю NA для всех выборок:

> cor(t1, method= "spearman")
V2 V3 V4 V5 V6
V2  1 NA NA NA NA
V3 NA  1 NA NA NA
V4 NA NA  1 NA NA
V5 NA NA NA  1 NA
V6 NA NA NA NA  1

но если я запустил это:

> cor.test(t1[,1],t1[,2], method="spearman")$estimate
rho 
0.92394 

это отличается. Почему это так? Как правильно получить корреляцию между этими образцами? Заранее спасибо.


person hora    schedule 02.02.2013    source источник


Ответы (1)


Ваши данные содержат NA значений.

От ?cor:

Если используется «все», NA будет распространяться концептуально, то есть результирующее значение будет NA, если одно из его вспомогательных наблюдений будет NA.

От ?cor.test

na.action функция, которая указывает, что должно произойти, если данные содержат NA. По умолчанию getOption ("na.action").

В моей системе:

getOption("na.action")
[1] "na.omit"

Используйте which(!is.finite(t1)) для поиска проблемных значений и which(is.na(t1)) для поиска NA значений. cor возвращает NaN, если в ваших данных есть Inf значений.

person Roland    schedule 02.02.2013
comment
как я могу проверить, содержит ли мой фрейм данных NA? Я думаю, что он также включает в себя множество значений Inf. Это тоже повлияет? И еще один вопрос: я думаю, что cor.test предназначен для парной корреляции, и для расчета ему нужны два параметра. Я думаю, что мне следует использовать cor, а не cor.test, но я все еще не уверен, правильная ли это функция для поиска корреляции между выборками (столбцами) фрейма данных или нет. - person hora; 02.02.2013
comment
@hora См. мою правку к ответу и прочтите страницы справки. Вы можете использовать *apply функции для попарного сравнения с cor.test. - person Roland; 02.02.2013
comment
Спасибо @Roland. Теперь я проверяю свой фрейм данных, на самом деле только одна строка имеет NA, и я думаю, что только значения, связанные с этой строкой, должны быть NA, но не все из них. Я также заменил значения Inf, но результат все еще НД. На самом деле мой вопрос в том, почему, когда я использую cor.test с тем же набором данных, сравнивая только два образца, результат не NA. Но когда я использую этот cor для всего фрейма данных, я получаю NA. :( - person hora; 02.02.2013
comment
@hora, мы можем догадываться об этом весь день. Покажите нам данные или воспроизведите вашу проблему на простом воспроизводимом примере. - person Roman Luštrik; 02.02.2013
comment
@hora Вы коррелируете не строки, а столбцы. Пожалуйста, постарайтесь понять, что я написал, и внимательно прочтите справочные страницы. - person Roland; 02.02.2013
comment
Извини, Роланд, что я немного запутался. Конечно, я рассчитываю для столбцов, иначе имена строк и столбцов ответа для приведенной выше команды cor не будут основными именами столбцов фрейма данных. На самом деле я запускаю команду с параметром использования, например: cor (q1, method = spearman, use = pairwise.complete.obs), и теперь корреляции не являются NA. Как вы думаете, это правильный параметр, который мне следует использовать? @Roman Luštrik, как мне предоставить данные? это очень большая матрица с 23367 строками. Есть ли возможность добавлять сюда файлы? Я не могу найти это! - person hora; 02.02.2013
comment
@hora, как правило, вы загружаете часть своих данных на сторонний сайт и ссылаетесь на него. Или вы можете создать имитацию примера (см. stackoverflow.com/questions/5963269/). - person Roman Luštrik; 02.02.2013