Tes non-parametrik jika dua sampel diambil dari distribusi yang sama

19

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:

sampel bimodal

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:

ECDF

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.

Luke Gorrie
sumber
Tidak terlalu mengejutkan bahwa UM tidak menolak. Untuk tes satu sisi, tes ini menguji apakah Pr (a> b) <0,05 di mana a dan b dipilih secara acak dari populasi Anda.
mdewey
1
Hipotesis untuk Mann-Whitney kadang-kadang dikatakan menyangkut "lokasi" dari kedua kelompok, atau sesuatu di sepanjang garis perbedaan stokastik sistematis. Dalam hal data Anda, kedua kelompok didistribusikan secara simetris sekitar 75, jadi UM seharusnya tidak menemukan perbedaan.
Sal Mangiafico
4
Ini adalah contoh yang baik dari kebingungan yang kita tabur ketika kita tidak jelas tentang hipotesis untuk suatu tes. Sayangnya, orang diajarkan untuk menggunakan uji- t untuk membandingkan dua kelompok, tanpa benar-benar berpikir bahwa tes ini membandingkan dua cara , sedangkan ada tes median untuk membandingkan dua median , Mann-Whitney yang membandingkan sesuatu yang lain, regresi kuantil untuk membandingkan persentil lainnya , tes untuk membandingkan varian, Kolmogorov-Smirnov untuk membandingkan distribusi, dan seterusnya ... Kami kadang-kadang hanya mengatakan kami ingin membandingkan dua "populasi" tanpa menjadi jelas hipotesis mana yang ingin kami uji.
Sal Mangiafico
Pada refleksi sepertinya halaman Wikipedia untuk tes MW menyatakan hipotesis dengan sangat jelas dan itu adalah kesalahpahaman (lompatan tidak berdasar) pada bagian saya untuk berpikir bahwa hipotesis ini juga menyiratkan bahwa sampel berasal dari distribusi yang sama. Memang, masalahnya menjadi jelas ketika membandingkan dua distribusi berbeda yang simetris di sekitar titik pusat yang sama.
Luke Gorrie

Jawaban:

17

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:

  • Lp
  • Cari tahu distribusi statistik uji di bawah hipotesis nol bahwa sampel berasal dari distribusi yang sama (untungnya orang sudah melakukan ini untuk jarak paling umum!)
  • αα%

L

ks.test(a,b)

p

L2dgofcvm.test()

EDIT:

nm

Untuk mengubahnya menjadi prosedur tipe pengambilan sampel, kita dapat melakukan hal berikut:

  1. nmnm
  2. Hitung metrik jarak Anda untuk sampel. Untuk tes KS, ini hanya maks. perbedaan antara CDF empiris.
  3. Simpan hasilnya dan kembali ke langkah 1.

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.

Akan
sumber
Terima kasih! Tes Kolmogorov-Smirnov memang menolak hipotesis nol bahwa sampel-sampel ini berasal dari populasi yang sama. Dan secara intuitif masuk akal untuk membandingkan ECDF karena itu lebih atau kurang apa yang saya lakukan secara visual dengan histogram. Pertanyaan: Misalkan saya perlu mengimplementasikan tes ini dari awal tanpa alat seperti R. Apakah ada metode sederhana yang cukup? (Mungkin berdasarkan bootstrap?) Saya bertanya karena latar belakang saya adalah pemrograman komputer dan saya menemukan metode berbasis simulasi jauh lebih mudah untuk dipahami.
Luke Gorrie
Anda harus melihat pengacakan atau permutasi. Saya lebih suka ini untuk tes tidak normal. Mereka juga memenuhi kriteria sebagai simulasi daripada statistik
RTbecard
2
@JamesAdamCampbell dapatkah Anda memperluas sedikit dalam jawaban yang berbeda?
Will
1
L.
1
Saya tidak melihat masalah dengan itu. Saya akan tertarik melihat hasilnya jika Anda mencoba beberapa hal ini! Akan keren untuk melihat apakah pendekatan CI dan uji KS lurus selalu memberi Anda jawaban yang sama. Saya curiga mereka lakukan :)
Will