Mise à jour efficace de la régression linéaire lors de l'ajout d'observations et / ou de prédicteurs dans R

15

Je serais intéressé à trouver des moyens dans R pour mettre à jour efficacement un modèle linéaire lorsqu'une observation ou un prédicteur est ajouté. biglm a une capacité de mise à jour lors de l'ajout d'observations, mais mes données sont suffisamment petites pour résider en mémoire (même si j'ai un grand nombre d'instances à mettre à jour). Il existe des moyens de le faire à mains nues, par exemple, pour mettre à jour la factorisation QR (voir "Mise à jour de la factorisation QR et du problème des moindres carrés", par Hammarling et Lucas), mais j'espère une implémentation existante.

gappy
la source

Réponses:

6

Si l'algorithme que vous recherchez est en effet quelque chose comme Applied Statistics 274 , 1992, Vol 41 (2), vous pouvez simplement utiliser biglm car il ne vous oblige pas à conserver vos données dans un fichier.

Dirk Eddelbuettel
la source
Merci, mais biglm peut-il mettre à jour les prédicteurs de nombre? Je pensais que cela ne mettait à jour que les observations.
gappy
Existe-t-il une solution sous forme fermée pour ajouter des prédicteurs? Vous avez besoin de l'équivalent pour inv (X'X), cela existe-t-il pour ajouter une colonne? Dans tous les cas, vos problèmes ne sont-ils pas «petits» comme, disons, quelques (dix) milliers par quelques centaines? Est-ce que c'est vraiment important?
Dirk Eddelbuettel
2
Il existe de simples formulaires fermés pour mettre à jour un SVD, et des formules plus impliquées pour QR. Les économies de calcul peuvent être importantes lors de la résolution de milliers de modèles. Ils peuvent être implémentés en R, mais cela demande un peu de travail. C'est un beau projet.
gappy
2
Eh bien, je comprends qu'il y a une équipe informatique compétente dans votre magasin. Je suis sûr qu'ils peuvent mettre en œuvre quelque chose de tranchant pour vous.
Dirk Eddelbuettel
4

Il y a rang une fonction de mise à jour de QR Matlab ici que vous permet d' économiser un facteurp dans la complexité de la mise à jour des coefficients d'une régression linéaire p-variée.

Malgré la recherche de jours il y a quelques mois, je n'ai pas pu trouver d'équivalent dans R (attention, il y a beaucoup de fonctions de mise à jour qr dans cran mais quand vous regardez sous le capot, elles sont juste fausses - elles appellent lm.updatetous les mêmes).

Mise à jour : essayez dans la source du paquet «sauts». Dans la source R, vous trouverez une fonction 'leaps.forward', qui appelle une routine FORTRAN 'forwrd', située dans le / src du paquet qui semble implémenter la mise à jour QR de rang 1.

user603
la source
3

Pourquoi n'essayez-vous pas la capacité de mise à jour de l'objet de modèle linéaire

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

Jetez un œil à ces liens

  • Pour une explication générale de la fonction de mise à jour:

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

  • Pour une explication particulière sur update.lm:

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

deps_stats
la source
3
Il y a deux choses qui ne fonctionnent pas avec update (NB: update.lm est déconseillé). Tout d'abord, il utilise des formules. Cela en soi rend l'exécution 400% plus lente que lm.fit () Deuxièmement, il réestime l'ensemble du modèle. Il n'y a aucun gain d'efficacité ici.
gappy
Merci pour le fait, j'utilise la mise à jour pour les modèles de taille moyenne. Ce n'est probablement pas utile dans votre cas.
deps_stats
1

Je cherche également depuis longtemps un équivalent à la mise à jour matlab qr, les sauts semblent être une bonne façon!

Dans R, vous pouvez regarder la fonction recresid () dans le package strucchange, qui donnera des résidus récursifs lorsque vous ajoutez une observation (pas variable!). Je suppose que cela nécessitera peu de modifications pour obtenir des bêtas récursifs (le bétar dans le code?).

Matifou
la source