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.

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.


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.


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.