拟合固定泊松过程
首先,重要的是要了解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
使得模拟。我们使用get aux$posNH
,该变量具有模拟事件触发时刻的索引。通过检查`length(aux $ posNH)可以看到大约有60 * 24 = 1440个事件。
现在让我们对进行反向工程:λ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
符合以下模型:
λ=exp(P⃗ T⋅β⃗ )
P⃗ λ
现在,让我们准备非平稳的泊松过程。
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
。顺便说一句,除预测值外,该功能默认情况下还会制作两个图表。
最后一部分是用于模型验证的瑞士刀函数globalval.fun
。
aux<-globalval.fun(obFPP=out,lint=2000,
covariates=cbind(all.seconds),typeI='Disjoint',
typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)
除其他功能外,该函数将时间分为多个间隔,每个lint
采样间隔很长,因此可以创建将预测强度与观察到的强度进行比较的粗略图形。