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.

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.


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.


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.