cor показывает только NA или 1 для корреляций - почему? - PullRequest
28 голосов
/ 26 сентября 2010

Я запускаю cor() на data.frame со всеми числовыми значениями и получаю в результате:

       price exprice...
price      1      NA
exprice   NA       1
...

Так что это либо 1, либо NA для каждогозначение в результирующей таблице.Почему вместо действительных корреляций отображаются NA?

Ответы [ 5 ]

38 голосов
/ 26 июня 2014

Скажите корреляцию, чтобы игнорировать NA с аргументом use, например ::10000 *

cor(data$price, data$exprice, use = "complete.obs")
30 голосов
/ 26 сентября 2010

1 с, потому что все прекрасно коррелирует с самим собой, а NA с, потому что в ваших переменных NA.

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

Вы можете изменить это поведение с аргументом use на cor, подробности см. ?cor.

12 голосов
/ 27 сентября 2010

NA также появляются, если есть атрибуты с нулевой дисперсией (со всеми равными элементами); см. например:

cor(cbind(a=runif(10),b=rep(1,10)))

, который возвращает:

   a  b
a  1 NA
b NA  1
Warning message:
In cor(cbind(a = runif(10), b = rep(1, 10))) :
  the standard deviation is zero
4 голосов
/ 20 ноября 2017

очень простой и правильный ответ

Скажите корреляцию, чтобы игнорировать NA с аргументом использования, например:

cor(data$price, data$exprice, use = "complete.obs")
2 голосов
/ 21 апреля 2017

НС может быть по двум причинам. Во-первых, в ваших данных есть АН. Другое связано с тем, что одно из значений является постоянным. Это приводит к тому, что стандартное отклонение равно нулю, и, следовательно, функция cor возвращает NA.

...