Diskusi
Tes permutasi menghasilkan semua permutasi yang relevan dari suatu dataset, menghitung statistik uji yang ditunjuk untuk setiap permutasi tersebut, dan menilai statistik pengujian aktual dalam konteks distribusi permutasi yang dihasilkan dari statistik. Cara yang umum untuk menilai itu adalah melaporkan proporsi statistik yang (dalam beberapa hal) "sebagai atau lebih ekstrem" daripada statistik aktual. Ini sering disebut "nilai-p".
Karena dataset aktual adalah salah satu permutasi itu, statistiknya tentu akan berada di antara yang ditemukan dalam distribusi permutasi. Oleh karena itu, nilai-p tidak pernah nol.
Kecuali jika dataset sangat kecil (kurang dari sekitar 20-30 jumlah total, biasanya) atau statistik uji memiliki bentuk matematika yang sangat bagus, tidak praktis untuk menghasilkan semua permutasi. (Contoh di mana semua permutasi dihasilkan muncul di Uji Permutasi di R. ) Oleh karena itu implementasi komputer dari tes permutasi biasanya sampel dari distribusi permutasi. Mereka melakukannya dengan menghasilkan beberapa permutasi acak independen dan berharap bahwa hasilnya adalah sampel representatif dari semua permutasi.
Oleh karena itu, angka apa pun (seperti "nilai-p") yang berasal dari sampel semacam itu hanyalah penaksir properti dari distribusi permutasi. Sangat mungkin - dan sering terjadi ketika efeknya besar - bahwa nilai p yang diperkirakan adalah nol. Tidak ada yang salah dengan hal itu, tetapi hal itu segera menimbulkan masalah yang sebelumnya diabaikan tentang seberapa besar estimasi nilai p berbeda dari yang benar? Karena distribusi sampling proporsi (seperti estimasi nilai-p) adalah Binomial, ketidakpastian ini dapat diatasi dengan interval kepercayaan Binomial .
Arsitektur
Implementasi yang dibangun dengan baik akan mengikuti diskusi dengan cermat dalam segala hal. Ini akan dimulai dengan rutin untuk menghitung statistik tes, karena ini untuk membandingkan cara dua kelompok:
diff.means <- function(control, treatment) mean(treatment) - mean(control)
Tulis rutin lain untuk menghasilkan permutasi acak dataset dan menerapkan statistik uji. Antarmuka yang satu ini memungkinkan penelepon untuk menyediakan statistik uji sebagai argumen. Ini akan membandingkan m
elemen pertama dari sebuah array (dianggap sebagai grup referensi) dengan elemen lainnya (grup "perawatan").
f <- function(..., sample, m, statistic) {
s <- sample(sample)
statistic(s[1:m], s[-(1:m)])
}
Tes permutasi dilakukan pertama-tama dengan menemukan statistik untuk data aktual (diasumsikan di sini untuk disimpan dalam dua array control
dan treatment
) dan kemudian menemukan statistik untuk banyak permutasi acak independen daripadanya:
z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)
Sekarang hitung estimasi binomial dari nilai-p dan interval kepercayaan untuknya. Satu metode menggunakan binconf
prosedur bawaan dalam HMisc
paket:
require(Hmisc) # Exports `binconf`
k <- sum(abs(sim) >= abs(z)) # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default
Ini bukan ide yang buruk untuk membandingkan hasilnya dengan tes lain, bahkan jika itu diketahui tidak cukup berlaku: setidaknya Anda mungkin mendapatkan urutan besarnya di mana hasilnya seharusnya terletak. Dalam contoh ini (alat pembanding), Student t-test biasanya memberikan hasil yang baik:
t.test(treatment, control)
Arsitektur ini diilustrasikan dalam situasi yang lebih kompleks, dengan R
kode kerja , di Test Apakah Variabel Ikuti Distribusi yang Sama .
Contoh
100201.5
set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)
Setelah menggunakan kode sebelumnya untuk menjalankan tes permutasi, saya merencanakan sampel distribusi permutasi bersama dengan garis merah vertikal untuk menandai statistik aktual:
h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")
Perhitungan batas kepercayaan binomial menghasilkan
PointEst Lower Upper
0 0 0.0003688199
00,000373.16e-05
0,000370,000370,050,010,001
Komentar
kN k / N( k + 1 ) / ( N+ 1 )N
10102= 1000,0000051.611.7bagian per juta: sedikit lebih kecil dari uji-t Student yang dilaporkan. Meskipun data dihasilkan dengan generator angka acak normal, yang akan membenarkan menggunakan uji-t Student, hasil tes permutasi berbeda dari hasil uji-t Student karena distribusi dalam setiap kelompok pengamatan tidak normal normal.
a.random
b.random
b.random
a.random
coding
lncrna