Bootstrap residual: Apakah saya melakukannya dengan benar?

10

Pertama-tama: Dari apa yang saya mengerti, residu bootstrap bekerja sebagai berikut:

  1. Sesuaikan model dengan data
  2. Hitung residu
  3. Resample residu dan tambahkan ke 1.
  4. Sesuaikan model dengan dataset baru dari 3.
  5. Ulangi nkali, tetapi selalu tambahkan residu resampled ke fit dari 1.

Apakah itu benar sejauh ini?


Yang ingin saya lakukan adalah sesuatu yang sedikit berbeda:

Saya ingin memperkirakan parameter dan prediksi ketidakpastian untuk suatu algoritma yang memperkirakan beberapa variabel lingkungan.

Apa yang saya miliki adalah deret waktu bebas kesalahan (dari simulasi) variabel itu, x_trueyang saya tambahkan noise, x_noiseuntuk menghasilkan dataset sintetik x. Saya kemudian mencoba mencari parameter optimal dengan menyesuaikan algoritma saya dengan jumlah kuadrat sum((x_estimate - x_true)^2)(! Tidak x_estimate - x!) Sebagai fungsi objektif. Untuk melihat bagaimana algoritme saya bekerja dan membuat sampel distribusi parameter saya, saya ingin menguji ulang x_noise, menambahkannya x_true, menyesuaikan model saya lagi, bilas dan ulangi. Apakah itu pendekatan yang valid untuk menilai ketidakpastian parameter? Bisakah saya mengartikan cocok ke set data bootstrap sebagai ketidakpastian prediksi, atau apakah saya harus mengikuti prosedur yang saya posting di atas?

/ edit: Saya pikir saya belum benar-benar menjelaskan apa yang dilakukan model saya. Anggap saja sesuatu seperti metode de-noising. Ini bukan model prediktif, ini adalah algoritma yang mencoba untuk mengekstrak sinyal yang mendasari serangkaian waktu data lingkungan yang berisik.

/ edit ^ 2: Untuk Pengguna MATLAB di luar sana, saya menuliskan beberapa contoh regresi linier cepat & kotor tentang apa yang saya maksud.

Inilah yang saya yakini sebagai bootstrap residu "biasa" (mohon perbaiki jika saya salah): http://pastebin.com/C0CJp3d1

Inilah yang ingin saya lakukan: http://pastebin.com/mbapsz4c

Fred S
sumber
Akan lebih jelas jika Anda menunjukkan kode yang telah Anda lakukan sejauh ini.
Metrik
Saya sebenarnya belum mengkodekan apa pun dalam hal bootstrap. Kode untuk model saya cukup kompleks, saya tidak berterima kasih akan membantu. Sebagai contoh, kita dapat mengasumsikan bahwa model adalah prosedur penghalusan seperti rata-rata bergerak, dengan jendela bergerak sebagai satu-satunya parameter model. Saya memiliki serangkaian pengukuran (sintetis) dari waktu ke waktu dan menambahkan kesalahan (tidak harus homoskedastik dan didistribusikan secara normal) untuk itu. Saya kemudian ingin memperkirakan jendela bergerak yang paling dekat dengan "benar" yang mendasarinya Saya tahu dan ingin menilai ketidakpastian dengan bootstrap kesalahan sintetik saya. Apakah itu membantu?
Fred S
Berikut ini beberapa kode pseudo gaya MATLAB yang sangat buruk, mungkin membantu memahami apa yang ingin saya lakukan: pastebin.com/yTRahzr5
Fred S
Maaf Fred, saya tidak tahu Matlab. Harap beri tag sebagai Matlab untuk mendapatkan input dari pengguna.
Metrik
2
Oh pertanyaan saya benar-benar tidak terbatas pada MATLAB (dan itu tidak benar-benar kode MATLAB, itu hanya beberapa pseudo-code berdasarkan sintaksis MATLAB untuk for-loop dan komentar yang tidak akan berhasil lagi). Tapi saya bisa memberi tag untuk berjaga-jaga.
Fred S

