我有一个数据表 T1,其中包含近一千个变量(V1)和大约 2 亿个数据点。数据稀疏,大多数条目是 NA。每个数据点都有一个唯一的 id 和日期对来区分。
我有另一个表 T2,其中包含一组单独的变量 (V2)。此表还具有唯一标识 T2 中的条目的 id 和日期对。
我们怀疑 T1 中的数据可以用来预测 T2 中变量的值。
为了证明这一点,我想在 R 中应用“glm”模型并检查我们是否真的可以在 T2 中找到一些依赖于 T1 中的变量的变量。
对于 T2 中的每个变量,我开始提取 T1 中具有相同 id 和日期对的所有数据,这导致某些测试变量的数据点要小得多,约为 50K。
我现在应用glm面临的问题如下。
在某些情况下,它向我显示错误“未找到拟合”和警告“glm.fit:算法未收敛”。我不确定为什么会显示?
在 glm 中如何处理 NA?它会先删除所有涉及“NA”的记录,然后再进行拟合吗?
首先删除所有NA然后调用'glm'是一个好策略吗?我担心这可能会显着减少数据点,因为它们中的大多数都是 NA。
使用哪种方法计算系数。我找不到任何讨论如何计算输出的网站、论文或书籍。
我在有和没有'NAs'的情况下测试了glm,发现了不同的答案,在拟合数据时考虑了NAs:
示例 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
示例 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