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