Jawaban:

8

Berikut adalah algoritma umum (semi-parametrik-bootstrap) lebih terinci:

B = jumlah bootstraps

model:
y=xβ+ϵ

biarkan menjadi residuϵ^

  1. Jalankan regresi dan dapatkan estimator dan residual . εβ^ϵ^
  2. Ubah sampel residu dengan penggantian dan dapatkan vektor residual yang bootstrap .ϵ^B
  3. Dapatkan variabel dependen bootstrap dengan mengalikan penduga dari (1) dengan regressor asli dan menambahkan residu bootstrap: .yB=xβ^+ϵ^B
  4. Jalankan regresi dengan variabel dependen bootstrap dan regressor asli, ini memberikan estimator bootstrap, yaitu regresi pada , ini memberikan . x β ByBxβ^B
  5. Ulangi prosedur -kali dengan kembali ke (2).B
Sweetbabyjesus
sumber
1

Saya tidak yakin pemahaman saya benar. Tapi di sini adalah saran saya untuk memodifikasi kode Anda ("bootstrap residual", baris 28-34) menjadi:

for i = 2:n_boot  
x_res_boot = x_residuals( randi(n_data,n_data,1) );  
x_boot = x_res_boot+ x_best_fit;  
p_est(:, i) = polyfit( t, x_boot, 1 );  
x_best_fit2 = polyval( p_est(:, i), t );  
x_residuals = x_best_fit2 - x_boot;
x_best_fit=x_best_fit2;
end  

Idenya adalah bahwa setiap kali Anda menggunakan residu bukan dari jalankan pertama, tetapi dari fit bootstrap sebelumnya. Bagi saya, semua yang lain tampaknya valid.

Ini adalah versi revisi yang telah diperiksa di MATLAB. Dua kesalahan telah diperbaiki.

O_Devinyak
sumber
Oh, itu baru bagiku. bsxfun agak rumit; di sini adalah versi baru yang menggunakan ide Anda dan harus sedikit lebih jelas. Namun, itu menghasilkan hasil yang agak aneh. Ini adalah hasil dari selalu resampling residu yang paling cocok pertama dan menambahkannya ke yang sama (ide awal saya), dan ini adalah apa yang terjadi jika saya sampel residu dari setiap iterasi dan menambahkannya ke setiap pas baru. Ada ide?
Fred S
Ups, kesalahan kecil pada baris 25 (harus p_est (:, i), bukan p_est (:, 1)), tetapi bahkan ketika saya memperbaikinya distribusi parameter masih terlihat miring: klik
Fred S
1
Jawabannya sudah diperbaiki dan diperiksa di MATLAB. Sekarang berjalan dengan baik.
O_Devinyak
1
Sisa baru untuk setiap kecocokan - itu adalah pemahaman pertama saya tentang sisa bootstrap. Tetapi saya harus mengakui bahwa sumber yang berbeda menggunakan residu yang sesuai dengan data asli untuk tujuan itu. Ini tutorial yang bagus tentang bootstrap ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Tampaknya pendekatan saya salah sementara implementasi Anda benar. Haruskah saya menghapus jawaban yang diberikan?
O_Devinyak
1
Terima kasih atas tindak lanjutnya. IMHO, tinggalkan jawaban untuk pengguna lain dengan pertanyaan yang sama. Saya menemukan bahwa literatur (setidaknya yang tersedia bagi saya) tidak selalu jelas tentang subjek itu dan bisa sangat membingungkan.
Fred S
1

Untuk melihat bagaimana suatu algoritma bekerja dalam hal akurasi prediksi / kesalahan kuadrat rata-rata, Anda mungkin memerlukan bootstrap "optimisme" Efron-Gong. Ini diimplementasikan agar mudah digunakan dalam rmspaket R. Lihat fungsinya ols, validate.ols, calibrate.

Frank Harrell
sumber