Radzenie sobie z brakujących wartości do obliczania korelacji

Mam ogromną matrycę z dużą ilością brakujących wartości. Chcę uzyskać korelację między zmiennymi.

1. jest rozwiązaniem

cor(na.omit(matrix))
Lepiej niż poniżej?
cor(matrix, use = "pairwise.complete.obs")

Wybrałem już tylko zmienne posiadające więcej niż 20% brakujących wartości.

2. która metoda jest najlepsza na sens ?

Author: zx8754, 2011-09-16

3 answers

Zagłosowałbym za drugą opcją. Wygląda na to, że masz sporą ilość brakujących danych, więc będziesz szukał sensownej strategii wielokrotnego przypisywania, aby wypełnić przestrzenie. Zobacz tekst Harrella "strategie modelowania regresji" dla bogactwa wskazówek na temat " Jak to zrobić właściwie.

 18
Author: IRTFM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-17 20:45:13

Myślę, że druga opcja ma większy sens,

Możesz rozważyć użycie funkcji rcorr w pakiecie Hmisc.

Jest bardzo szybki i zawiera tylko parami kompletnych obserwacji. Zwracany obiekt zawiera macierz

  1. wyników korelacji
  2. z liczbą obserwacji zastosowaną dla każdej wartości korelacji
  3. o wartości p dla każdej korelacji

Oznacza to, że można ignorować wartości korelacji na podstawie małej liczby obserwacje (niezależnie od tego, jaki jest dla Ciebie próg) lub na podstawie wartości 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
 12
Author: Iain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-18 09:10:51

Dla przyszłych czytelników Parawise-pełna korelacja uważana za niebezpieczną może być wartościowa, argumentując, że cor(matrix, use = "pairwise.complete.obs") jest uważana za niebezpieczną i sugerując alternatywne rozwiązania, takie jak use = "complete.obs").

 6
Author: Triamus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 16:35:02