Встановлення стаціонарного процесу Пуассона
Перш за все важливо усвідомити, який тип вхідних даних потрібен 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
змінну з показниками моментів імітації стрільби подій. Ми бачимо, що приблизно у нас є 60 * 24 = 1440 подій, перевіривши `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
Тож, що ми робимо насправді, це те, що ми наближаємо процес Пуассона гранульованою послідовністю біноміальних подій, кожна подія охоплює рівно одну одиницю часу, аналогічно механізму, в якому розподіл Пуассона в законі може розглядатися як межа біноміального розподілу рідкісних подій .
Як тільки ми це зрозуміємо, решта набагато простіше (принаймні, для мене).
λbeta
exp(coef(out)[1])
NHPoisson
λλ
Встановлення нестаціонарного процесу Пуассона
NHPoisson
відповідає такій моделі:
λ = досвід( С⃗ Т⋅ β⃗ )
П⃗ λ
Тепер давайте підготуємо нестаціонарний процес Пуассона.
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
вибірки довгий, тому можна створити неочищені графіки, які порівнюють прогнозовану інтенсивність із спостережуваною інтенсивністю.