Ich habe eine Datentabelle T1, die fast tausend Variablen (V1) und rund 200 Millionen Datenpunkte enthält. Die Daten sind spärlich und die meisten Einträge sind NA. Jeder Datenpunkt hat ein eindeutiges Paar aus ID und Datum, um sich von anderen zu unterscheiden.
Ich habe eine andere Tabelle T2, die einen separaten Satz von Variablen enthält (V2). Diese Tabelle hat auch ein Paar aus ID und Datum, das Einträge in T2 eindeutig identifiziert.
Wir vermuten, dass die Daten in T1 verwendet werden können, um Werte von Variablen in T2 vorherzusagen.
Um dies zu beweisen, habe ich mir überlegt, das 'glm'-Modell in R anzuwenden und zu prüfen, ob wir in T2 wirklich eine Variable finden können, die von Variablen in T1 abhängig ist.
Für jede Variable in T2 habe ich begonnen, alle Daten in T1 mit demselben ID- und Datumspaar zu extrahieren, was bei einigen Testvariablen zu viel kleineren ~ 50K-Datenpunkten führte.
Die Probleme, denen ich jetzt mit der Anwendung von glm gegenüberstehe, sind wie folgt.
In einigen Fällen wird der Fehler "Nicht gefunden" und die Warnung "glm.fit: Algorithmus ist nicht konvergiert" angezeigt. Ich bin nicht sicher, warum es gezeigt wird?
Wie werden die NAs in glm behandelt? Entfernt es zuerst alle Datensätze, die 'NA' betreffen, und führt dann eine Anpassung durch?
Ist es eine gute Strategie, zuerst alle NAs zu entfernen und dann 'glm' aufzurufen? Ich befürchte, dass dies die Datenpunkte erheblich reduzieren könnte, da die meisten von ihnen NAs sind.
Mit welcher Methode werden die Koeffizienten berechnet? Ich konnte keine Website, kein Papier oder kein Buch finden, auf denen die Berechnung der Ausgabe erläutert wird.
Ich habe glm mit und ohne 'NAs' getestet und verschiedene Antworten gefunden, die beim Anpassen der Daten berücksichtigt werden:
Beispiel 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
Beispiel 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