Como plotar efeitos de interação de conjuntos de dados extremamente grandes (especialmente da saída rxGlm)

Eu sou computação atualglm modela um enorme conjunto de dados. Ambosglm e até mesmospeedglm levar dias para calcular.

Atualmente, tenho cerca de 3 milhões de observações e um total de 400 variáveis, das quais apenas algumas são usadas para a regressão. Na minha regressão, uso 4 variáveis independentes inteiras (iv1, iv2, iv3, iv4), 1 variável independente binária como fator (iv5), o termo de interação (x * y, Ondex é um número inteiro ey é uma variável fictícia binária como fator). Finalmente, eu tenho efeitos fixos ao longo dos anosff1 e IDs da empresaff2. Eu tenho 15 anos e 3000 empresas. Eu introduzi os efeitos fixos adicionando-os como fatores. Observo que especialmente os efeitos fixos da empresa 3000 tornam o cálculo muito lentostats glm e tambémspeedglm.

Decidi, portanto, experimentar o Microsoft R'srxGlm (RevoScaleR), pois isso pode endereçar mais threads e núcleos de processador. De fato, a velocidade da análise é muito mais rápida. Além disso, comparei os resultados de uma subamostra com os resultados padrãoglm e eles combinaram.

Eu usei a seguinte função:

mod1 <- rxGlm(formula = dv ~ 
                      iv1 + iv2 + iv3+ 
                      iv4 + iv5 +
                      x * y +
                      ff1  + ff2,
                    family = binomial(link = "probit"), data = dat,
                    dropFirst = TRUE, dropMain = FALSE, covCoef = TRUE, cube = FALSE)

No entanto, estou enfrentando um problema ao tentar plotar o termo de interação usando oeffects pacote. Ao chamar a seguinte função, estou recebendo o seguinte erro:

> plot(effect("x*y", mod1))
Error in terms.default(model) : no terms component nor attribute

Eu assumo que o problema é querxGlm não armazena os dados necessários para plotar a interação. Eu acredito que sim porque orxGlm objeto é muito menor que oglm portanto, provavelmente contendo menos dados (80 MB vs vários GB).

Agora eu tentei converter orxGlm opor-se aglm através daas.glm(). Ainda assim, oeffects() chamada não gera um resultado e resulta nas seguintes mensagens de erro:

Error in dnorm(eta) : 
  Non-numerical argument for mathematical function
In addition: Warning messages:
1: In model.matrix.default(mod, data = list(dv = c(1L, 2L,  :
  variable 'x for y' is absent, its contrast will be ignored

Se agora comparar um glm original com o "glm convertido", acho que o glm convertido contém muito menos itens. Por exemplo, ele não contémeffects e, pelo contrário, afirma apenascontr.treatment para cada variável.

Agora estou procurando principalmente uma maneira de transpor orxGlm objeto de saída em um formato para que eu possa usar se com oeffect() função. Se não há como fazer isso, como posso obter um gráfico de interação usando funções dentro doRevoScaleR pacote, por exemplo,rxLinePlot()? rxLinePlot() também plota razoavelmente rápido, no entanto, ainda não encontrei uma maneira de obter plots de efeitos de interação típicos. Quero evitar primeiro calcular o valor totalglm modele e plote, pois isso leva muito tempo.

questionAnswers(0)

yourAnswerToTheQuestion