Bootstrap, Monte Carlo

12

Saya telah menetapkan pertanyaan berikut sebagai bagian dari pekerjaan rumah:

Rancang dan laksanakan studi simulasi untuk menguji kinerja bootstrap untuk memperoleh interval kepercayaan 95% pada rata-rata sampel data yang univariat. Implementasi Anda bisa dalam R atau SAS.

Aspek kinerja yang mungkin ingin Anda lihat adalah cakupan interval kepercayaan (yaitu, berapa kali proporsi interval kepercayaan mengandung mean sebenarnya) dan variasi Monte Carlo (yaitu, seberapa besar batas kepercayaan atas dan bawah bervariasi di antara simulasi) '

Adakah yang tahu bagaimana cara variasi aspek Monte Carlo ini? Saya bahkan tidak dapat menemukan algoritma atau apa pun. Apakah ini berkaitan dengan integrasi Monte Carlo? Terima kasih!

Sarah
sumber

Jawaban:

18

Kebingungan antara prosedur bootstrap dan prosedur Monte Carlo ini terus berulang, jadi mungkin ini adalah tempat yang baik untuk mengatasinya. (Contoh Rkode juga dapat membantu pekerjaan rumah.)

Pertimbangkan penerapan bootstrap ini di R:

boot <- function(x, t) { # Exact bootstrap of procedure t on data x
    n <- length(x)       # Must lie between 2 and 7 inclusive.
    if (n > 7) {
        stop("Sample size exceeds 7; use an approximate method instead.")
    }
    p <- c(n, 1:(n-1))
    a <- rep(x, n^(n-1))
    dim(a) <- rep(n, n)
    y <- as.vector(a)
    while (n > 1) {
        n <- n-1
        a <- aperm(a, p)
        y <- cbind(as.vector(a), y)
    }
    apply(y, 1, t)
}

Pandangan cepat akan mengkonfirmasi bahwa ini adalah perhitungan deterministik : tidak ada nilai acak yang dihasilkan atau digunakan. (Saya akan meninggalkan rincian pekerjaan dalamnya untuk pembaca yang tertarik untuk mencari tahu sendiri.)

Argumen untuk bootadalah kumpulan data numerik dalam array xdan referensi tke fungsi (yang dapat diterapkan ke array persis seperti x) untuk mengembalikan nilai numerik tunggal; dengan kata lain, tadalah statistik . Ini menghasilkan semua sampel yang mungkin dengan penggantian dari xdan berlaku tuntuk masing-masing, sehingga menghasilkan satu nomor untuk masing-masing sampel: itulah bootstrap singkatnya. Nilai kembali adalah array yang mewakili distribusi bootstrap tepat dari tuntuk sampel x.

Sebagai contoh kecil , mari kita bootstrap mean untuk sampel x= c(1,3):

> boot(c(1,3), mean)
> [1] 1 2 2 3

