Memahami uji Kolmogorov-Smirnov dalam R

17

Saya mencoba untuk memahami output dari fungsi tes Kolmogorov-Smirnov (dua sampel, dua sisi). Ini tes sederhana.

x <- c(1,2,2,3,3,3,3,4,5,6)
y <- c(2,3,4,5,5,6,6,6,6,7)
z <- c(12,13,14,15,15,16,16,16,16,17)

ks.test(x,y)

#   Two-sample Kolmogorov-Smirnov test
#
#data:  x and y
#D = 0.5, p-value = 0.1641
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, y) : cannot compute exact p-value with ties

ks.test(x,z)

#Two-sample Kolmogorov-Smirnov test

#data:  x and z
#D = 1, p-value = 9.08e-05
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, z) : cannot compute exact p-value with ties


ks.test(x,x)

#Two-sample Kolmogorov-Smirnov test

#data:  x and x
#D = 0, p-value = 1
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, x) : cannot compute exact p-value with ties

Ada beberapa hal yang tidak saya mengerti di sini.

  1. Dari bantuan itu, tampaknya nilai-p merujuk pada hipotesis var1=var2. Namun, ini berarti bahwa tes tersebut mengatakan ( p<0.05):

    Sebuah. Tidak bisa mengatakan itu X = Y;

    b. Dapat mengatakan itu X = Z;

    c. Tidak bisa mengatakan itu X = X(!)

Selain muncul bahwa x berbeda dari dirinya sendiri (!), Juga cukup aneh bagi saya bahwa x=z, karena kedua distribusi memiliki nol dukungan yang tumpang tindih. Bagaimana mungkin?

  1. Menurut definisi tes, Dharus ada perbedaan maksimum antara dua distribusi probabilitas, tetapi misalnya dalam kasus (x,y)itu harus D = Max|P(x)-P(y)| = 4(dalam kasus ketika P(x), P(y)tidak dinormalisasi) atau D=0.3 (jika mereka dinormalisasi). Kenapa D berbeda dari itu?

  2. Saya sengaja membuat contoh dengan banyak ikatan , karena data yang saya kerjakan memiliki banyak nilai yang identik. Mengapa ini membingungkan tes? Saya pikir itu menghitung distribusi probabilitas yang tidak boleh dipengaruhi oleh nilai yang diulang. Ada ide?

Non-halaman
sumber

Jawaban:

21

Tes KS didasarkan pada pengujian "kesamaan" dari dua sampel independen dari distribusi kontinu (sebagaimana dinyatakan dalam halaman bantuan). Jika itu yang terjadi maka kemungkinan ikatan harus sangat kecil (juga dinyatakan). Statistik uji adalah jarak maksimum antara ECDF untuk dua sampel. Nilai p adalah probabilitas melihat statistik uji sebagai tinggi atau lebih tinggi dari yang diamati jika dua sampel diambil dari distribusi yang sama. (Ini bukan "probabilitas bahwa var1 = var2". Dan selanjutnya, 1-p_value BUKAN probabilitas itu juga.) P-nilai tinggi mengatakan Anda tidak bisaklaim dukungan statistik untuk perbedaan, tetapi nilai-p rendah bukan bukti kesamaan. Nilai-p rendah dapat terjadi dengan ukuran sampel yang rendah (seperti contoh Anda berikan) atau adanya perbedaan yang menarik tetapi kecil, misalnya gangguan osilasi superimposed. Jika Anda bekerja dengan situasi dengan jumlah ikatan yang besar, ini menunjukkan bahwa Anda mungkin perlu menggunakan tes yang lebih cocok dengan situasi data Anda.

Penjelasan saya tentang mengapa ikatan merupakan pelanggaran asumsi bukanlah klaim bahwa ikatan membatalkan hasil. Sifat statistik uji KS dalam praktiknya relatif tahan atau kuat terhadap kegagalan asumsi itu. Masalah utama dengan tes KS seperti yang saya lihat adalah bahwa tes ini terlalu umum dan akibatnya kurang bertenaga untuk mengidentifikasi perbedaan yang bermakna dari sifat yang menarik. Tes KS adalah tes yang sangat umum dan memiliki daya agak rendah untuk hipotesis yang lebih spesifik.

Di sisi lain, saya juga melihat uji KS (atau "bahkan lebih kuat" Anderson Darling atau Lillefors (sp?) Tes) digunakan untuk menguji "normalitas" dalam situasi di mana tes seperti itu benar-benar tidak beralasan, seperti tes untuk normalitas variabel yang digunakan sebagai prediktor dalam model regresi sebelum fit. Satu mungkin sah ingin menguji normalitas dari para residual karena itulah yang diasumsikan dalam teori modeling. Bahkan kemudian keberangkatan sederhana dari normal residu umumnya tidak menantang validitas hasil. Orang akan lebih baik menggunakan metode yang kuat untuk memeriksa dampak penting "tidak normal" pada kesimpulan tentang signifikansi statistik.

Mungkin Anda harus berkonsultasi dengan ahli statistik lokal? Ini mungkin membantu Anda dalam mendefinisikan pertanyaan statistik sedikit lebih tepat dan karena itu memiliki peluang yang lebih baik untuk mengidentifikasi perbedaan jika memang ada. Itu akan menghindari "kesalahan tipe II": gagal mendukung kesimpulan perbedaan ketika perbedaan tersebut hadir.

DWIN
sumber
Saya telah menguji contoh yang sama baik dengan dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)dan Matching::ks.boot(x,y, nboots=1000)( sekhon.berkeley.edu/matching/ks.boot.html ). Baik D dan nilai p yang dihitung benar-benar identik dalam kedua kasus. Ini membuat saya berpikir bahwa mungkin KS tidak terlalu buruk, bahkan ketika seseorang memiliki beberapa ikatan dan metode ini tidak dijamin berhasil? Alasan mengapa saya suka KS adalah karena itu bukan parametrik, yaitu saya tidak perlu berasumsi distribusi untuk sampel.
Nonancourt
Namun, saya masih tidak dapat memahami nilai-nilai D. Saya pikir ini mungkin merupakan prefactor sebagai sqrt (m * n / (m + n)) seperti di sini , tapi itu akan membuat D(x,y) = sqrt(100/20)*0.3=0.67, yang masih berbeda.
Nonancourt
3

Untuk menghitung D (dari ks.testkode):

ks.test(x,y)

    Two-sample Kolmogorov-Smirnov test

data:  x and y
D = 0.5, p-value = 0.1641
alternative hypothesis: two-sided

alternative <- "two.sided"
x <- x[!is.na(x)]
n <- length(x)
  y <- y[!is.na(y)]
  n.x <- as.double(n)
  n.y <- length(y)
  w <- c(x, y)
  z <- cumsum(ifelse(order(w) <= n.x, 1/n.x, -1/n.y))
  z <- z[c(which(diff(sort(w)) != 0), n.x + n.y)] #exclude ties
  STATISTIC <- switch(alternative, two.sided = max(abs(z)), 
                      greater = max(z), less = -min(z))
  STATISTIC

[1] 0.5
Robert
sumber