Mengapa interval bootstrap saya memiliki cakupan yang buruk?

29

Saya ingin melakukan demonstrasi kelas di mana saya membandingkan interval-t dengan interval bootstrap dan menghitung probabilitas cakupan keduanya. Saya ingin data berasal dari distribusi miring jadi saya memilih untuk menghasilkan data sebagai exp(rnorm(10, 0, 2)) + 1, sampel ukuran 10 dari lognormal bergeser. Saya menulis sebuah skrip untuk menggambar 1000 sampel dan, untuk setiap sampel, menghitung interval t 95% dan interval persentil bootstrap 95% berdasarkan 1000 ulangan.

Ketika saya menjalankan skrip, kedua metode memberikan interval yang sangat mirip dan keduanya memiliki probabilitas cakupan 50-60%. Saya terkejut karena saya pikir interval bootstrap akan lebih baik.

Pertanyaan saya adalah, sudahkah saya

  • melakukan kesalahan dalam kode?
  • melakukan kesalahan dalam menghitung interval?
  • melakukan kesalahan dengan mengharapkan interval bootstrap untuk memiliki properti cakupan yang lebih baik?

Juga, adakah cara untuk membangun CI yang lebih andal dalam situasi ini?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability
Flounderer
sumber
3
Orang sering lupa menggunakan bootstrap lain: untuk mengidentifikasi dan memperbaiki bias . Saya menduga bahwa jika Anda memasukkan koreksi bias dalam bootstrap Anda, Anda mungkin mendapatkan kinerja yang jauh lebih baik dari CI.
whuber
@whuber: poin bagus, +1. Sejauh yang saya ingat, Metode Bootstrap dan Aplikasi Mereka oleh Davison & Hinkley memberikan pengantar yang bagus dan mudah diakses untuk koreksi bias dan perbaikan lain pada bootstrap.
S. Kolassa - Kembalikan Monica
1
Ada baiknya mencoba varian bootstrap lainnya, terutama bootstrap dasar.
Frank Harrell
3
Bootstrap adalah prosedur sampel besar. tidak besar, terutama untuk data log-normal . n=10
Cliff AB

Jawaban:

16

Diagnosis dan pemulihan bootstrap oleh Canto, Davison, Hinkley & Ventura (2006) tampaknya menjadi titik tolak yang logis. Mereka membahas berbagai cara bootstrap dapat rusak dan - yang lebih penting di sini - menawarkan diagnosa dan kemungkinan perbaikan:

  1. Pencilan
  2. Model resampling salah
  3. Nonpivotality
  4. Ketidakkonsistenan metode bootstrap

Saya tidak melihat masalah dengan 1, 2 dan 4 dalam situasi ini. Mari kita lihat 3. Seperti yang dicatat oleh @Ben Ogorek (walaupun saya setuju dengan @Glen_b bahwa diskusi normalitas mungkin merupakan herring merah), validitas bootstrap tergantung pada pivotality statistik yang kami minati.

Bagian 4 dalam Canty et al. menyarankan resampling-dalam-sampel untuk mendapatkan ukuran bias dan varians untuk estimasi parameter dalam setiap bootstrap . Berikut adalah kode untuk mereplikasi formula dari hal. 15 artikel:

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

diagnostik bootstrap

Perhatikan skala log - tanpa log, ini bahkan lebih mencolok. Kami melihat dengan baik bagaimana varians estimasi rata-rata bootstrap naik dengan rata-rata sampel bootstrap. Bagi saya ini kelihatannya cukup sebagai senjata merokok untuk menyalahkan nonpivotality sebagai penyebab rendahnya interval kepercayaan.

Namun, saya akan dengan senang hati mengakui bahwa seseorang dapat menindaklanjuti dengan banyak cara. Sebagai contoh, kita dapat melihat bagaimana apakah interval kepercayaan dari replikasi bootstrap tertentu termasuk rata-rata sebenarnya tergantung pada rata-rata replikasi tertentu.

Adapun solusi, Canty et al. membahas transformasi, dan logaritma muncul di sini (misalnya, bootstrap dan membangun interval kepercayaan bukan untuk rata-rata, tetapi untuk rata-rata data yang dicatat), tetapi saya tidak bisa membuatnya bekerja.

Canty et al. lanjutkan untuk membahas bagaimana seseorang dapat mengurangi jumlah bootstrap dalam dan kebisingan yang tersisa dengan melakukan sampling penting dan memuluskan serta menambahkan pita kepercayaan diri ke plot pivot.

Ini mungkin proyek tesis yang menyenangkan untuk siswa yang cerdas. Saya menghargai setiap petunjuk tentang kesalahan saya, serta literatur lainnya. Dan saya akan dengan bebas menambahkan diagnostictag ke pertanyaan ini.

S. Kolassa - Reinstate Monica
sumber
13

μ^-μ
μ^t
mμ^-μσ^

Lalu saya berpikir sedikit tentang seluruh pengaturan. Dengan hanya 10 pengamatan dan distribusi yang sangat miring, bukankah pada dasarnya tidak mungkin untuk memperkirakan secara nonparametrik rata-rata apalagi membangun interval kepercayaan dengan cakupan yang tepat?