Memang ada empat kemungkinan sampel ukuran dengan penggantian dari ; yaitu, , , , dan . menghasilkan semuanya (dalam urutan yang baru saja tercantum) dan berlaku untuk masing-masing. Dalam hal ini menghitung rata-rata dan yang berubah menjadi , , , dan , masing-masing, seperti yang ditunjukkan dalam output.( 1 , 3 ) ( 1 , 1 ) ( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 32(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223

Ke mana Anda pergi dari sini tergantung pada bagaimana Anda ingin menggunakan bootstrap. The penuh informasi tentang bootstrap yang terkandung dalam array output ini, sehingga biasanya ide yang baik untuk menampilkannya. Berikut adalah contoh di mana deviasi standar di-bootstrap dari sampel :(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

Histogram SD

Sekarang kita siap untuk berbicara tentang simulasi Monte Carlo. Misalkan, katakanlah, kami akan melakukan bootstrap batas kepercayaan 95% atas pada SD dari sampel dengan menggunakan persentil ke-95 atas dari distribusi bootstrapnya. Properti apa yang akan dimiliki prosedur ini? Salah satu cara untuk mengetahuinya adalah dengan menganggap sampel diperoleh secara acak dari, katakanlah, distribusi yang seragam. (Aplikasi akan sering menunjukkan apa asumsi distribusi yang masuk akal mungkin; di sini, saya sewenang-wenang memilih satu yang sederhana untuk perhitungan tetapi tidak mudah untuk berurusan dengan analitis.) Kita dapat mensimulasikan apa yang terjadi dengan mengambil sampel seperti itu dan menghitung UCL:5

> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
     95% 
3.835870 

Hasil untuk sampel acak khusus ini adalah 3,83587. Ini adalah yang pasti: yang Anda menelepon bootlagi dengan yang sama set data, jawabannya akan persis sama. Tetapi bagaimana mungkin jawabannya berubah dengan sampel acak yang berbeda? Cari tahu dengan mengulangi proses ini beberapa kali dan menggambar histogram hasil:

> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

Simulasi histogram

Jika kita melakukan serangkaian simulasi lain, undian acak akan keluar berbeda, membuat histogram (sedikit) berbeda - tetapi tidak jauh berbeda dari yang ini. Kita dapat menggunakannya dengan percaya diri untuk memahami bagaimana bootstrap UCL dari SD bekerja. Untuk referensi, perhatikan bahwa standar deviasi dari distribusi seragam (rentang rentang dari hingga seperti yang ditentukan di sini) sama dengan . Karena orang akan berharap untuk setiap UCL bernilai garam, mayoritas (tiga perempat, atau 0,75) dari nilai-nilai dalam histogram melebihi ini:10 10 / 01010/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

Tapi itu tidak mendekati nominal 95% yang kami tentukan (dan kami harapkan)! Ini adalah salah satu nilai simulasi: ini membandingkan harapan kami dengan apa yang sebenarnya terjadi. (Mengapa perbedaan? Saya percaya itu karena bootstrap SD tidak berfungsi dengan baik dengan sampel yang sangat kecil.)

Ulasan

  • Statistik bootstrap secara konseptual sama dengan statistik lainnya seperti mean atau standar deviasi; mereka cenderung membutuhkan waktu lama untuk menghitung. (Lihat pesan peringatan dalam bootkode!)

  • Simulasi Monte-Carlo dapat berguna untuk mempelajari bagaimana statistik bootstrap bervariasi karena keacakan dalam memperoleh sampel. Variasi yang diamati dalam simulasi tersebut adalah karena variasi dalam sampel, bukan variasi dalam bootstrap.

  • (Tidak diilustrasikan di sini) Karena statistik bootstrap dapat mengambil banyak perhitungan (tampaknya, hingga perhitungan untuk sampel ukuran ), mudah untuk memperkirakan distribusi bootstrap. Ini biasanya dilakukan dengan membuat program "kotak hitam" untuk mendapatkan satu nilai secara acak dari distribusi bootstrap yang sebenarnya dan memanggil program itu berulang kali. Output kolektif mendekati distribusi yang tepat. Perkiraan dapat bervariasi karena keacakan dalam kotak hitam - tetapi variasi itu merupakan artefak dari prosedur pendekatan. Ini tidak (secara konseptual) melekat dalam prosedur bootstrap itu sendiri. nnnn

whuber
sumber
+1 Ini sangat bagus. Saya tidak berpikir saya bisa melakukannya dengan lebih baik! Saya hanya ingin menambahkan bahwa saya memiliki beberapa makalah tentang kinerja bootstrap dalam estimasi tingkat kesalahan dan untuk interval kepercayaan saat memperkirakan varian. Hasil ini dapat ditemukan di edisi kedua buku metode bootstrap saya dan buku saya tentang bootstrap dengan aplikasi ke R.
Michael R. Chernick
Tautan Amazon ke buku-buku ada di sini: amazon.com/… amazon.com/Pengantar-Bootstrap-Methods-Aplikasi/dp/…
Michael R. Chernick
Saya hanya akan mengatakan bahwa idenya adalah untuk mensimulasikan data dari distribusi yang diketahui menerapkan prosedur bootstrap yang menarik (misalnya interval kepercayaan untuk parameter atau perkiraan tingkat kesalahan pengklasifikasi) dan Anda dapat mengevaluasi seberapa baik itu karena Anda tahu kebenarannya.
Michael R. Chernick
5

Bootstrap adalah teknik Monte Carlo, karena melibatkan beberapa jenis pengambilan sampel acak. Jika Anda menjalankan bootstrap dua kali pada set data yang sama, Anda akan mendapatkan jawaban berbeda. Semakin banyak sampel yang Anda gunakan dalam bootstrap Anda, semakin sedikit variasi yang akan Anda dapatkan.

Cakupan mengacu pada variasi hasil pada set data yang berbeda dari distribusi sampling hipotetis yang sama.

Simon Byrne
sumber
terima kasih, saya akan menganggap itu hanya berarti untuk datang dengan kode untuk melihat apakah batas kepercayaan bervariasi antara simulasi itu!
Sarah
7
Tepatnya (pedantic?), Kita harus mengklarifikasi bahwa bootstrap bukanlah teknik Monte Carlo semata. Namun, biasanya diperkirakan dengan menggunakan simulasi Monte Carlo karena tidak sering dapat ditagih untuk menghitung jumlah bunga tertentu. Saya menemukan kata-kata dari masalah yang sangat rentan terhadap salah tafsir juga! Seseorang harus berhati-hati untuk membedakan kesalahan pengambilan sampel dari kesalahan perkiraan Monte Carlo . Yang terakhir hanya diperkirakan secara masuk akal dengan mengulangi perkiraan bootstrap MC berkali-kali pada sampel yang sama , seperti yang Anda tunjukkan. :)
kardinal
1

Saya juga tidak yakin apa yang dimaksud dengan " variasi Monte Carlo ". Tentu harus mungkin untuk melihat berapa banyak variasi yang ada di antara iterasi dalam hal-hal seperti nilai batas atas (atau lebih rendah), misalnya (petunjuk). Mungkin mereka hanya ingin Anda melakukan ini untuk Monte Carlo, dan bukan bootstrap? Itu bukan persyaratan yang harus saya miliki untuk latihan. Mungkin yang terbaik adalah hanya bertanya apa yang dimaksud dengan kalimat itu.

gung - Pasang kembali Monica
sumber
Terima kasih atas bantuan Anda! Mungkin saya hanya akan melihat variasi antara batas atas dan bawah untuk saat ini dan bertanya tentang Monte Carlo nanti. Sekarang hanya untuk mengetahui bagaimana saya melakukannya ..
Sarah
Ada beberapa kemungkinan di sini. Satu adalah atas-bawah (yaitu, perbedaan). Interpretasi saya dari frasa dalam pertanyaan adalah variasi di atas, & variasi di bawah (yaitu, 2 variasi berbeda), tapi saya kira saya tidak bisa memastikan. Pada catatan yang berbeda, apakah bagian dari pertanyaan Anda bagaimana melakukan simulasi MC di R?
gung - Reinstate Monica
Saya sampai pada kesimpulan bahwa mereka juga mencari 2 variasi yang berbeda, jadi saya pikir saya akan mencobanya!
Sarah
1
Cukup adil, yang saya ingin tahu sekarang adalah, apakah Anda baik untuk pergi pada titik ini, atau apakah Anda memerlukan petunjuk tambahan tentang bagaimana mendekati apa yang kita duga pertanyaan yang diajukan pertanyaan itu?
gung - Reinstate Monica
1
Jadi, pada setiap iterasi, apakah Anda menyimpan batas atas & bawah (petunjuk)?
gung - Reinstate Monica
1

Pemahaman saya tentang tugas pekerjaan rumah ini adalah meminta Anda untuk melakukan simulasi Monte Carlo untuk teknik statistik tertentu. Artinya, Anda mensimulasikan sekelompok kumpulan data acak, menerapkan teknik ini ke kumpulan data ini, dan menyimpan angka untuk diringkas nanti dengan cara yang mudah (berarti, probabilitas disimulasikan, dll.)

Sekarang, teknik yang dimaksud adalah bootstrap, yang melibatkan simulasi Monte Carlo di dalamnya (kecuali, seperti yang ditunjukkan Whuber, Anda diminta untuk melakukan bootstrap yang tepat, yang sangat tidak mungkin). Jadi sebagai hasil dari simulasi Anda, Anda mungkin menyimpan mean sampel, standar deviasi sampel, dan batas interval kepercayaan untuk rata-rata yang diperoleh oleh bootstrap.

n=10

Tugas
sumber
3
Satu hal yang saya pelajari dari bekerja dengan bootstrap yang tepat adalah bahwa teori normal-standar CI akan sering bekerja lebih baik dengan sampel kecil bahkan ketika mereka miring. Bootstrap datang sendiri dengan sampel besar: teorinya adalah asimptotik, bukan yang tepat.
whuber
2
@whuber, itu pengamatan yang menarik. Saya biasanya menekankan sifat asimptotik dari bootstrap (lihat buku The Bootstrap dan Edgeworth Ekspansi Peter Hall untuk memahami mengapa), tetapi gagal melakukannya kali ini.
Tugas