Effizientes Aktualisieren der linearen Regression beim Hinzufügen von Beobachtungen und / oder Prädiktoren in R

15

Ich würde gerne Wege in R finden, um ein lineares Modell effizient zu aktualisieren, wenn eine Beobachtung oder ein Prädiktor hinzugefügt wird. biglm kann beim Hinzufügen von Beobachtungen aktualisiert werden, aber meine Daten sind klein genug, um sich im Speicher zu befinden (obwohl ich eine große Anzahl von zu aktualisierenden Instanzen habe). Es gibt Möglichkeiten, dies mit bloßen Händen zu tun, z. B. um die QR-Faktorisierung zu aktualisieren (siehe "Aktualisieren der QR-Faktorisierung und des Problems der kleinsten Quadrate" von Hammarling und Lucas), aber ich hoffe auf eine vorhandene Implementierung.

gappy
quelle

Antworten:

6

Wenn der Algorithmus, den Sie suchen, in der Tat Applied Statistics 274 , 1992, Vol 41 (2) ist, können Sie einfach biglm verwenden, da Sie Ihre Daten nicht in einer Datei aufbewahren müssen.

Dirk Eddelbüttel
quelle
Danke, aber kann biglm die Anzahl der Prädiktoren aktualisieren? Ich dachte, dass es nur Beobachtungen aktualisiert.
gappy
Gibt es eine geschlossene Lösung für das Hinzufügen von Prädiktoren? Sie benötigen das Äquivalent für inv (X'X). Existiert das für das Hinzufügen einer Spalte? In jedem Fall, sind Ihre Probleme nicht "klein", wie zum Beispiel ein paar (zehntausend) mal ein paar hundert? Ist es wirklich wichtig?
Dirk Eddelbuettel
2
Es gibt einfache geschlossene Formulare zum Aktualisieren einer SVD und komplexere Formeln für QR. Die Recheneinsparungen können beim Lösen von Tausenden von Modellen erheblich sein. Sie können in R implementiert werden, erfordern jedoch ein wenig Arbeit. Es ist ein schönes Projekt.
gappy
2
Ich verstehe, dass es in Ihrem Geschäft ein kompetentes IT-Team gibt. Ich bin mir sicher, dass sie etwas Grobes für Sie umsetzen können.
Dirk Eddelbuettel
4

Es ist Rang einer QR - Update - Funktion in Matlab hier , dass Sie einen Faktor spart in der Komplexität die Koeffizienten einer p-variate linearen Regression zu aktualisieren.p

Obwohl ich vor ein paar Monaten tagelang gesucht habe, konnte ich in R kein Äquivalent finden (Vorsicht, es gibt viele qr.update-Funktionen in cran, aber wenn Sie unter die Haube schauen, sind sie nur Fälschungen - sie rufen an) lm.updatealles das selbe).

Update : versuchen Sie in der Quelle des Pakets "Sprünge". In der R-Quelle finden Sie eine Funktion 'leaps.forward', die eine FORTRAN-Routine 'forwrd' aufruft, die sich im / src des Pakets befindet und anscheinend ein QR-Update vom Rang 1 implementiert.

user603
quelle
3

Probieren Sie die Aktualisierungsfunktion des linearen Modellobjekts aus

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

Schauen Sie sich diese Links an

  • Für eine allgemeine Erklärung der Update-Funktion:

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

  • Für eine spezielle Erklärung zu update.lm:

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

deps_stats
quelle
3
Es gibt zwei Dinge, die mit update nicht funktionieren (NB: update.lm ist veraltet). Erstens werden Formeln verwendet. Dies macht die Ausführung um 400% langsamer als lm.fit (). Zweitens wird das gesamte Modell neu geschätzt . Hier gibt es keine Effizienzgewinne.
gappy
Vielen Dank für die Tatsache, dass ich ein Update für mittelgroße Modelle verwendet habe. Es ist in Ihrem Fall wahrscheinlich nicht nützlich.
deps_stats
1

Ich habe auch seit langem nach einem Äquivalent zum matlab qr-Update gesucht, Sprünge scheinen ein schöner Weg zu sein!

In R können Sie sich die Funktion recresid () in package strucchange ansehen, die beim Hinzufügen einer Beobachtung rekursive Residuen liefert (nicht variabel!). Ich vermute, dass dies nur geringfügig geändert werden muss, um rekursive Betas zu erhalten (der Betar im Code?).

Matifou
quelle