e2+1=8.39P(X2)=0,84XN(0,4)0,840,8410=0,178. Jadi dalam sedikit kurang dari 18% kasus, pengamatan terbesar lebih kecil dari rata-rata. Untuk mendapatkan cakupan yang lebih besar dari 0,82 kita perlu membangun interval kepercayaan untuk rata-rata yang melampaui pengamatan terbesar. Saya mengalami kesulitan membayangkan bagaimana konstruksi seperti itu dapat dibuat (dan dibenarkan) tanpa asumsi sebelumnya bahwa distribusinya sangat miring. Tapi saya menerima saran.

NRH
sumber
Saya setuju dengan kamu. Saya benar-benar ingin memikirkannya dari sudut pandang seseorang yang telah mendapatkan satu sampel dari distribusi ini. Bagaimana saya tahu bahwa tidak aman untuk menggunakan bootstrap dalam kasus ini? Satu-satunya pemikiran yang dapat saya pikirkan adalah bahwa saya mungkin telah mengambil log sebelum melakukan analisis, tetapi salah satu dari penjawab lain mengatakan bahwa ini tidak terlalu membantu.
Flounderer
1
Anda tidak akan tahu apakah itu aman atau tidak aman dari 10 titik data saja. Jika Anda mencurigai kemiringan atau ekor yang berat, solusinya mungkin fokus pada parameter yang berbeda dari rata-rata. Misalnya log-mean atau median. Ini tidak akan memberi Anda perkiraan (atau interval kepercayaan untuk) mean kecuali jika Anda membuat asumsi tambahan, tetapi mungkin ide yang lebih baik sama sekali untuk fokus pada parameter yang kurang sensitif terhadap ekor distribusi.
NRH
6

Perhitungannya benar, saya mengecek ulang dengan paket boot yang terkenal . Selain itu saya menambahkan BCa-interval (oleh Efron), versi bias-diperbaiki dari interval bootstrap persentil:

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

Saya menganggap intervalnya akan jauh lebih baik jika ukuran sampel asli lebih besar dari 10, katakanlah 20 atau 50.

Selain itu metode bootstrap-t biasanya mengarah ke hasil yang lebih baik untuk statistik miring. Namun itu membutuhkan loop bersarang dan karenanya 20+ kali lebih banyak waktu komputasi.

Untuk pengujian hipotesis juga sangat penting bahwa cakupan 1-sisi baik. Jadi hanya melihat cakupan 2 sisi seringkali bisa menyesatkan.

lambruscoAcido
sumber
1
n<100
5

Saya juga bingung tentang hal ini, dan saya menghabiskan banyak waktu pada kertas DiCiccio dan Efron 1996 , Interval Bootstrap Confidence Interval, tanpa banyak menunjukkannya.

Sebenarnya membuat saya berpikir kurang bootstrap sebagai metode tujuan umum. Dulu saya menganggapnya sebagai sesuatu yang akan menarik Anda keluar dari kemacetan ketika Anda benar-benar terjebak. Tapi saya telah belajar rahasia kecilnya yang kotor: interval kepercayaan bootstrap semuanya didasarkan pada normalitas dalam beberapa hal. Izinkan saya menjelaskan.

xN(μ,σ2)
σ
z=x-μσN(0,1)
μPr(-1.96x-μσ1.96)=0,95

Ketika Anda berpikir tentang apa yang membenarkan persentil dari distribusi normal yang terkait dengan interval kepercayaan, itu sepenuhnya didasarkan pada kuantitas penting yang nyaman ini. Untuk distribusi sewenang-wenang, tidak ada hubungan teoritis antara persentil distribusi sampel dan interval kepercayaan , dan mengambil proporsi mentah dari distribusi sampel bootstrap tidak memotongnya.

Jadi interval BCa Efron (bias dikoreksi) menggunakan transformasi untuk mendapatkan perkiraan normalitas dan metode bootstrap-t bergantung pada statistik t yang dihasilkan yang kira-kira penting. Sekarang bootstrap dapat memperkirakan kapan saja, dan Anda selalu dapat mengasumsikan normalitas dan menggunakan standar +/- 2 * SE. Tetapi mengingat semua pekerjaan yang dilakukan menjadi non-parametrik dengan bootstrap, sepertinya tidak adil, bukan?

Ben Ogorek
sumber
2
Mungkin saja saya melewatkan sesuatu, tetapi kenyataan bahwa bootstrap dikaitkan dengan jumlah sangat penting atau hampir tidak dengan sendirinya tidak menyiratkan hubungan apa pun dengan normalitas. Jumlah penting mungkin memiliki segala macam distribusi dalam keadaan tertentu. Saya juga tidak melihat bagaimana kalimat yang dicetak miring pada paragraf terakhir Anda yang kedua mengikuti.
Glen_b -Reinstate Monica
1
Lalu bagaimana pernyataan yang berkaitan dengan normalitas mengikuti?
Glen_b -Reinstate Monica
1
FΦ-1[F(X)]
2
F
2
Untuk menambahkan ke @Glen_b: transformasi ke distribusi normal hanya perlu ada untuk membuktikan metode yang benar. Anda tidak perlu menemukannya untuk menggunakan metode ini. Selain itu, jika Anda tidak menyukai distribusi normal, Anda bisa menulis ulang seluruh bukti dengan beberapa distribusi simetris dan berkesinambungan lainnya. Penggunaan distribusi normal secara teknis bermanfaat, tetapi tidak sepenuhnya diperlukan, itu tidak mengatakan apa-apa tentang sumber data, atau sampel rata-rata.
Peter