Работа с отсутствующими значениями для расчета корреляций
У меня огромная матрица с большим количеством недостающих значений. Я хочу получить корреляцию между переменными.
1. Является ли решение
cor(na.omit(matrix))
лучше, чем ниже?
cor(matrix, use = "pairwise.complete.obs")
Я уже выбрал только переменные, имеющие более 20% пропущенных значений.
2. Какой из лучших методов имеет смысл?
Ответы
Ответ 1
Я бы проголосовал за второй вариант. Похоже, что у вас есть достаточное количество недостающих данных, и поэтому вы бы искали разумную стратегию множественного вливания, чтобы заполнить пробелы. См. Текст Харрелла "Стратегии моделирования регрессии" для получения большого количества рекомендаций относительно того, как это сделать должным образом.
Ответ 2
Я думаю, что второй вариант имеет больше смысла,
Вы можете использовать функцию rcorr в пакете Hmisc.
Это очень быстро и включает только парные полные наблюдения.
Возвращаемый объект содержит матрицу
- показателей корреляции
- с числом наблюдений, используемым для каждого значения корреляции
- p-значения для каждой корреляции
Это означает, что вы можете игнорировать значения корреляции на основе небольшого числа наблюдений (независимо от того, что пороговое значение для вас) или на основе 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
Ответ 3
Для будущих читателей Сопряженная корреляция, считающаяся опасной, может быть ценной, утверждая, что cor(matrix, use = "pairwise.complete.obs")
считается опасным и предлагает альтернативы, такие как use = "complete.obs")
.