R의 포아송 분포를 따르는 데이터를 아는 방법?


25

저 학년생이며 확률 수업을위한 프로젝트가 있습니다. 기본적으로 저는 몇 년 동안 우리나라에 영향을 준 허리케인에 대한 데이터 세트를 가지고 있습니다.

확률 책 (Probability and Statistics with R)에는 데이터가 포아송 분포를 따르는 지 확인하는 방법에 대한 (완료되지 않은) 예가 있습니다. 120 (기준) 122-123 페이지 예)

1- 겹치지 않는 간격의 결과 수는 독립적입니다. 즉, 시간 간격 (0, t)의 결과 수는 시간 간격 (t, t + h], h> 0의 결과 수와 독립적입니다.

2- 충분히 짧은 간격으로 두 개 이상의 결과가 발생할 확률은 거의 제로입니다. 다시 말해, h가 충분히 작 으면, 구간 (t, t + h)에서 둘 이상의 결과를 얻을 확률은 동일한 시간 간격에서 하나 또는 제로 결과를 얻을 확률과 비교하여 무시할 수있다.

3- 충분히 짧은 간격 또는 작은 영역에서 정확히 하나의 결과가 발생할 확률은 간격 또는 영역의 길이에 비례합니다. 다시 말해서, 길이 h의 간격에서 하나의 결과의 확률은 λ * h이다.

그러나 기준 3은 "운동으로"남아 있습니다.

A- 누군가 내 데이터 세트가 포아송 분포를 따르는 지 확인하는 더 쉬운 방법이 있는지 말해 줄 수 있습니까?

B- 누군가가 어떤 종류의 예제로 나에게 기준 1과 3을 설명 할 수 있습니까?

감사!

참고 : 긴 게시물이 유감입니다. 또한 다음과 같은 테이블을 갖도록 데이터를 변환해야합니다.

  number of hurricanes       | 0 | 1 | 2  etc.
  -----------------------------------------
  total years that have      |   |   |
  that number of hurricanes  |   |   |

책의 기준은 구간 데이터에 대한 것입니다. 허리케인이 발병 한 날짜가 있다면 유용 할 것입니다. 또한 이러한 기준은 일정한 비율의 포아송 프로세스에 대한 것입니다. 허리케인의 경우는 아닙니다. 카운트 데이터가 포아송 분포를 따르는 지 확인하려면 첫 번째 기본 방법은 카이 제곱 검정입니다.
Elvis

답변:


33

분포가 푸 아송 분포와 약간 다른 방법은 무한합니다. Poisson 분포에서 데이터 세트 추출 되었음을 식별 할 수 없습니다 . 당신이 할 수있는 것은 포아송에서 볼 수있는 것과 불일치를 찾는 것이지만, 불일치가 분명하지 않아서 포아송으로 만들지는 않습니다.

그러나이 세 가지 기준을 확인하여 말하는 것은 통계적 수단 (즉, 데이터를보고)으로 Poisson 분포에서 데이터를 가져 오는지 확인하는 것이 아니라 데이터가 생성 된 프로세스가 다음을 충족하는지 여부를 평가하는 것입니다. 푸 아송 공정의 조건; 모든 조건이 유지되거나 거의 유지되는 경우 (그리고 데이터 생성 프로세스를 고려한 경우), 포아송 프로세스와 관련이 있거나 포이 슨 프로세스와 매우 유사한 조건을 가질 수 있습니다. 포아송 분포.

그러나 조건은 여러 가지 방식으로 유지되지 않습니다 ... 그리고 사실에서 가장 먼 곳은 3 번입니다. Poisson 프로세스를 주장 할 특별한 이유는 없지만 위반이 그렇게 나쁘지는 않지만 결과 데이터가 너무 멀지는 않습니다. 포아송에서.

따라서 데이터 자체를 조사하여 얻은 통계적 주장으로 돌아갑니다. 데이터는 분포가 비슷한 것이 아니라 포아송이라는 것을 어떻게 보여줍니까?

처음에 언급했듯이, 데이터가 Poisson이라는 기본 분포와 분명히 일치하지 않는지 확인하지만 Poisson에서 추출되었다는 것을 알려주지는 않습니다 (이미 데이터가 있다고 확신 할 수 있음) 아니).

적합도 테스트를 통해이 검사를 수행 할 수 있습니다.

