의도 된 분포에 대해 무작위로 생성 된 데이터 테스트


17

임의의 데이터를 생성하는 프로그램을 작성했습니다. 프로그램이 올바르게 작동하는 경우 해당 데이터는 알려진 특정 확률 분포를 따라야합니다. 프로그램을 실행하고 결과를 계산하고 p- 값을 만들고 싶습니다.

다른 사람이 말하기 전에 : 가설 테스트는 프로그램이 올바르게 작동하는시기를 감지 할 수 없다는 것을 이해합니다. 특정 방식으로 잘못 작동하는 경우에만 감지 할 수 있습니다 . (따라서 선택한 "의의 수준"에 따라 테스트 "시간"이 X %에 실패합니다 ...)

따라서 적절한 도구가 무엇인지 이해하려고합니다. 특히:

  • 원하는만큼 임의의 데이터를 생성 할 수 있습니다. 내가해야 할 일은 프로그램을 오래 실행하는 것입니다. 따라서 특정 샘플 크기로 제한되지 않습니다.

  • p- 값을 생성하는 기술에 관심이 있습니다. 따라서 그래프를 쳐다 보면서 "그렇다. 다소 선형 적으로 보인다"라고 말하는 것은 흥미로운 옵션이 아니다. 그래프의 "졸음"에 어려운 숫자를 넣는 방법이 없다면. ;-)

내가 지금까지 알고있는 것 :

  • [Pearson] 카이 제곱 테스트, Kolmogorov-Smirnov 테스트 및 Anderson-Darling 테스트 등 3 가지 주요 테스트 유형이 적용 가능한 것으로 들었습니다.

  • 카이 제곱 검정은 이산 분포에 적합 하고 다른 두 개는 연속 분포에 더 적합합니다 . (?)

  • 다양한 소식통은 AD 테스트가 KS 테스트보다 "더 나은"것을 암시하지만 더 자세한 내용은 다루지 않습니다.

궁극적으로 이러한 모든 테스트는 아마도 지정된 널 분포에서 벗어나는 "다른 방법"을 감지합니다. 그러나 나는 그 차이점이 무엇인지 실제로 모른다.


자신이 직접 작성했다면 지식의 한계를 넘어 서면 (실제로 디자인에 포함되어 있음) 거의 '실패'할 수밖에 없습니다. 점검 방법 중 일부가 나열된 random.org/analysis 및 분명히 stackoverflow.com/q/2130621/717355를 살펴보십시오 . 철학적으로, 프로그램이 결정 론적이라면 어쨌든 무작위로 할 수는 없습니다 ;-) 확실히 공부할 가치가 있습니다 (그리고 암호 해킹 crypo 토론을 잊지 마십시오).
Philip Oakley

답변:


21

다음은 언급 된 3 가지 방법의 작동 방식에 대한 일반적인 설명입니다.

카이-제곱 법은 분포에 따라 빈의 관측치 수와 빈에있을 것으로 예상되는 수를 비교하여 작동합니다. 불연속 분포의 경우 빈은 대개 불연속 가능성 또는 이들의 조합입니다. 연속 분포의 경우 절단 점을 선택하여 빈을 생성 할 수 있습니다. 이를 구현하는 많은 기능이 자동으로 저장소를 생성하지만 특정 영역에서 비교하려는 경우 자체 저장소를 생성 할 수 있습니다. 이 방법의 단점은 이론적으로 분포와 동일한 빈에 값을 넣은 경험적 데이터 간의 차이는 감지되지 않으며 이론적으로 2와 3 사이의 숫자가 범위를 통해 확산되어야하는 경우 반올림입니다. (우리는 2.34296과 같은 값을 기대합니다),

KS 검정 통계량은 비교되는 2 개의 누적 분포 함수 사이의 최대 거리입니다 (종종 이론적이며 경험적임). 2 개의 확률 분포에 1 개의 교차점이 있고 1에서 최대 거리를 뺀 최대 거리는 2 개의 확률 분포 사이의 겹치는 영역입니다 (이는 일부 사람들이 측정 대상을 시각화하는 데 도움이 됨). 이론적 분포 함수와 EDF를 동일한 플롯에 플로팅 한 다음 두 "곡선"사이의 거리를 측정하고, 가장 큰 차이는 검정 통계량이며, 널이 참일 때의 값 분포와 비교됩니다. 이 차이는 분포의 형태 또는 다른 분포에 비해 1 개의 분포가 이동되거나 늘어난 차이를 포착합니다.1

