Mam tabelę danych T1, która zawiera prawie tysiąc zmiennych (V1) i około 200 milionów punktów danych. Dane są rzadkie, a większość wpisów to NA. Każdy punkt danych ma unikalną parę identyfikatora i daty, aby odróżnić je od innych.
Mam inną tabelę T2, która zawiera osobny zestaw zmiennych (V2). Ta tabela ma także parę identyfikatora i daty, które jednoznacznie identyfikują wpisy w T2.
Podejrzewamy, że dane w T1 można wykorzystać do przewidywania wartości zmiennych w T2.
Aby to udowodnić, pomyślałem o zastosowaniu modelu „glm” w R i sprawdzeniu, czy naprawdę możemy znaleźć jakąś zmienną w T2, która jest zależna od zmiennych w T1.
Dla każdej zmiennej w T2 zacząłem wyciągać wszystkie dane w T1 mające ten sam identyfikator i parę dat, co spowodowało znacznie mniejsze ~ 50 000 punktów danych dla niektórych zmiennych testowych.
Problemy, z którymi mam teraz do czynienia przy stosowaniu glm, są następujące.
W niektórych przypadkach pokazuje mi błąd „nie znaleziono dopasowania” i ostrzeżenie „glm.fit: algorytm nie zszedł”. Nie jestem pewien, dlaczego to pokazano?
Jak traktowane są NA w GLM? Czy usuwa najpierw wszystkie rekordy dotyczące „NA”, a następnie wykonuje dopasowanie?
Czy to dobra strategia, aby najpierw usunąć wszystkie NA, a następnie wywołać „glm”. Obawiam się, że może to znacznie zmniejszyć punkty danych, ponieważ większość z nich to NA.
Którą metodę stosuje się do obliczenia współczynników. Nie mogłem znaleźć żadnej strony internetowej, papieru ani książki, która omawiałaby sposób obliczania wyników.
Przetestowałem GLM z „NA” i bez, i znalazłem różne odpowiedzi na pytania, które punkty NA są brane pod uwagę przy dopasowywaniu danych:
Przykład 1:
> tmpData
x1 x2 x3 Y
1 1 1 1 3
2 1 0 4 5
3 1 2 3 6
4 0 3 1 4
Call: glm(formula = as.formula(paste(dep, " ~ ", paste(xn, collapse = "+"))),
na.action = na.exclude)
Coefficients:
(Intercept) as.numeric(unlist(tmpData["x1"])) as.numeric(unlist(tmpData["x2"]))
5.551e-16 1.000e+00 1.000e+00
as.numeric(unlist(tmpData["x3"]))
1.000e+00
Degrees of Freedom: 3 Total (i.e. Null); 0 Residual
Null Deviance: 5
Residual Deviance: 9.861e-31 AIC: -260.6
Przykład 2:
'x1' 'x2' 'x3' 'Y'
100000 1 NA 2
1 1 1 3
1 NA -1124 2
1 0 4 5
1 2 3 6
0 3 1 4
Coefficients:
(Intercept) as.numeric(unlist(tmpData["x1"])) as.numeric(unlist(tmpData["x2"])) as.numeric(unlist(tmpData["x3"]))
-2.3749044 -0.0000625 0.6249899 1.8749937
Degrees of Freedom: 5 Total (i.e. Null); 2 Residual
Null Deviance: 13.33
Residual Deviance: 1.875 AIC: 20.05
źródło