언급 된 카이-제곱은 그러한 것 중 하나이지만, 나는이 상황에 대해 카이-제곱 테스트를 권장하지 않습니다. **; 흥미로운 편차에 대해 전력이 낮습니다. 당신의 목표가 좋은 힘을 갖는 것이라면, 그런 식으로 얻지 못할 것입니다 (힘에 관심이 없다면 왜 테스트하겠습니까?). 주요 가치는 단순하며 교육 학적 가치가있다. 그 밖에는 적합도 테스트로서 경쟁력이 없습니다.

** 추후 편집에 추가됨 : 이제 이것이 숙제라는 것이 분명해 졌으므로 데이터가 Poisson과 일치하지 않는지 확인하기 위해 카이 제곱 테스트 를 수행 할 가능성이 상당히 높아집니다 . 첫 번째 포아송 니스 플롯 아래에서 수행 된 카이-제곱 적합도 검정 예를 참조하십시오.


사람들은 종종 잘못된 이유로 이러한 테스트를 수행합니다 (예 : '데이터가 포아송이라고 가정하는 데이터로 다른 통계적 일을하는 것은 괜찮습니다'). 실제 질문은 '어떻게 잘못 될 수 있는가?'입니다. ... 적합 테스트의 장점은 그 질문에 큰 도움이되지 않습니다. 종종이 질문에 대한 답은 표본 크기와 독립적 (거의 독립적) 인 것입니다 .— 경우에 따라 표본 크기와 관계가없는 결과가있는 것입니다. 작은 표본 (가정 위반으로 인한 위험이 가장 큰 경우)

포아송 분포를 테스트해야하는 경우 몇 가지 합리적인 대안이 있습니다. 하나는 AD 통계를 기반으로하지만 널 (null) 하에서 모의 ​​분포를 사용하여 (이산 분포의 쌍둥이 문제를 설명하고 모수를 추정해야 함) Anderson-Darling 검정과 유사한 것을 수행하는 것입니다.

보다 간단한 대안은 적합도에 대한 순조로운 검정 일 수 있습니다. 이는 null의 확률 함수와 관련하여 직교하는 다항식 계열을 사용하여 데이터를 모델링하여 개별 분포를 위해 설계된 검정 모음입니다. 낮은 차수 (즉, 흥미로운) 대안은 기저 하나 이상의 다항식 계수가 0과 다른지 여부를 테스트하여 테스트하며, 일반적으로 테스트에서 최하위 항을 생략하여 모수 추정을 처리 할 수 ​​있습니다. 푸 아송에 대한 그러한 테스트가 있습니다. 필요한 경우 참조를 파낼 수 있습니다.

또한 포아송 니스 (Poissonness) 플롯 (예 : 플롯)에서 상관 관계를 사용하거나 샤피로-프랑 시아 테스트와 비슷할 수도 있습니다 예 : ) vs (1980 년 Hoaglin 참조)-테스트 통계.log ( x k ) + log ( k ! ) k(1아르 자형2)로그(엑스케이)+로그(케이!)케이

다음은 R에서 수행 된 계산 및 플롯의 예입니다.

