Dopasowanie stacjonarnego procesu Poissona
Przede wszystkim należy zdać sobie sprawę, jakiego rodzaju danych wejściowych potrzebuje NHPoisson.
Przede wszystkim NHPoisson potrzebuje listy wskaźników momentów zdarzeń. Jeśli rejestrujemy przedział czasowy i liczbę zdarzeń w danym przedziale czasowym, wówczas musimy go przetłumaczyć na pojedynczą kolumnę dat, prawdopodobnie „rozmazując” daty w przedziale, w którym są rejestrowane.
λ
λ = 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))
To simNHP.fun
sprawia, że symulacja. Używamy get aux$posNH
, zmiennej ze wskaźnikami momentów symulowanego odpalenia zdarzenia. Widzimy, że z grubsza mamy 60 * 24 = 1440 zdarzeń, sprawdzając `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
Więc co robimy w rzeczywistości jest to, że możemy w przybliżeniu proces Poissona z granulowanym sekwencji dwumiennych zdarzeń, każdy przęsła zdarzeń dokładnie jedna jednostka czasu, w sposób analogiczny do mechanizmu, w którym rozkład Poissona może być postrzegane jako ograniczenie rozkładu dwumianowego w prawo rzadkich wydarzeń .
Kiedy to zrozumiemy, reszta jest znacznie prostsza (przynajmniej dla mnie).
λbeta
exp(coef(out)[1])
NHPoisson
λλ
Dopasowanie niestacjonarnego procesu Poissona
NHPoisson
pasuje do następującego modelu:
λ = exp( P⃗ T.⋅ β⃗ )
P.⃗ λ
Teraz przygotujmy niestacjonarny proces Poissona.
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)
Tak jak poprzednio, aux$posNH
dałby nam wskaźniki zdarzeń, ale tym razem zauważymy, że intensywność wydarzeń maleje wykładniczo z czasem. Szybkość tego zmniejszania się jest parametrem, który chcemy oszacować.
out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
posE=aux$posNH,
start=list(b0=0,b1=0),modSim=TRUE)
Ważne jest, aby pamiętać, że musimy all.seconds
podawać jako zmienną towarzyszącą, a nie lambdas
. Potęgowanie / logarytmizacja odbywa się wewnętrznie przez fitPP.fun
. BTW, oprócz przewidywanych wartości, funkcja domyślnie tworzy dwa wykresy.
Ostatni kawałek jest funkcją szwajcarski nóż do walidacji modelu globalval.fun
.
aux<-globalval.fun(obFPP=out,lint=2000,
covariates=cbind(all.seconds),typeI='Disjoint',
typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)
Między innymi funkcja dzieli czas na przedziały, każda lint
próbka jest długa, więc możliwe jest tworzenie surowych wykresów, które porównują przewidywane natężenie z obserwowanym natężeniem.