Anderson-Darling 검정은 KS 검정과 같은 CDF 곡선의 차이를 사용하지만 최대 차이를 사용하는 대신 2 개의 곡선 사이의 총 면적 함수를 사용합니다 (실제로 차이를 제곱하고 가중치를 부여하므로 꼬리는 더 많은 영향을 미치고 배포 영역에 통합됩니다). 이는 KS보다 특이점에 더 많은 가중치를 부여하고 몇 가지 작은 차이가있는 경우 (KS가 강조 할 1 개의 큰 차이에 비해) 더 많은 가중치를 제공합니다. 결과적으로 중요하지 않은 차이를 찾기 위해 테스트를 압도 할 수 있습니다 (가벼운 반올림 등). KS 테스트와 마찬가지로 데이터에서 파라미터를 추정하지 않았다고 가정합니다.

다음은 마지막 2의 일반적인 아이디어를 보여주는 그래프입니다.

여기에 이미지 설명을 입력하십시오

이 R 코드를 기반으로 :

set.seed(1)
tmp <- rnorm(25)
edf <- approxfun( sort(tmp), (0:24)/25, method='constant', 
    yleft=0, yright=1, f=1 )

par(mfrow=c(3,1), mar=c(4,4,0,0)+.1)
curve( edf, from=-3, to=3, n=1000, col='green' )
curve( pnorm, from=-3, to=3, col='blue', add=TRUE)

tmp.x <- seq(-3, 3, length=1000)
ediff <- function(x) pnorm(x) - edf(x)
m.x <- tmp.x[ which.max( abs( ediff(tmp.x) ) ) ]
ediff( m.x )  # KS stat
segments( m.x, edf(m.x), m.x, pnorm(m.x), col='red' )  # KS stat

curve( ediff, from=-3, to=3, n=1000 )
abline(h=0, col='lightgrey')    

ediff2 <- function(x) (pnorm(x) - edf(x))^2/( pnorm(x)*(1-pnorm(x)) )*dnorm(x)
curve( ediff2, from=-3, to=3, n=1000 )
abline(h=0)

상단 그래프는 표준 법선의 CDF와 비교 한 표준 법선의 샘플의 EDF를 KS 통계를 나타내는 선으로 보여줍니다. 중간 그래프는 두 곡선의 차이를 보여줍니다 (KS 통계가 어디서 발생하는지 확인할 수 있습니다). 하단은 제곱되고 가중 차이이며 AD 테스트는이 곡선 아래 영역을 기반으로합니다 (모든 것이 정확하다고 가정).

다른 테스트는 qqplot의 상관 관계를보고, qqplot의 기울기를보고, 모멘트를 기준으로 평균, var 및 기타 통계를 비교합니다.


+1, 이것은 실제 질문에 대한 좋은 대답입니다 (내 것과는 다릅니다 ...). 단락 3의 중간 부분에서 진행되는 설명은 설명하기 쉬운 그림을 요구합니다.
gung-모니 티 복원

정말 좋은 답변입니다. KS 테스트는 CDF와 EDF 사이의 가장 큰 편차를 반환하는 반면 AD는 두 곡선 사이의 총 [가중] 영역을 반환합니다.
MathematicalOrchid

@MathematicalOrchid는 대부분 정확하며 AD는 거리를 제곱 한 다음 무게를 가한 다음 통합하므로 영역과 다소 다릅니다 (이해하기 위해 영역으로 생각하면 괜찮고 훨씬 간단합니다).
Greg Snow

1
이론적 분포에 점 질량 (주어진 지점에서 CDF의 수직 점프)이 있고 데이터의 실제 분포에 거의 동일한 지점에서 점 질량이있는 경우 KS 테스트가 우수 할 수 있습니다. AD 테스트에. 그러나 그 사건은 아마도 약간의 생각입니다. KS 테스트는 AD가 항상 양면 인 단면 테스트를 허용하므로 다른 차이가 있습니다 (공통은 아님).
Greg Snow

2
나는 KS 통계가 "하나의 극단 점"에만 의존한다는 @MathematicalOrchid 특성화를 좋아하지 않습니다. CDF에서 해당 "한 지점"의 위치 (종종 분포의 중간에 위치)는 세트의 다른 지점의 값에 따라 달라 지므로 해당 언어가 순진한 청취자에게 제안하는 것만 큼 고립되거나 독방 적이 지 않습니다.
DWin

12