y=rpois(100,5)
n=length(y)
(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

k=as.numeric(names(x))
plot(k,log(x)+lfactorial(k))

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

다음은 포아송에 대한 적합도 검정에 사용할 수있는 통계입니다.

n*(1-cor(k,log(x)+lfactorial(k))^2)
[1] 1.0599

물론 p- 값을 계산하려면 null 아래에서 테스트 통계 분포를 시뮬레이트해야합니다 (그리고 값 범위 내에서 0 카운트를 처리하는 방법에 대해서는 논의하지 않았습니다). 이것은 상당히 강력한 테스트를 제공해야합니다. 다른 많은 대체 테스트가 있습니다.

다음은 기하 분포 (p = .3)에서 크기가 50 인 표본에 포아송 니스 플롯을 수행하는 예입니다.

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

보시다시피, 그것은 비선형 성을 나타내는 명확한 'kink'를 표시합니다


포아송 니스 플롯에 대한 참조는 다음과 같습니다.

David C. Hoaglin (1980),
" 포아송 니스 플롯",
미국 통계청
Vol. 34, No. 3 (Aug.,), 146-149 페이지

Hoaglin, D. and J. Tukey (1985),
"9. 불연속 분포의 형태 확인",
데이터 테이블, 추세 및 형태 탐색 ,
(Hoaglin, Mosteller & Tukey eds)
John Wiley & Sons

두 번째 참조는 적은 수의 플롯에 대한 조정을 포함합니다. 당신은 아마 그것을 통합하고 싶을 것입니다 (그러나 나는 손에 대한 언급이 없습니다).


카이-제곱 적합도 검정의 예 :

카이-제곱 적합도를 수행하는 것 외에도 일반적으로 많은 클래스에서 수행 될 것으로 예상되는 방식 (내가하는 방식은 아니지만) :

1 : 귀하의 데이터로 시작합니다 (위의 'y'에서 무작위로 생성 된 데이터가됩니다). 카운트 테이블을 생성하십시오.

(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

2 : ML에 의해 구성된 포아송을 가정하면 각 셀의 예상 값을 계산합니다.

 (expec=dpois(0:10,lambda=mean(y))*length(y))
 [1]  0.7907054  3.8270142  9.2613743 14.9416838 18.0794374 17.5008954 14.1173890  9.7611661
 [9]  5.9055055  3.1758496  1.5371112

3 : 최종 범주가 작다는 점에 유의하십시오. 이렇게하면 카이 제곱 분포가 검정 통계량 분포에 대한 근사치보다 덜 적합합니다 (일반적으로 규칙은 불필요하게 제한적인 것으로 나타 났지만 많은 논문에서 예상 값을 5 이상으로 원합니다). 근접하지만 일반적인 접근 방식은 더 엄격한 규칙에 따라 조정될 수 있습니다. 최소 예상 값이 5보다 크게 떨어지지 않도록 인접 범주를 축소합니다 (예상 10 개가 넘는 범주 중 1 개 근처에서 카운트 다운이 예상되는 범주 하나는 나쁘지 않고 두 개는 경계 선임). 또한 "10"이상의 확률을 아직 설명하지 않았으므로 다음 사항도 통합해야합니다.

expec[1]=sum(expec[1:2])
expec[2:8]=expec[3:9]
expec[9]=length(y)-sum(expec[1:8])
expec=expec[1:9]
expec
sum(expec) # now adds to n

4 : 유사하게 관찰 된 범주를 축소합니다.

(obs=table(y))
obs[1]=sum(obs[1:2])
obs[2:8]=obs[3:9]
obs[9]=sum(obs[10:11])
obs=obs[1:9]

5 : chi-square 및 Pearson 잔존 (기여의 부호있는 제곱근)에 대한 기여 와 함께 (선택적) 테이블에 넣습니다 . 잘 맞지 않습니다 :(영형나는이자형나는)2/이자형나는

print(cbind(obs,expec,PearsonRes=(obs-expec)/sqrt(expec),ContribToChisq=(obs-expec)^2/expec),d=4)
  obs  expec PearsonRes ContribToChisq
0   3  4.618   -0.75282      0.5667335
1   7  9.261   -0.74308      0.5521657
2  15 14.942    0.01509      0.0002276
3  19 18.079    0.21650      0.0468729
4  25 17.501    1.79258      3.2133538
5  14 14.117   -0.03124      0.0009761
6   7  9.761   -0.88377      0.7810581
7   5  5.906   -0.37262      0.1388434
8   5  5.815   -0.33791      0.1141816

6 : 계산 된 , 관측 된 총계와 일치하는 것으로 예상되는 총계에 대해 1df가 손실되고 모수를 추정하기 위해 1 개가 더 손실됩니다.엑스2=나는(이자형나는영형나는)2/이자형나는

(chisq = sum((obs-expec)^2/expec))
[1] 5.414413
(df = length(obs)-1-1) # lose an additional df for parameter estimate
[1] 7
(pvalue=pchisq(chisq,df))
[1] 0.3904736

우리가 생성 한 데이터가 실제로 포아송 (Poisson) 이었기 때문에 진단과 p- 값은 여기에 적합하지 않다는 것을 보여줍니다.


편집 : 여기에는 Poissonness 플롯을 설명하고 SAS 및 Matlab의 구현에 대해 이야기하는 Rick Wicklin의 블로그 링크가 있습니다.

http://blogs.sas.com/content/iml/2012/04/12/the-poissonness-plot-a-goodness-of-fit-diagnostic/


편집 2 : 내가 옳다면 1985 참조의 수정 된 포아송 니스 플롯은 *입니다.

y=rpois(100,5)
n=length(y)
(x=table(y))
k=as.numeric(names(x))
x=as.vector(x)
x1 = ifelse(x==0,NA,ifelse(x>1,x-.8*x/n-.67,exp(-1)))
plot(k,log(x1)+lfactorial(k))

* 그들은 실제로 절편도 조정하지만 여기서는하지 않았습니다. 플롯의 모양에는 영향을 미치지 않지만 참조와 다른 방식으로 접근하는 경우 참조 (예 : 신뢰 구간)를 구현하는 경우주의해야합니다.

위의 예에서는 첫 번째 포아송 니스 플롯에서 모양이 거의 변하지 않습니다.


2
답장을 보내 주셔서 감사합니다! 그러나 나는 당신이 말하는 주제를 모른다고 말해야합니다. QQplot이 이것에 대해 소수가 될지 궁금합니다. 어떻게 생각해? 당신이 제공하는 대안 중에서 내가 사용해야한다고 생각합니까? 선한 적합? 내가 말하고있는 정보 및 / 또는 테스트를 어디서 찾을 수 있습니까? (신의 적합성에 대한 부드러운 테스트) 또한 누군가 블로그 코드에 대한 R 코드가 있는지 알고 있습니까? (나는 Matlab 또는 SAS를 모른다). 그리고 많은 답변 감사합니다!
보안관

또한 내 데이터가 "적합"할 수 있다고 생각되는 분포는 무엇입니까? (내 숙제의 일부는 아니지만 알아두면 좋을 것입니다.)
보안관

매개 변수를 가정하지 않고 포아송에 대한 QQplot을 어떻게 생성합니까? (매개 변수가 너무 작지 않으면 Poisson 변환으로 작업 할 수 있다고 가정합니다. 또는 알 수없는 매개 변수에 MLE을 사용할 수 있지만 플롯은 그렇지 않은 경우보다 "더 나은"것처럼 보이는 경향이 있습니다. 그렇게 할 때 판단). 포아송 니스 (Poissonness) 플롯은 QQplot과 같은 역할을하도록 설계되었으며 다소 유사하게 해석됩니다. 진단 평가를 원한다면 플롯을 제안하는 것이 좋습니다 (우리 중 어느 쪽이든 찾을 수 있다면 언급 한 조정이 바람직합니다).
Glen_b-복귀 모니카

내가 보지 못한 분포 데이터를 알 수는 없지만 많은 데이터가 없으면 많은 분포가 그럴듯하게 데이터를 생성했을 수 있습니다.
Glen_b-복귀 모니카

글쎄, 아마도 QQlot의 데이터에 대해 관찰 된 값의 추정 된 람다를 사용할 수는 있지만 조금 읽고 QQplots가 연속 데이터에 더 나은 것처럼 보입니다 (이산 데이터에는 좋지 않습니다). 코드를 번역 할 수 있습니까? 정말 감사하겠습니다! 코드가 있으면 알려주세요! (물론 코드에 대한 크레딧을 줄 것입니다 :))
보안관

5

카이 제곱 적합도 검정을 수행하십시오. 카운트 데이터의 경우 goodfit()vcd 패키지에 포함하여 사용할 수 있습니다 . p 값이 0.05보다 크면 h0를 기각 할 수 없습니다. 프로세스는 포아송 프로세스입니다. 그렇지 않으면 포아송 프로세스가 아닙니다.

# load the vcd package
library(vcd) ## loading vcd package

# generate two processes for test
set.seed(2014);y=rpois(200,5)
set.seed(2014);y=rnorm(100, 5, 0.3) # goodfit asks for non-negative values
# output the results
gf = goodfit(y,type= "poisson",method= "ML")
plot(gf,main="Count data vs Poisson distribution")
summary(gf)

# to automatically get the pvalue
gf.summary = capture.output(summary(gf))[[5]]
pvalue = unlist(strsplit(gf.summary, split = " "))
pvalue = as.numeric(pvalue[length(pvalue)]); pvalue

# to mannualy compute the pvalue
chisq = sum(  (gf$observed-gf$fitted)^2/gf$fitted )

df = length(gf$observed)-1-1
pvalue = pchisq(chisq,df)
pvalue

3
pchisq(엑스엑스)(엑스엑스)pvalue=1-pchisq(chisq,df)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.