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