Atualizando a regressão linear com eficiência ao adicionar observações e / ou preditores em R

15

Eu estaria interessado em encontrar maneiras em R para atualizar eficientemente um modelo linear quando uma observação ou um preditor é adicionado. O biglm possui um recurso de atualização ao adicionar observações, mas meus dados são pequenos o suficiente para residir na memória (embora eu tenha um grande número de instâncias para atualizar). Existem maneiras de fazer isso com as próprias mãos, por exemplo, para atualizar a fatoração QR (consulte "Atualizando a fatoração QR e o problema dos mínimos quadrados", de Hammarling e Lucas), mas espero uma implementação existente.

gappy
fonte

Respostas:

6

Se o algoritmo que você está procurando é realmente algo como Estatística Aplicada 274 , 1992, Vol 41 (2), então você pode apenas usar biglm , pois não exige que você mantenha seus dados em um arquivo.

Dirk Eddelbuettel
fonte
Obrigado, mas o biglm pode ser atualizado nos preditores de números? Eu pensei que atualizava apenas as observações.
gappy
Existe uma solução de formulário fechado para adicionar preditores? Você precisa do equivalente para inv (X'X), isso existe para adicionar uma coluna? De qualquer forma, seus problemas não são "pequenos" como, digamos, alguns (dez) mil por algumas centenas? Isso realmente importa?
Dirk Eddelbuettel
2
Existem formulários fechados simples para atualizar um SVD e fórmulas mais envolvidas para o QR. A economia computacional pode ser significativa ao resolver milhares de modelos. Eles podem ser implementados no R, mas requer um pouco de trabalho. É um bom projeto.
gappy
2
Bem, entendo que há uma equipe de TI capaz em sua loja. Estou certo de que eles podem implementar algo interessante para você.
Dirk Eddelbuettel
4

Há ranking função de atualização um QR em Matlab aqui que você economiza um fator na complexidade da actualização dos coeficientes de um p-variada de regressão linear.p

Apesar de procurar por alguns meses atrás, eu não consegui encontrar um equivalente em R (cuidado, existem muitas funções qr.update no cran, mas quando você olha por baixo do capô, elas são apenas falsas - ou seja, eles chamam lm.update tudo o mesmo).

Atualização : tente na fonte do pacote 'saltos'. Na fonte R, você encontrará uma função 'leaps.forward', que chama uma rotina FORTRAN 'forwrd', localizada no / src do pacote que parece implementar a atualização QR do rank 1.

user603
fonte
3

Por que você não tenta o recurso de atualização do objeto de modelo linear

update.lm( lm.obj, formula, data, weights, subset, na.action)

Dê uma olhada nestes links

  • Para uma explicação geral da função de atualização:

http://stat.ethz.ch/R-manual/R-devel/library/stats/html/update.html

  • Para uma explicação específica sobre update.lm:

http://www.science.oregonstate.edu/~shenr/Rhelp/update.lm.html

deps_stats
fonte
3
Há duas coisas que não funcionam com a atualização (NB: update.lm está obsoleto). Primeiro, ele usa fórmulas. Isso por si só torna a execução 400% mais lenta que lm.fit () Segundo, reestima o modelo inteiro. Não há ganhos de eficiência aqui.
gappy
Obrigado pelo fato, estou usando a atualização para modelos de tamanho médio. Provavelmente não é útil no seu caso.
deps_stats
1

Eu também estou procurando há muito tempo um equivalente à atualização do matlab qr, saltos parece uma boa maneira!

Em R, você pode observar a função recresid () no pacote strucchange, que fornecerá resíduos recursivos quando você adicionar uma observação (não variável!). Meu palpite é que isso exigirá pouca modificação para obter betas recursivos (o betar no código?).

Matifou
fonte