У меня есть таблица данных T1, которая содержит почти тысячу переменных (V1) и около 200 миллионов точек данных. Данные редки, и большинство записей - NA. Каждый пункт данных имеет уникальный идентификатор и пару дат, чтобы отличить его от другого.
У меня есть другая таблица T2, которая содержит отдельный набор переменных (V2). В этой таблице также есть пара идентификаторов и дат, которые однозначно идентифицируют записи в T2.
Мы подозреваем, что данные в T1 могут быть использованы для прогнозирования значений переменных в T2.
Чтобы доказать это, я подумал применить модель 'glm' в R и проверить, можем ли мы действительно найти некоторую переменную в T2, которая зависит от переменных в T1.
Для каждой переменной в T2 я начал извлекать все данные в T1, имеющие одинаковые пары id и даты, что привело к гораздо меньшим точкам данных ~ 50K для некоторых тестовых переменных.
Проблемы, с которыми я сталкиваюсь сейчас с применением glm, заключается в следующем.
В некоторых случаях он показывает ошибку «fit not found» и предупреждение «glm.fit: алгоритм не сходится». Я не уверен, почему это показано?
Как с НС обращаются в глм? Удаляет ли он сначала все записи, содержащие «NA», а затем выполняет подгонку?
Является ли хорошей стратегией сначала удалить все NA, а затем вызвать «glm». Я боюсь, что это может значительно уменьшить точки данных, так как большинство из них - АН.
Какой метод используется для расчета коэффициентов. Я не смог найти ни сайта, ни бумаги, ни книги, в которых обсуждается, как рассчитывается результат.
Я проверил glm с и без 'NA' и нашел разные ответы, которые указывают, что 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
источник