Saya ingin menguji hipotesis bahwa dua sampel diambil dari populasi yang sama, tanpa membuat asumsi tentang distribusi sampel atau populasi. Bagaimana saya harus melakukan ini?
Dari Wikipedia kesan saya adalah bahwa tes Mann Whitney U harus sesuai, tetapi sepertinya tidak berhasil untuk saya dalam praktik.
Untuk konkret saya telah membuat dataset dengan dua sampel (a, b) yang besar (n = 10.000) dan diambil dari dua populasi yang tidak normal (bimodal), serupa (rata-rata sama), tetapi berbeda (standar deviasi) sekitar "punuk.") Saya mencari tes yang akan mengenali bahwa sampel ini bukan dari populasi yang sama.
Tampilan histogram:
Kode R:
a <- tibble(group = "a",
n = c(rnorm(1e4, mean=50, sd=10),
rnorm(1e4, mean=100, sd=10)))
b <- tibble(group = "b",
n = c(rnorm(1e4, mean=50, sd=3),
rnorm(1e4, mean=100, sd=3)))
ggplot(rbind(a,b), aes(x=n, fill=group)) +
geom_histogram(position='dodge', bins=100)
Berikut adalah tes Mann Whitney yang secara mengejutkan (?) Gagal menolak hipotesis nol bahwa sampel berasal dari populasi yang sama:
> wilcox.test(n ~ group, rbind(a,b))
Wilcoxon rank sum test with continuity correction
data: n by group
W = 199990000, p-value = 0.9932
alternative hypothesis: true location shift is not equal to 0
Tolong! Bagaimana saya harus memperbarui kode untuk mendeteksi distribusi yang berbeda? (Saya terutama ingin metode yang didasarkan pada pengacakan / resampling generik jika tersedia.)
EDIT:
Terima kasih semuanya atas jawabannya! Saya senang belajar lebih banyak tentang Kolmogorov – Smirnov yang tampaknya sangat cocok untuk tujuan saya.
Saya mengerti bahwa uji KS membandingkan ECDF dari dua sampel ini:
Di sini saya secara visual dapat melihat tiga fitur menarik. (1) Sampel berasal dari distribusi yang berbeda. (2) A jelas di atas B pada titik-titik tertentu. (3) A jelas di bawah B di titik-titik tertentu lainnya.
Tes KS tampaknya dapat menguji hipotesis masing-masing fitur ini:
> ks.test(a$n, b$n)
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D = 0.1364, p-value < 2.2e-16
alternative hypothesis: two-sided
> ks.test(a$n, b$n, alternative="greater")
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D^+ = 0.1364, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies above that of y
> ks.test(a$n, b$n, alternative="less")
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D^- = 0.1322, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies below that of y
Itu sangat rapi! Saya memiliki minat praktis pada masing-masing fitur ini dan karenanya bagus bahwa tes KS dapat memeriksa masing-masing fitur tersebut.
Jawaban:
Tes Kolmogorov-Smirnov adalah cara paling umum untuk melakukan ini, tetapi ada juga beberapa opsi lain.
Pengujian didasarkan pada fungsi distribusi kumulatif empiris. Prosedur dasarnya adalah:
dgof
cvm.test()
EDIT:
Untuk mengubahnya menjadi prosedur tipe pengambilan sampel, kita dapat melakukan hal berikut:
Akhirnya Anda akan membangun banyak sampel dari distribusi statistik uji di bawah hipotesis nol, yang kuantilasinya dapat Anda gunakan untuk melakukan tes hipotesis Anda pada tingkat signifikansi mana pun yang Anda inginkan. Untuk statistik uji KS, distribusi ini disebut distribusi Kolmogorov.
Perhatikan bahwa untuk uji KS, ini hanya buang-buang upaya komputasi karena kuantil sangat sederhana dikarakterisasi secara teoritis, tetapi prosedur ini umumnya berlaku untuk setiap uji hipotesis.
sumber