Wydajna aktualizacja regresji liniowej podczas dodawania obserwacji i / lub predyktorów w R

15

Byłbym zainteresowany znalezieniem sposobów na R efektywnego aktualizowania modelu liniowego po dodaniu obserwacji lub predyktora. biglm ma możliwość aktualizacji podczas dodawania obserwacji, ale moje dane są na tyle małe, że mieszczą się w pamięci (chociaż mam wiele instancji do aktualizacji). Istnieją sposoby, aby to zrobić gołymi rękami, np. W celu zaktualizowania faktoryzacji QR (patrz „Aktualizowanie faktoryzacji QR i problemu najmniejszych kwadratów”, autorstwa Hammarling i Lucas), ale mam nadzieję na istniejące wdrożenie.

niezadowolony
źródło

Odpowiedzi:

6

Jeśli poszukiwany algorytm jest rzeczywiście podobny do Applied Statistics 274 , 1992, Vol 41 (2), możesz po prostu użyć biglm, ponieważ nie wymaga on przechowywania danych w pliku.

Dirk Eddelbuettel
źródło
Dzięki, ale czy Biglm może aktualizować predyktory liczb? Myślałem, że to tylko zaktualizowane obserwacje.
gappy
Czy istnieje zamknięte rozwiązanie do dodawania predyktorów? Potrzebujesz ekwiwalentu dla inv (X'X), czy istnieje on dla dodania kolumny? W każdym razie, czy twoje problemy nie są „małe” jak, powiedzmy, kilka (dziesięć) tysięcy na kilkaset? Czy to naprawdę ma znaczenie?
Dirk Eddelbuettel
2
Istnieje prosta zamknięta forma do aktualizacji SVD i bardziej zaangażowane formuły dla QR. Oszczędności obliczeniowe mogą być znaczące przy rozwiązywaniu tysięcy modeli. Można je zaimplementować w języku R, ale wymaga to trochę pracy. To fajny projekt.
gappy
2
Rozumiem, że w twoim sklepie jest zdolny zespół IT. Jestem pewien, że mogą wprowadzić dla ciebie coś trenującego.
Dirk Eddelbuettel
4

W Matlabie jest jedna funkcja aktualizacji QR , która pozwala zaoszczędzić czynnik w złożoności aktualizacji współczynników regresji liniowej p-variate.p

Mimo, że kilka dni temu szukałem kilka dni temu, nie byłem w stanie znaleźć odpowiednika w R (uwaga, że ​​w Cran jest wiele funkcji aktualizacji qr. lm.updatewszystkie takie same).

Aktualizacja : spróbuj w źródle pakietu „przeskoczyć”. W źródle R znajdziesz funkcję „leaps.forward”, która wywołuje procedurę FORTRAN „forwrd”, zlokalizowaną w / src pakietu, który wydaje się implementować aktualizację QR rangi 1.

użytkownik603
źródło
3

Dlaczego nie wypróbujesz możliwości aktualizacji obiektu modelu liniowego

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

Spójrz na te linki

  • Aby uzyskać ogólne wyjaśnienie funkcji aktualizacji:

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

  • Aby uzyskać szczegółowe wyjaśnienie dotyczące pliku update.lm:

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

deps_stats
źródło
3
Są dwie rzeczy, które nie działają z aktualizacją (Uwaga: aktualizacja.lm jest przestarzała). Po pierwsze, wykorzystuje formuły. To samo w sobie sprawia, że ​​wykonanie jest o 400% wolniejsze niż lm.fit () Po drugie, ponownie szacuje cały model. Tutaj nie ma przyrostu wydajności.
gappy
Dzięki za fakt, że korzystałem z aktualizacji dla średnich modeli. Prawdopodobnie nie jest to przydatne w twoim przypadku.
deps_stats
1

Od dawna szukałem również odpowiednika aktualizacji Matlab qr, skoki wydają się być dobrym sposobem!

W R możesz spojrzeć na funkcję recresid () w pakiecie strucchange, która da rekurencyjne reszty po dodaniu obserwacji (nie zmiennej!). Domyślam się, że będzie to wymagało niewielkiej modyfikacji, aby uzyskać rekurencyjne bety (betar w kodzie?).

Matifou
źródło