Rを使用してポアソン過程を推定する方法は?(または:NHPoissonパッケージの使用方法?)


15

イベントのデータベース(日付の変数)と関連する共変量があります。

イベントは、パラメータがいくつかの共変量の未知の(ただし線形の可能性がある)関数である非定常ポアソンプロセスによって生成されます。

NHPoissonパッケージはこの目的のためだけに存在すると思います。しかし、15時間の失敗した研究の後、私はまだそれを使用する方法を知ることに近づいていません。

ヘック、私は両方の参考書を読んでみました:Coles、S.(2001)。極値の統計モデリングの紹介。スプリンガー。Casella、G. and Berger、RL、(2002)。統計的推論。ブルックス/コール。

fitPP.funのドキュメントにある1つの例は、私の設定に合わないようです。私には極端な価値はありません!むき出しのイベントがあります。

誰もが、パラメータを持つポアソン過程フィッティングの簡単な例で助けを私にしてくださいすることができ単一の共変量を持つX、および仮定を、そのλ = λ 0 + α X?私はの推定に興味λ 0α。イベントの時間(たとえば、任意の時間t 0の後の秒単位で測定)を含む2列のデータセットと、共変量Xの値を含む別の列を提供します。λXλ=λ0+αXλ0αt0X


興味のある人のために、私はこのライブラリの書き直しに取り組んでおり、使いやすさを改善しています。github.com/statwonk/NHPoisson
Statwonk

回答:


15

定常ポアソンプロセスの近似

まず、NHPoissonが必要とする入力データの種類を理解することが重要です。

何よりも、NHPoissonにはイベントモーメントのインデックスのリストが必要です。時間間隔と時間間隔内のイベントの数を記録する場合、私はそれを日付の単一の列に変換する必要があり、それらが記録されている間隔にわたって日付を「塗りつぶす」可能性があります。

簡単にするために、秒単位の時間を使用し、「秒」は自然単位であると仮定します。λ

単純な定常ポアソンプロセスのデータをシミュレートしてみましょう。このプロセスは、1分間にイベントです。λ=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、シミュレートされたイベント発生の瞬間のインデックスを持つ変数を取得します。`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

したがって、実際に行うことは、ポアソン分布を法則の二項分布の限界と見なすことができるメカニズムに類似して、各イベントが正確に1単位の時間にわたる、二項イベントのきめ細かいシーケンスでポアソンプロセスを近似することですまれなイベントの

理解すれば、残りはずっと単純です(少なくとも私にとっては)。

λbetaexp(coef(out)[1])NHPoissonλλ

非定常ポアソンプロセスの近似

NHPoisson 次のモデルに適合します。

λ=exp(PTβ)

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ます。ところで、予測値とは別に、この関数はデフォルトで2つのグラフを作成します。

最後の部分は、モデル検証用のスイスナイフ関数ですglobalval.fun

aux<-globalval.fun(obFPP=out,lint=2000,
        covariates=cbind(all.seconds),typeI='Disjoint',
        typeRes='Raw',typeResLV='Raw',resqqplot=FALSE)

特に、この関数は時間を間隔に分割し、各lintサンプルは長いため、予測強度と観測強度を比較する粗いグラフを作成することができます。


アダム、すばらしい説明をありがとう。私は、個人の2つのグループとグループごとに1つの強度を持つモデルに適合できないという印象を受けています。
ステファンローラン14年

@StéphaneLaurentグループメンバーシップを共変量としてモデル化できます-はい、共変量を追加できます。あるグループでは異なるイベントの強度があり、別のグループでは異なることがあります。しかし、私はそのようなことをしたことがありません。
アダムリツコフスキ14年

λi(t)=exp(ai+bt)bi

アダム、多分私は混乱していた。今は問題ないという印象を受けています。必要に応じて後で戻ってきます。ご清聴ありがとうございました。
ステファンローラン14年

非常に良い答えです!btw、> out <-fitPP.fun(posE = auxposNHn=tmespanbeta=0ErrornftPPfあなたはnposE=aあなたはバツposNH、N = time.span、ベータ= 0): "スタート"引数なしデフォルトで、不足している
VAK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.