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.