Anpassen eines stationären Poisson-Prozesses
Zuallererst ist es wichtig zu erkennen, welche Art von Eingabedaten NHPoisson benötigt.
Zuallererst benötigt NHPoisson eine Liste von Indizes von Ereignismomenten. Wenn wir das Zeitintervall und die Anzahl der Ereignisse in dem Zeitintervall aufzeichnen, müssen wir es in eine einzelne Datenspalte übersetzen und möglicherweise die Daten über das Intervall "verwischen", in dem sie aufgezeichnet wurden.
Der Einfachheit halber gehe ich davon aus, dass wir die in Sekunden gemessene Zeit verwenden und dass die "Sekunde" die natürliche Einheit von .λ
Simulieren wir Daten für einen einfachen, stationären Poisson-Prozess mit Ereignissen pro Minute:λ = 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))
Das simNHP.fun
macht die Simulation. Wir verwenden, um aux$posNH
eine Variable mit Indizes von Momenten des simulierten Ereignisauslösens zu erhalten. Wir können sehen, dass wir ungefähr 60 * 24 = 1440 Ereignisse haben, indem wir die Länge (aux $ posNH) überprüfen.
Lassen Sie uns nun das mit :λ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
Was wir also in der Tat tun, ist, dass wir den Poisson-Prozess mit einer granularen Folge von Binomialereignissen approximieren , wobei jedes Ereignis genau eine Zeiteinheit umfasst, in Analogie zu dem Mechanismus, bei dem die Poisson-Verteilung als Grenze der Binomialverteilung im Gesetz angesehen werden kann seltener Ereignisse .
Sobald wir es verstanden haben, ist der Rest viel einfacher (zumindest für mich).
λbeta
exp(coef(out)[1])
NHPoisson
λλ
Anpassen eines instationären Poisson-Prozesses
NHPoisson
passt für folgendes Modell:
λ = exp( S.⃗ T⋅ β⃗ )
P⃗ λ
Nun bereiten wir einen instationären Poisson-Prozess vor.
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)
Wie zuvor aux$posNH
würden wir Indizes von Ereignissen erhalten, aber dieses Mal werden wir feststellen, dass die Intensität der Ereignisse mit der Zeit exponentiell abnimmt. Und die Rate dieser Abnahme ist ein Parameter, den wir schätzen möchten.
out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
posE=aux$posNH,
start=list(b0=0,b1=0),modSim=TRUE)
Es ist wichtig anzumerken, dass wir all.seconds
als Kovariate setzen müssen, nicht lambdas
. Die Exponentiation / Logaritmisierung erfolgt intern durch die fitPP.fun
. Übrigens, abgesehen von den vorhergesagten Werten, erstellt die Funktion standardmäßig zwei Diagramme.
Das letzte Stück ist eine Schweizer Messerfunktion zur Modellvalidierung globalval.fun
.
aux<-globalval.fun(obFPP=out,lint=2000,
covariates=cbind(all.seconds),typeI='Disjoint',
typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)
Unter anderem unterteilt die Funktion die Zeit in Intervalle, die jeweils lint
lang sind, sodass grobe Diagramme erstellt werden können, die die vorhergesagte Intensität mit der beobachteten Intensität vergleichen.