Ajuste de un proceso estacionario de Poisson
En primer lugar, es importante darse cuenta de qué tipo de datos de entrada necesita NHPoisson.
Ante todo, NHPoisson necesita una lista de índices de momentos de eventos. Si registramos el intervalo de tiempo y el número de eventos en el intervalo de tiempo, entonces debemos traducirlo en una sola columna de fechas, posiblemente "difuminando" las fechas durante el intervalo en el que se registran.
Por simplicidad, supondré que usamos el tiempo medido en segundos y que el "segundo" es la unidad natural de .λ
Simulemos datos para un proceso de Poisson simple y estacionario, que tiene eventos por minuto:λ = 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))
El simNHP.funhace la simulación. Usamos para obtener aux$posNH, una variable con índices de momentos de disparo de eventos simulados. Podemos ver que aproximadamente tenemos 60 * 24 = 1440 eventos, marcando `length (aux $ posNH).
λ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
Entonces, de hecho, lo que hacemos es aproximar el proceso de Poisson con una secuencia granular de eventos binomiales, cada evento abarca exactamente una unidad de tiempo, en analogía con el mecanismo en el que la distribución de Poisson puede verse como un límite de distribución binomial en la ley de eventos raros .
Una vez que lo entendemos, el resto es mucho más simple (al menos para mí).
λbetaexp(coef(out)[1])NHPoissonλλ
Ajuste de un proceso de Poisson no estacionario
NHPoisson Se adapta al siguiente modelo:
λ = exp( P⃗ T⋅ β⃗ )
PAG⃗ λ
Ahora preparemos el proceso de Poisson no estacionario.
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)
Al igual que antes, aux$posNHnos daría índices de eventos, pero esta vez notaremos que la intensidad de los eventos disminuye exponencialmente con el tiempo. Y la tasa de esta disminución es un parámetro que queremos estimar.
out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
posE=aux$posNH,
start=list(b0=0,b1=0),modSim=TRUE)
Es importante tener en cuenta que debemos ponerlo all.secondscomo una covariable, no lambdas. La exponenciación / logaritmización se realiza internamente por el fitPP.fun. Por cierto, aparte de los valores pronosticados, la función crea dos gráficos por defecto.
La última pieza es una función navaja suiza para la validación del modelo globalval.fun.
aux<-globalval.fun(obFPP=out,lint=2000,
covariates=cbind(all.seconds),typeI='Disjoint',
typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)
Entre otras cosas, la función divide el tiempo en intervalos, cada lintmuestra es larga, por lo que es posible crear gráficos brutos que comparan la intensidad predicha con la intensidad observada.