Aggiornamento efficiente della regressione lineare quando si aggiungono osservazioni e / o predittori in R


15

Sarei interessato a trovare modi in R per aggiornare in modo efficiente un modello lineare quando viene aggiunta un'osservazione o un predittore. biglm ha una capacità di aggiornamento durante l'aggiunta di osservazioni, ma i miei dati sono abbastanza piccoli da risiedere in memoria (anche se ho un gran numero di istanze da aggiornare). Ci sono modi per farlo a mani nude, ad esempio per aggiornare la fattorizzazione QR (vedi "Aggiornamento della fattorizzazione QR e il problema dei minimi quadrati", di Hammarling e Lucas), ma spero in un'implementazione esistente.

Risposte:


6

Se l'algoritmo che stai cercando è effettivamente qualcosa di simile a Applied Statistics 274 , 1992, Vol 41 (2), allora potresti semplicemente usare biglm in quanto non richiede di conservare i tuoi dati in un file.


Grazie, ma biglm può essere aggiornato nei predittori di numeri? Ho pensato che aggiornasse solo le osservazioni.
gappy,

Esiste una soluzione a modulo chiuso per l'aggiunta di predittori? È necessario l'equivalente per inv (X'X), esiste per l'aggiunta di una colonna? In ogni caso, i tuoi problemi non sono "piccoli" come, diciamo, poche (dieci) migliaia per poche centinaia? Importa davvero?
Dirk Eddelbuettel,

2
Ci sono semplici moduli chiusi per aggiornare un SVD e formule più coinvolte per QR. I risparmi computazionali possono essere significativi quando si risolvono migliaia di modelli. Possono essere implementati in R, ma richiede un po 'di lavoro. È un bel progetto.
gappy,

2
Bene, capisco che c'è un team IT competente nel tuo negozio. Sono sicuro che possono implementare qualcosa di speciale per te.
Dirk Eddelbuettel,

4

p

Nonostante abbia cercato giorni un paio di mesi fa, non sono stato in grado di trovare un equivalente in R (attenzione, ci sono molte funzioni di qr.update in cran, ma quando guardi sotto il cofano sono solo false - chiamano lm.updatetutti uguali).

Aggiornamento : prova nell'origine del pacchetto "salti". In R-source, troverai una funzione 'leaps.forward', che chiama una routine FORTRAN 'forwrd', che si trova nel / src del pacchetto che sembra implementare l'aggiornamento QR di grado 1.


3

Perché non provi la capacità di aggiornamento dell'oggetto modello lineare

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

Dai un'occhiata a questo link

  • Per una spiegazione generale della funzione di aggiornamento:

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

  • Per una spiegazione particolare su update.lm:

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


3
Esistono due cose che non funzionano con update (NB: update.lm è obsoleto). Innanzitutto, utilizza le formule. Questo di per sé rende l'esecuzione del 400% più lenta di lm.fit () In secondo luogo, rivaluta l'intero modello. Non ci sono incrementi di efficienza qui.
gappy,

Grazie per il fatto, sto usando l'aggiornamento per modelli di medie dimensioni. Probabilmente non è utile nel tuo caso.
deps_stats,

1

Ho anche cercato da molto tempo un equivalente dell'aggiornamento qr di Matlab, i salti sembrano un bel modo!

In R, potresti guardare la funzione recresid () nel pacchetto strucchange, che darà residui ricorsivi quando aggiungi un'osservazione (non variabile!). La mia ipotesi è che ciò richiederà una piccola modifica per ottenere beta ricorsivi (il betar nel codice?).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.