Bagaimana kita membuat interval kepercayaan untuk parameter tes permutasi?

9

Tes permutasi adalah tes signifikansi berdasarkan sampel permutasi yang diambil secara acak dari data asli. Contoh permutasi diambil tanpa penggantian, berbeda dengan sampel bootstrap, yang ditarik dengan penggantian. Berikut adalah contoh yang saya lakukan di R dari tes permutasi sederhana. (Komentar Anda diterima)

Tes permutasi memiliki keuntungan besar. Mereka tidak memerlukan bentuk populasi tertentu seperti normalitas. Mereka berlaku untuk berbagai statistik, bukan hanya untuk statistik yang memiliki distribusi sederhana di bawah hipotesis nol. Mereka dapat memberikan nilai-p yang sangat akurat, terlepas dari bentuk dan ukuran populasi (jika cukup permutasi digunakan).

Saya juga telah membaca bahwa sering kali berguna untuk memberikan interval kepercayaan bersama dengan tes, yang dibuat menggunakan bootstrap resampling daripada permutasi resampling.

Bisakah Anda menjelaskan (atau hanya memberikan kode R) bagaimana interval kepercayaan dibangun (yaitu untuk perbedaan antara rata-rata dari dua sampel dalam contoh di atas)?

EDIT

Setelah beberapa googling saya menemukan bacaan yang menarik ini .

George Dontas
sumber

Jawaban:

7

Tidak apa-apa untuk menggunakan permutasi resampling. Itu benar-benar tergantung pada sejumlah faktor. Jika permutasi Anda adalah angka yang relatif rendah maka estimasi interval kepercayaan Anda tidak terlalu bagus dengan permutasi. Permutasi Anda agak di daerah abu-abu dan mungkin baik-baik saja.

Satu-satunya perbedaan dari kode sebelumnya adalah Anda akan membuat sampel secara acak alih-alih dengan permutasi. Dan, Anda akan menghasilkan lebih banyak dari mereka, katakanlah 1000 misalnya. Dapatkan skor perbedaan untuk 1000 ulangan percobaan Anda. Ambil cutoff untuk bagian tengah 950 (95%). Itulah interval kepercayaan diri Anda. Itu jatuh langsung dari bootstrap.

Anda telah melakukan sebagian besar ini dalam contoh Anda. panjang dif.treat adalah 462 item. Oleh karena itu, Anda memerlukan cutoff 2.5% dan 2.5% lebih rendah (sekitar 11 item di setiap ujung).

Menggunakan kode Anda dari sebelumnya ...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

Secara tidak langsung saya akan mengatakan bahwa 462 sedikit rendah tetapi Anda akan menemukan bootstrap ke 10.000 keluar dengan skor yang sedikit berbeda (kemungkinan lebih dekat dengan rata-rata).

Saya pikir saya juga menambahkan beberapa kode sederhana yang membutuhkan boot library (berdasarkan kode Anda sebelumnya).

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)
John
sumber
Terima kasih. Apakah boleh membuat sampel menggunakan sampledan replace=TRUE? Apakah ada alasan untuk menggunakan paket seperti boot?
George Dontas
Biasanya ini dilakukan dengan penggantian sehingga Anda ingin mengaturnya menjadi BENAR. Adapun alasannya ... paket dioptimalkan sehingga harus berjalan lebih cepat .... tidak pernah menghitung waktunya. Itu bisa menjadi masalah jika Anda mengatur R besar. Dan, seperti yang Anda lihat, kodenya bagus dan ringkas. Ini juga memiliki banyak fitur yang tidak mudah Anda buat sendiri.
John
boot.ci mengembalikan interval kepercayaan. Apakah ada fungsi (boot) yang memberikan nilai p.? (karena rasio jumlah perbedaan setidaknya setinggi yang diamati, dibandingkan jumlah total sampel yang dihasilkan)
George Dontas
ok, saya menemukan cara untuk mendapatkannya:sum(b$t>=b$t0)/b$R
George Dontas
@ gd047: memperhitungkan bahwa ini adalah nilai p satu sisi yang Anda hitung.
Joris Meys
4

Karena tes permutasi adalah tes yang tepat , memberi Anda nilai p yang tepat. Bootstrap tes permutasi tidak masuk akal.

