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.

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.


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.


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


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?).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.