Montaggio di un processo fisso di Poisson
Innanzitutto è importante capire quale tipo di dati di input necessita di NHPoisson.
Innanzitutto, NHPoisson ha bisogno di un elenco di indici dei momenti dell'evento. Se registriamo l'intervallo di tempo e il numero di eventi nell'intervallo di tempo, allora io dobbiamo tradurlo in una singola colonna di date, possibilmente "imbrattando" le date nell'intervallo in cui sono registrate.
Per semplicità supporrò che usiamo il tempo misurato in secondi e che il "secondo" sia l'unità naturale di .λ
Simuliamo i dati per un semplice processo fisso di Poisson, che ha eventi al 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))
Il simNHP.fun
rende la simulazione. Usiamo per ottenere aux$posNH
, una variabile con indici di momenti di eventi simulati. Possiamo vedere che abbiamo approssimativamente 60 * 24 = 1440 eventi, controllando `lunghezza (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
Quindi, ciò che facciamo è che approssimiamo il processo di Poisson con una sequenza granulare di eventi binomiali, ogni evento copre esattamente un'unità di tempo, in analogia al meccanismo in cui la distribuzione di Poisson può essere vista come un limite di distribuzione binomiale nella legge di eventi rari .
Una volta capito, il resto è molto più semplice (almeno per me).
λbeta
exp(coef(out)[1])
NHPoisson
λλ
Applicazione di un processo di Poisson non stazionario
NHPoisson
si adatta al seguente modello:
λ = exp( P⃗ T⋅ β⃗ )
P⃗ λ
Ora prepariamo il processo di Poisson non stazionario.
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)
Proprio come prima, aux$posNH
ci darebbe indici di eventi, ma questa volta noteremo che l'intensità degli eventi diminuisce esponenzialmente con il tempo. E il tasso di questa diminuzione è un parametro che vogliamo stimare.
out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
posE=aux$posNH,
start=list(b0=0,b1=0),modSim=TRUE)
È importante notare che non dobbiamo metterlo all.seconds
come una covariata lambdas
. L'esponenziazione / logaritmizzazione viene eseguita internamente dal fitPP.fun
. A proposito, a parte i valori previsti, la funzione crea due grafici per impostazione predefinita.
L'ultimo pezzo è una funzione swiss-knife per la validazione del modello, globalval.fun
.
aux<-globalval.fun(obFPP=out,lint=2000,
covariates=cbind(all.seconds),typeI='Disjoint',
typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)
Tra le altre cose, la funzione divide il tempo in intervalli, ciascuno dei quali è lint
lungo, quindi è possibile creare grafici grezzi che confrontano l'intensità prevista con l'intensità osservata.