Работа с пропущенными значениями для расчета корреляций - PullRequest
27 голосов
/ 16 сентября 2011

У меня огромная матрица с множеством пропущенных значений.Я хочу получить корреляцию между переменными.

1. Является ли решение

cor(na.omit(matrix))

лучше, чем ниже?

cor(matrix, use = "pairwise.complete.obs")

Я ужевыбрали только те переменные, у которых более 20% пропущенных значений.

2. Какой метод имеет смысл?

Ответы [ 3 ]

15 голосов
/ 16 сентября 2011

Я бы проголосовал за второй вариант.Похоже, у вас есть достаточное количество пропущенных данных, и поэтому вы бы искали разумную стратегию множественного вменения для заполнения пробелов.См. Текст Харрелла «Стратегии регрессионного моделирования», где вы найдете множество советов о том, как правильно это делать.

11 голосов
/ 18 сентября 2011

Я думаю, что второй вариант имеет больше смысла,

Возможно, вы захотите использовать функцию rcorr в пакете Hmisc.

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

  1. баллов корреляции
  2. с количеством наблюдений, используемых для каждого значения корреляции
  3. р-значения для каждой корреляции

Это означает, что вы можете игнорировать значения корреляции, основываясь на небольшом количестве наблюдений (независимо от того, какой для вас этот порог) или на основе значения p.

library(Hmisc)
x<-matrix(nrow=10,ncol=10,data=runif(100))
x[x>0.5]<-NA
result<-rcorr(x)
result$r[result$n<5]<-0 # ignore less than five observations
result$r
6 голосов
/ 02 августа 2017

Для будущих читателей Попарно-полная корреляция, считающаяся опасной , может быть полезной, утверждая, что cor(matrix, use = "pairwise.complete.obs") считается опасной, и предлагает альтернативы, такие как use = "complete.obs").

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