Memperbarui regresi linier secara efisien ketika menambahkan pengamatan dan / atau prediktor di R

15

Saya akan tertarik untuk menemukan cara dalam R untuk memperbarui model linier secara efisien ketika pengamatan atau prediktor ditambahkan. biglm memiliki kemampuan memperbarui ketika menambahkan pengamatan, tetapi data saya cukup kecil untuk berada di memori (walaupun saya memiliki sejumlah besar contoh untuk memperbarui). Ada cara untuk melakukan ini dengan tangan kosong, misalnya, untuk memperbarui faktorisasi QR (lihat "Memperbarui Faktorisasi QR dan Masalah Kuadrat Terkecil", oleh Hammarling dan Lucas), tetapi saya berharap untuk implementasi yang ada.

gappy
sumber

Jawaban:

6

Jika algoritma yang Anda cari memang sesuatu seperti Applied Statistics 274 , 1992, Vol 41 (2) maka Anda bisa menggunakan biglm karena tidak mengharuskan Anda menyimpan data dalam file.

Dirk Eddelbuettel
sumber
Terima kasih, tetapi bisakah biglm memperbarui dalam angka prediktor? Saya pikir itu memperbarui pengamatan saja.
gappy
Apakah ada solusi bentuk tertutup untuk menambahkan prediktor? Anda memerlukan yang setara untuk inv (X'X), apakah itu ada untuk menambahkan kolom? Bagaimanapun, bukankah masalah Anda 'kecil' seperti dalam, katakanlah, beberapa (sepuluh) ribu oleh beberapa ratus? Apakah itu penting?
Dirk Eddelbuettel
2
Ada formulir tertutup sederhana untuk memperbarui SVD, dan formula yang lebih terlibat untuk QR. Penghematan komputasi dapat menjadi signifikan ketika memecahkan ribuan model. Mereka dapat diimplementasikan dalam R, tetapi membutuhkan sedikit pekerjaan. Ini proyek yang bagus.
gappy
2
Yah, saya mengerti bahwa ada tim TI yang mampu di toko Anda. Saya yakin mereka dapat menerapkan sesuatu yang tajam untuk Anda.
Dirk Eddelbuettel
4

hal

Meskipun mencari beberapa hari beberapa bulan yang lalu, saya belum dapat menemukan yang setara dalam R (berhati-hatilah ada banyak fungsi qr.update di cran tetapi ketika Anda melihat di bawah tenda mereka hanya palsu - yaitu yang mereka sebut lm.updatesemua sama).

Pembaruan : coba di sumber paket 'lompatan'. Dalam sumber-R, Anda akan menemukan fungsi 'lompatan.forward', yang memanggil rutin FORTRAN 'forwrd', terletak di / src dari paket yang tampaknya menerapkan pembaruan QR peringkat 1.

pengguna603
sumber
3

Mengapa Anda tidak mencoba kemampuan pembaruan objek model linier

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

Lihatlah tautan ini

  • Untuk penjelasan umum tentang fungsi pembaruan:

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

  • Untuk penjelasan khusus tentang update.lm:

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

deps_stats
sumber
3
Ada dua hal yang tidak berfungsi dengan pembaruan (NB: update.lm sudah usang). Pertama, menggunakan rumus. Ini dengan sendirinya membuat eksekusi 400% lebih lambat dari lm.fit () Kedua, ini menguji ulang seluruh model. Tidak ada keuntungan efisiensi di sini.
gappy
Terima kasih atas faktanya, saya telah menggunakan pembaruan untuk model berukuran sedang. Ini mungkin tidak berguna dalam kasus Anda.
deps_stats
1

Saya juga sudah mencari sejak lama untuk setara dengan pembaruan qr matlab, lompatan tampaknya cara yang bagus!

Di R, Anda bisa melihat fungsi recresid () dalam paket strucchange, yang akan memberikan residu rekursif ketika Anda menambahkan pengamatan (bukan variabel!). Dugaan saya adalah bahwa ini akan memerlukan sedikit modifikasi untuk mendapatkan betas rekursif (betar dalam kode?).

Matifou
sumber