R'de Kolmogorov-Smirnov testini anlama


17

Kolmogorov-Smirnov test fonksiyonunun çıktısını anlamaya çalışıyorum (iki örnek, iki taraflı). İşte basit bir test.

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

Burada anlamadığım birkaç şey var.

  1. Gönderen yardımıyla , p-değeri hipotezi ifade eder gibi görünüyor var1=var2. Ancak, burada testin ( p<0.05) yazdığı anlamına gelir :

    a. Bunu söyleyemem X = Y;

    b. Bunu söyleyebiliriz X = Z;

    c. Bunu söyleyemem X = X(!)

X'in kendisinden farklı olduğunu (!) Göstermenin x=zyanı sıra, iki dağılımın sıfır örtüşen desteğe sahip olması da benim için oldukça garip . Bu nasıl mümkün olabilir?

  1. Testin tanımına göre, Diki olasılık dağılımları arasındaki maksimum fark olması gerekir, ama durumda, örneğin (x,y)olması gerektiği D = Max|P(x)-P(y)| = 4(zaman durumda P(x), P(y)normalize edilmemiş) ya da D=0.3 (bunlar normalize halinde). D neden bundan farklı?

  2. Birlikte çalıştığım verilerin çok fazla özdeş değeri olduğu için kasıtlı olarak birçok bağ ile örnek yaptım . Bu testi neden karıştırıyor? Tekrarlanan değerlerden etkilenmemesi gereken bir olasılık dağılımı hesapladığını düşündüm. Herhangi bir fikir?

Yanıtlar:


21

KS testi, sürekli bir dağıtımdan (yardım sayfasının belirttiği gibi) iki bağımsız örneğin "eşliğini" test etmeye dayanmaktadır . Bu durumda, bağların olasılığı şaşırtıcı derecede küçük olmalıdır (ayrıca belirtilmiştir). Test istatistiği, iki örneğin ECDF'leri arasındaki maksimum mesafedir. P değeri, iki numune aynı dağılımdan çekildiyse, bir test istatistiğinin gözlenenden daha yüksek veya daha yüksek görülme olasılığıdır. ("Var1 = var2 olasılığı" değildir. Ayrıca, 1-p_value da bu olasılık DEĞİLDİR.) Yüksek p değerleri , yapamayacağınızı söylerbir farklılık için istatistiksel destek talep eder, ancak düşük p değerleri eşliğin kanıtı değildir. Düşük örnek büyüklüklerinde (örneğin örnekte olduğu gibi) düşük p değerleri veya üst üste bindirilmiş salınım bozuklukları gibi ilginç fakat küçük farkların varlığı oluşabilir. Çok sayıda bağ bulunan durumlarla çalışıyorsanız, veri durumunuza daha uygun bir test kullanmanız gerekebilir.

Bağların neden varsayımların ihlali olduğuna dair açıklamam, bağların sonuçları geçersiz kıldığı iddiası değildi. KS testinin pratikte istatistiksel özellikleri, bu varsayımın başarısızlığına karşı nispeten dirençlidir veya sağlamdır. Gördüğüm gibi KS testi ile ilgili temel sorun, aşırı genel olması ve sonuç olarak ilginç bir doğadaki anlamlı farklılıkları tanımlamak için yetersiz güç olmasıdır. KS testi çok genel bir testtir ve daha spesifik hipotezler için oldukça düşük güce sahiptir.

Öte yandan, böyle bir testin test edilmemesi gibi tamamen normal olmayan durumlarda "normalliği" test etmek için kullanılan KS testini (veya "daha da güçlü" Anderson Darling veya Lillefors (sp?) Testini) de görüyorum. uyumdan önce bir regresyon modelinde yordayıcı olarak kullanılan değişkenlerin normalliği. Bir meşru normallik testleri olmak isteyebilirsiniz ait artıkların o modelleme teorisinde varsayılır budur çünkü. O zaman bile, artıkların normalliğinden mütevazı ayrılma genellikle sonuçların geçerliliğine meydan okumaz. "Normalliksizlik" in istatistiksel anlamlılığa ilişkin sonuçlar üzerindeki önemli etkilerini kontrol etmek için sağlam yöntemler kullanmak daha iyi olacaktır.

Belki de yerel bir istatistikçiye danışmalısınız? İstatistiksel soruyu biraz daha kesin bir şekilde tanımlamanıza yardımcı olabilir ve bu nedenle gerçekten varsa bir farkı tanımlama şansınız daha yüksektir. Bu bir "tip II hatası" ndan kaçınmak olacaktır: böyle bir fark olduğunda farkın sonucunu desteklememek.



Aynı örnekleri hem ( dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)ve sekhon.berkeley.edu/matching/ks.boot.html ) ile test ettim . Hem D hem de hesaplanan p değeri her iki durumda da tamamen aynıdır. Bu, belki de birkaç bağa sahip olduğunda ve yöntemin çalışması garanti edilmediğinde bile, belki de KS'nin o kadar da kötü olmadığını düşündürüyor? KS'yi sevmemin nedeni parametrik olmaması, yani numuneler için bir dağıtım varsaymam gerekmiyor. Matching::ks.boot(x,y, nboots=1000)
Nonancourt

Ancak, ben yine de D. I değerlerinin duygusu o kadar sqrt (m * n / (m + n)) gibi bir §a olabileceğini düşündüm yapamaz burada , ama bu yapacak D(x,y) = sqrt(100/20)*0.3=0.67hala farklı olan.
Nonancourt

3

D'yi ( ks.testkoddan) hesaplamak için :

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.