Selain itu, menentukan interval kepercayaan di sekitar statistik uji juga tidak masuk akal, karena dihitung berdasarkan sampel Anda dan bukan perkiraan. Anda menentukan interval kepercayaan di sekitar perkiraan suka cara dan suka, tetapi tidak di sekitar statistik uji.

Tes permutasi tidak boleh digunakan pada dataset yang sangat besar sehingga Anda tidak dapat menghitung semua permutasi yang mungkin terjadi lagi. Jika itu masalahnya, gunakan prosedur bootstrap untuk menentukan cut-off untuk statistik uji yang Anda gunakan. Tetapi sekali lagi, ini tidak ada hubungannya dengan interval kepercayaan 95%.

Contoh: Saya menggunakan statistik T-klasik di sini, tetapi menggunakan pendekatan sederhana untuk bootstrap untuk perhitungan distribusi empiris statistik saya. Berdasarkan itu, saya menghitung nilai-p empiris:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

Mempertimbangkan bahwa pengujian 2-sisi ini hanya berfungsi untuk distribusi simetris. Distribusi non-simetris biasanya hanya diuji satu sisi.

EDIT:

OK, saya salah paham pertanyaannya. Jika Anda ingin menghitung interval kepercayaan pada estimasi perbedaan, Anda dapat menggunakan kode yang disebutkan di sini untuk bootstrap dalam setiap sampel. Pikiran Anda, ini adalah estimasi yang bias: umumnya ini memberikan CI yang terlalu kecil. Lihat juga contoh yang diberikan di sana sebagai alasan mengapa Anda harus menggunakan pendekatan yang berbeda untuk interval kepercayaan dan nilai-p.

Joris Meys
sumber
1
Bisakah Anda memberikan penjelasan mengapa tes permutasi tidak boleh digunakan pada dataset yang Anda tidak bisa menghitung semua permutasi yang mungkin?
Andy W
@Andy W: Pertama tentukan "tes permutasi". bagi saya, tes permutasi adalah tes yang tepat, menggunakan setiap permutasi yang mungkin. Itu tidak mungkin pada kumpulan data yang lebih besar. "Perkiraan tes permutasi" sebenarnya adalah metode Monte Carlo yang simpel, dan harus diadili seperti itu. Di samping itu, teorema batas pusat menjamin dalam banyak kasus bahwa asumsi mengenai distribusi statistik uji terpenuhi ketika menggunakan dataset besar. Dalam pengujian yang kompleks, penggunaan tes permutasi pada dataset besar membuat waktu perhitungan menjadi sangat lama tanpa menambahkan nilai signifikan. my2cents
Joris Meys
Saya tidak mengatakan apa-apa seperti bootstrap tes permutasi. Saya datang ke pertanyaan ini setelah membaca paragraf terakhir [BAGIAN 14.5 | Ringkasan], di pdf tertaut.
George Dontas
@ gd047 Lalu saya salah membaca pertanyaan Anda. Tetapi Anda harus benar-benar menjaga interval kepercayaan dan nilai p dipisahkan secara ketat. Interval kepercayaan diperkirakan berdasarkan bootstrap dalam setiap sampel (meskipun bias berdasarkan definisi), tes permutasi dilakukan dengan permutasi pada dataset lengkap. Itu adalah dua hal yang sangat berbeda.
Joris Meys
@ Kevin: Kode benar sekali. Baca kode lagi: x[6:11]merujuk pada argumen xfungsi anonim dalam berlaku. Mungkin membingungkan, tetapi hasil edit Anda memberikan hasil yang sangat salah. Berikan komentar tentang apa yang Anda pikirkan sebelum mengedit kode. Menghemat rollback saya. Untuk menghindari kebingungan lebih lanjut, saya mengubahnya xkei
Joris Meys
0

Dari kode Joris Meys di Jawaban tetapi dengan modifikasi untuk memungkinkannya diterapkan lebih dari satu situasi:

Saya mencoba mengedit yang lain tetapi saya tidak punya waktu untuk menyelesaikannya dan untuk beberapa alasan saya tidak dapat berkomentar (mungkin karena ini adalah pertanyaan lama).

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
Kevin
sumber