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.