R의 Kolmogorov-Smirnov 테스트 이해


17

Kolmogorov-Smirnov 테스트 기능 (두 샘플, 양면)의 출력을 이해하려고합니다. 다음은 간단한 테스트입니다.

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

내가 이해하지 못하는 몇 가지가 있습니다.

  1. 로부터 도움 , P 값이 가설을 의미 것으로 보인다 var1=var2. 그러나 여기서는 테스트에 ( p<0.05) 라고 표시 됩니다.

    ㅏ. 말할 수 없다 X = Y;

    비. 말할 수 있습니다 X = Z;

    씨. 말할 수 없어 X = X(!)

x가 그 자체와 다르다는 것 (!)을 나타내는 것 외에도 x=z두 분포가 겹치는 지원이 없기 때문에 나에게는 매우 이상합니다 . 어떻게 가능합니까?

  1. 시험의 정의에 따르면 D두 확률 분포 간의 최대 차이해야하지만, 경우에 예를 들어 (x,y)그이어야 D = Max|P(x)-P(y)| = 4(사용하는 경우 P(x), P(y)정규화되지 않은) 또는 D=0.3 (가 규격화되어있는 경우). 왜 D와 다른가요?

  2. 내가 작업하는 데이터가 동일한 값을 많이 가지고 있기 때문에 의도적으로 많은 관계 를 가지고 예제를 만들었습니다 . 이것이 왜 테스트를 혼란스럽게합니까? 반복되는 값의 영향을받지 않아야 할 확률 분포를 계산했다고 생각했습니다. 어떤 생각?

답변:


21

KS 테스트는 (도움말 페이지 상태와 같이) 연속 분포 에서 두 개의 독립적 인 샘플의 "동일성"을 테스트하는 것을 전제 로합니다. 이 경우 관계의 확률은 놀랍게도 작아야합니다 (또한 명시되어 있음). 테스트 통계량은 두 샘플의 ECDF 사이의 최대 거리입니다. p- 값은 두 표본이 동일한 분포에서 추출 된 경우 검정 통계량보다 높거나 높은 검정 통계량을 볼 확률입니다. (그것은 "VAR1 = VAR2 그 확률"아니다. 그리고 또한, 1 P_VALUE 중 하나. 그 확률이 아니다) 높은 P-값은 당신이 말할 수 없습니다차이에 대한 통계적 지원을 주장하지만 낮은 p- 값은 동일성의 증거가 아닙니다. 낮은 p- 값은 샘플 크기가 작거나 (예 : 제공되는) 흥미롭지 만 작은 차이가있을 때 발생할 수 있습니다 (예 : 중첩 된 진동 장애). 관계가 많은 상황에서 작업하는 경우 데이터 상황에 더 적합한 테스트를 사용해야 할 수도 있습니다.

관계가 가정을 위반 한 이유에 대한 나의 설명은 관계가 결과를 무효화했다는 주장이 아니었다. 실제로 KS 검정의 통계적 특성은 해당 가정의 실패에 대해 상대적으로 저항 적이거나 강력합니다. 내가 본 KS 테스트의 주된 문제는 그것이 너무 일반적이며 흥미로운 결과의 의미있는 차이를 식별하기에 힘이 부족하다는 것입니다. KS 테스트는 매우 일반적인 테스트이며보다 구체적인 가설에 대해서는 다소 낮은 검정력을 갖습니다.

반면에, KS 테스트 (또는 "더 강력한"Anderson Darling 또는 Lillefors (sp?) 테스트)는 테스트와 같이 테스트가 완전히 보증되지 않는 상황에서 "정상 성"을 테스트하는 데 사용됩니다. 적합하기 전에 회귀 모형에서 예측 변수로 사용되는 변수의 정규성 합법적으로 정규성을 테스트하고 싶을 수도 있습니다. 잔차를 그 모델링 이론에서 가정 무엇 때문이다. 그럼에도 불구하고 잔차의 정규성에서 완만 한 출발은 일반적으로 결과의 유효성에 도전하지 않습니다. 통계적 중요성에 대한 결론에 대한 "비정규 성"의 중요한 영향을 확인하기 위해 강력한 방법을 사용하는 것이 좋습니다.

현지 통계 전문가와 상담해야합니까? 통계 질문을 좀 더 정확하게 정의하는 데 도움이되므로 실제로 존재하는 경우 차이를 식별 할 수있는 가능성이 높아집니다. 그것은 "유형 II 오류"를 피하는 것입니다 : 그러한 차이가있을 때 차이의 결론을지지하지 않습니다.



나는 ( sekhon.berkeley.edu/matching/ks.boot.html ) dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)과 동일한 예제를 테스트했습니다 . D와 계산 된 p- 값은 두 경우 모두 동일합니다. 이것은 아마도 KS가 여러 관계가 있고 방법이 작동하지 않을 때조차 그렇게 나쁘지 않다고 생각합니다. 내가 KS를 좋아하는 이유는 매개 변수가 아니기 때문에 즉, 샘플의 분포를 가정 할 필요가 없기 때문입니다. Matching::ks.boot(x,y, nboots=1000)
Nonancourt

그러나, 나는 여전히 D. I의 가치관은 그것뿐만 SQRT (M * N / (m + N))와 같은 prefactor 될 줄 알았는데 할 수 없습니다 여기에 있지만 만들 것 D(x,y) = sqrt(100/20)*0.3=0.67여전히 다른 인.
Nonancourt

3

ks.test코드 에서 D를 계산하려면 다음을 수행하십시오 .

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.