Eu tenho uma tabela de dados T1, que contém quase mil variáveis (V1) e cerca de 200 milhões de pontos de dados. Os dados são escassos e a maioria das entradas é NA. Cada ponto de dados possui um par único de identificação e data para distinguir um do outro.
Eu tenho outra tabela T2, que contém um conjunto separado de variáveis (V2). Essa tabela também possui par de identificação e data que identificam exclusivamente as entradas em T2.
Suspeitamos que os dados em T1 possam ser utilizados para prever valores de variáveis em T2.
Para provar isso, pensei em aplicar o modelo 'glm' em R e verificar se podemos realmente encontrar alguma variável em T2 dependente das variáveis em T1.
Para cada variável em T2, comecei a extrair todos os dados em T1 com o mesmo par de identificação e data, o que resultou em pontos de dados muito menores de ~ 50K para algumas variáveis de teste.
Os problemas que estou enfrentando agora com a aplicação do glm são os seguintes.
Em alguns casos, ele me mostra um erro 'ajuste não encontrado' e aviso 'glm.fit: o algoritmo não convergiu'. Não sei por que isso é mostrado?
Como as NAs são tratadas na glm? Remove todos os registros que envolvem 'NA' primeiro e depois realiza o ajuste?
É uma boa estratégia remover primeiro todas as NAs e depois chamar 'glm'. Receio que isso possa reduzir significativamente os pontos de dados, já que a maioria deles é NA.
Qual método é usado para calcular os coeficientes. Não consegui encontrar nenhum site, jornal ou livro que discuta como o resultado é calculado.
Testei o glm com e sem 'NAs' e encontrei respostas diferentes sobre quais pontos os NAs são considerados ao ajustar os dados:
Exemplo 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
Exemplo 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