명확하고 자세한 질문을 작성하여 +1 내 대답이 너무 답답하지 않기를 바랍니다. 귀하의 경우 가설 검정이 적절한 접근법이 아니라고 생각합니다. 귀무 가설 유의성 검정은 답 예 또는 아니오 일 수 있지만 적절한 방법을 모를 때 수행 할 있는 합리적인 방법 입니다 . (불행히도, 실제로 어떤 것을 알려주지는 않지만 이것은 다른 문제입니다.) 귀하의 경우, 알고리즘이 좋은지 알고 싶습니다. 그러나 어떤 컴퓨터 프로그램도 어떤 확률 분포에서든 실제로 임의의 데이터를 생성 할 수 없다는 것이 알려져 있습니다 (확실히). 이것은 모든 컴퓨터가 유한 상태 머신 이므로 의사 난수 만 생성 할 수 있기 때문에 이는 사실 입니다.. 또한 (진정한 무작위성이 결여 됨), 생성 된 값이 연속 분포를 완벽하게 따르는 것은 불가능합니다. 이것을 이해하는 데는 여러 가지 방법이 있지만 가장 쉬운 방법은 숫자 라인에 '갭'이 있다는 것입니다. 이는 연속 임의 변수에는 해당되지 않습니다. 더욱이, 이러한 간격이 모두 완벽하게 동일하게 넓거나 완벽하게 동일하게 이격 된 것은 아닙니다. 의사 난수 생성을 수행하는 컴퓨터 과학자들 사이에서 게임의 이름은 간격이 더 길고 간격이 더 짧아지고 더 많은 값을 더 빨리 생성 할 수 있도록 알고리즘을 개선하는 것입니다. 어쨌든 이러한 사실은 가설 검정이 알고리즘이 "알려진 특정 확률 분포"를 제대로 따르는 지 여부를 결정하기위한 잘못된 접근 방법임을 입증합니다 그렇지 않기 때문입니다. (죄송합니다.)

대신,보다 적절한 프레임 워크는 데이터가 이론적 분포에 얼마나 가까운 지 결정 하는 것 입니다. 이를 위해 플롯, 특히 qq-plots pp-plots를1β모수 추정 에서의 정확성아르 자형=1

다른 참고로, 알고리즘의 품질 평가와 관련하여 다른 표준 pRNG와 비교하여 시간을 계산할 수 있습니다.

도움이 되었기를 바랍니다.


정확히 내가 요구 한 것은 아니지만 통찰력은 적습니다. 나는 "연속적이지 않다"고 가정합니다. 기본적으로 컴퓨터가 무한 정밀도 산술을 구현하지 않는다는 사실을 말하는 것입니까?
MathematicalOrchid

그것은 큰 부분이지만 문제의 전부는 아닙니다. 이것은 매우 복잡한 주제입니다.
gung-모니 티 복원

1
@gung의 첫 번째 단락의 아이디어 중 일부는 R 패키지 의 기능 SnowsPenultimateNormalityTest에 구현되어 있습니다 TeachingDemos. 나는 p- 값에 초점을 맞추기보다는 친밀감을 측정하려는 @gung의 아이디어에 동의합니다. 이를 위해 qq 플롯에서 상관 관계를 사용할 때의 한 가지 문제는 데이터의 모양이 정확하지만 평균, 분산 등이 다르더라도 여전히 높은 상관 관계를 얻을 수 있다는 것입니다. 대안은 KS 통계 또는 AD 통계를 이론과의 차이 측정으로 사용하는 것입니다.
Greg Snow

@ gung, 답변 주셔서 감사합니다. “데이터를 플로팅하기에 적합하게 변환하고 문제의 이론적 분포에서 해당 값을 계산 한 후 상관시킬 수 있습니까?”에 대해 좀 더 자세히 설명해 주시겠습니까? pp- 또는 qq-plotting에 대한 데이터를 계산 했으므로 언급 한 r- 점수를 얻는 다음 단계는 무엇입니까? 잘 알려진 테스트입니까? 참조 해 주시겠습니까? 감사합니다!
Ivan

1

나는 모든 대답을 완전히 읽지는 않았지만 꽤 철저하고 정확하다는 것을 알았습니다. 긴 대답에 묻힌 것을 반복 할 위험을 감수하고 v = 카이 제곱 테스트를 연속 데이터에 사용할 수 있다고 말하고 싶습니다. 가장 좋은 테스트는 아니며 많은 테스트와 마찬가지로 점근 론에 의존하므로 희소 세포가있는 작은 샘플에서는 정확하지 않을 수 있습니다 (이는 비닝을 수행하는 방법에 따라 다릅니다). Anderson-Darling은 KS 검정보다 정규성 검정에 더 강력하지만 KS는 다른 연속 분포에 더 적합 할 수 있습니다. Lillefors에는 지수 분포를 위해 설계된 테스트가 있습니다.

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