R을 사용하여 포아송 프로세스를 추정하는 방법? (또는 : NHPoisson 패키지를 사용하는 방법?)


15

이벤트 데이터베이스 (예 : 날짜 변수) 및 관련 공변량이 있습니다.

이벤트는 고정되지 않은 포아송 프로세스에 의해 생성되며, 일부 공변량의 매개 변수는 알려지지 않은 (아마도 선형적인) 함수입니다.

NHPoisson 패키지는이 목적으로 만 존재한다고 생각합니다. 그러나 15 시간 동안 연구에 실패한 후에도 여전히 그 사용법을 알 수있는 곳은 없습니다.

도대체, 나는 참고 문헌 인 Coles, S. (2001)도 읽었습니다. 극단적 인 값의 통계 모델링에 대한 소개. 봄 병아리. Casella, G. and Berger, RL, (2002). 통계적 추론. 브룩스 / 콜.

fitPP.fun 문서의 단일 예제가 내 설정에 맞지 않는 것 같습니다. 나는 극단적 인 가치가 없다! 나는 방금 이벤트가 있습니다.

사람이 매개 변수와 포아송 과정 피팅의 간단한 예와 함께 도움이 저를 기쁘게 할 수 λ 하나의 공변량의와 X 및 가정, 즉 λ=λ0+αX ? λ0 추정에 관심이 α있습니다. 이벤트 시간 (임의의 시간 후 초 단위로 측정 t0)과 공변량 값이있는 다른 열로 구성된 2 열 데이터 세트를 제공합니다 X.


관심있는 사람들을 위해 유용성을 향상시키기 위해이 라이브러리를 다시 작성하고 있습니다. github.com/statwonk/NHPoisson
Statwonk

답변:


15

고정식 포아송 프로세스 피팅

우선 NHPoisson에 필요한 입력 데이터의 종류를 알아야합니다.

무엇보다도 NHPoisson 은 이벤트 순간 의 인덱스 목록이 필요합니다 . 시간 간격과 시간 간격에서 이벤트 수를 기록하는 경우,이를 시간보다 하나의 날짜 열로 변환해야합니다 (아마도 기록 된 간격에 걸쳐 날짜가 "흐름").

간단하게하기 위해, 우리는 초 단위로 측정 된 시간을 사용하고 "초"는 자연 단위 합니다.λ

분당 이벤트 가있는 간단한 고정식 포아송 프로세스에 대한 데이터를 시뮬레이션 해 보겠습니다 .λ=1

lambda=1/60 #1 event per minute
time.span=60*60*24 #24 hours, with time granularity one second

aux<-simNHP.fun(rep(lambda,time.span))

simNHP.fun시뮬레이션을한다. 우리는 얻을 사용 aux$posNH하여, 변수를 인덱스 시뮬레이션 이벤트 발사의 순간. `length (aux $ posNH)를 확인하면 대략 60 * 24 = 1440 개의 이벤트가 있음을 알 수 있습니다.

이제 다음을 사용하여 를 리버스 엔지니어링하십시오 .λfitPP.fun

out<-fitPP.fun(posE=aux$posNH,n=time.span,start=list(b0=0)) # b0=0 is our guess at initial value for optimization, which is internally made with `nlminb` function

이 함수는 이벤트 인덱스 만 가져 오기 때문에 가능한 인덱스 수를 측정해야합니다. 그리고 이것은 매우 혼란 부분입니다 진정한 포아송 과정에서이 가질 수 있기 때문에, 가능한 이벤트의 무한 수 (있는 경우에만 ). 그러나 우리 의 관점에서 우리는 작은 시간 단위를 선택해야합니다. 시간 단위당 최대 하나의 이벤트를 가정 할 수 있도록 너무 작게 선택합니다.λ>0fitPP

우리가 실제로하는 일은 우리가 있다는 것입니다 그래서 대략 이항 이벤트의 세부 순서와 포아송 과정, 포아송 분포의 이항 분포의 제한으로 볼 수있는 메커니즘과 유사하게 각 이벤트 스팬 시간을 정확히 하나 개의 단위 법 드문 사건 .

우리가 이해하면 나머지는 훨씬 더 간단합니다 (적어도 나를 위해).

λ 의 근사값을 구하려면λ 저를 장착 매개 변수의 지수를 취할 필요를 beta, exp(coef(out)[1]). 그리고 여기 설명서에없는 정보의 또 다른 중요한 부분, 제공 에 : NHPoisson우리는에 맞는 대수 하지, λ 자체가.λλ

고정식 포아송 공정 적합

NHPoisson 다음 모델에 적합합니다.

λ=exp(PTβ)

즉 , λ로그 에 매개 변수 (공변량이라고 함) 의 선형 조합을 맞 춥니 다 .Pλ

이제 고정식 포아송 프로세스를 준비하겠습니다.

time.span=60*60*24 #24 hours, with time granularity one second
all.seconds<-seq(1,time.span,length.out=time.span)
lambdas=0.05*exp(-0.0001*all.seconds) #we can't model a linear regression with NHPoisson. It must have the form with exp.
aux<-simNHP.fun(lambdas)

이전과 마찬가지로 aux$posNH사건의 지표를 알려 주겠지 만 이번에는 사건의 강도가 시간에 따라 기하 급수적으로 감소한다는 것을 알 수 있습니다. 이 감소율은 우리가 추정하고자하는 매개 변수입니다.

out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
        posE=aux$posNH,
        start=list(b0=0,b1=0),modSim=TRUE)

우리가 all.seconds아닌 공변량 으로 넣어야한다는 점에 유의하는 것이 중요합니다 lambdas. 지수화 / 대 수화는 내부적으로에 의해 수행됩니다 fitPP.fun. BTW는 예측 된 값 외에 기본적으로 두 개의 그래프를 만듭니다.

마지막 조각은 모델 검증을위한 스위스 나이프 함수입니다 globalval.fun.

aux<-globalval.fun(obFPP=out,lint=2000,
        covariates=cbind(all.seconds),typeI='Disjoint',
        typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)

무엇보다도이 함수는 시간을 간격으로 나누고 각 lint샘플은 길기 때문에 예측 된 강도와 관측 된 강도를 비교하는 조잡한 그래프를 만들 수 있습니다.


훌륭한 설명 아담, 대단히 감사합니다. 나는 두 그룹의 개인과 그룹 당 하나의 강도를 가진 모델에 적합하지 않다는 인상을 받고 있습니다. 맞습니까?
Stéphane Laurent

@ StéphaneLaurent 그룹 구성원을 공변량으로 모델링 할 수 있으며-예, 공변량을 추가 할 수 있습니다. 한 그룹에는 다른 이벤트 강도가 있고 다른 그룹에는 다른 이벤트 강도가있을 수 있습니다. 그래도 그런 일은 한 적이 없습니다.
Adam Ryczkowski

λi(t)=exp(ai+bt)bi

아담, 아마 혼란 스러웠을 것입니다. 이제 나는 아무런 문제가 없다는 인상을 받고 있습니다. 필요한 경우 나중에 다시 올게요. 관심을 가져 주셔서 대단히 감사합니다.
Stéphane Laurent

posNH,n=time.span,beta=0)ErrorinfitPP.fun(posE=auxposNH, N = time.span, 베타 = 0) : 인수가 "시작은"기본값은 없습니다 누락
vak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.