Tengo una tabla de datos T1, que contiene casi mil variables (V1) y unos 200 millones de puntos de datos. Los datos son escasos y la mayoría de las entradas son NA. Cada punto de datos tiene un par único de id y fecha para distinguirlo de otro.
Tengo otra tabla T2, que contiene un conjunto separado de variables (V2). Esta tabla también tiene un par de id y fecha que identifican de forma única las entradas en T2.
Sospechamos que los datos de T1 pueden utilizarse para predecir los valores de las variables de T2.
Para probar esto, pensé en aplicar el modelo 'glm' en R y comprobar si realmente podemos encontrar alguna variable en T2 que dependa de variables en T1.
Para cada variable de la T2, empecé a sacar todos los datos de la T1 que tuvieran el mismo par de id y fecha, lo que dio como resultado unos puntos de datos mucho más pequeños de ~50K para algunas de las variables de prueba.
Los problemas que estoy enfrentando ahora con la aplicación de glm son los siguientes.
-
En algunos casos, me muestra un error "ajuste no encontrado" y la advertencia "glm.fit: el algoritmo no converge". No estoy seguro de por qué se muestra?
-
¿Cómo se tratan los NA en glm? ¿Elimina primero todos los registros que incluyen "NA" y luego realiza el ajuste?
-
¿Es una buena estrategia eliminar primero todos los NA y luego llamar a 'glm'? Me temo que esto puede reducir significativamente los puntos de datos, ya que la mayoría de ellos son NAs.
-
Qué método se utiliza para calcular los coeficientes. No he podido encontrar ningún sitio web, documento o libro que hable de cómo se calcula el resultado.
He probado glm con y sin 'NAs' y he encontrado respuestas diferentes que apuntan a que los NAs son considerados mientras se ajustan los datos:
Ejemplo 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
Ejemplo 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