R kullanarak Poisson sürecini nasıl tahmin edebilirim? (Veya: NHPoisson paketi nasıl kullanılır?)


15

Olaylar veritabanı (yani tarihlerin bir değişkeni) ve ilişkili ortak değişkenler var.

Olaylar, durağan olmayan Poisson işlemi tarafından üretilir ve parametre bazı ortak değişkenlerin bilinmeyen (ancak muhtemelen doğrusal) bir işlevidir.

Bence NHPoisson paketi sadece bu amaç için var; ancak 15 saatlik başarısız araştırmadan sonra hala nasıl kullanılacağını öğrenemiyorum.

Heck, her iki referans kitabını bile okumayı denedim: Coles, S. (2001). Aşırı değerlerin istatistiksel modellemesine giriş. Springer. Casella, G. ve Berger, RL, (2002). İstatiksel sonuç. Brooks / Cole.

FitPP.fun dokümantasyonundaki tek örnek, kurulumuma uymuyor gibi görünüyor; Aşırı değerlerim yok! Sadece çıplak olaylarım var.

Herkes bana tek bir değişken ile parametresi ve varsayımla bir Poisson süreci takma basit bir örnek ve ? ve tahminleriyle ilgileniyorum . Olayların zamanları olan iki sütunlu bir veri seti (diyelim ki, keyfi bir zaman t 0'dan sonra saniye cinsinden ölçülür ) ve eşdeğeri X değerlerine sahip başka bir sütun mu sağlıyorum?λλ = λ 0 + α X λ 0 αXλ=λ0+αXλ0αt0X


İlgilenenler için, kullanılabilirliği artırmak için bu kütüphanenin yeniden yazılması üzerinde çalışıyorum. github.com/statwonk/NHPoisson
Statwonk

Yanıtlar:


15

Sabit bir Poisson sürecinin takılması

Her şeyden önce, NHPoisson'un ne tür girdi verilerinin ihtiyaç duyduğunu anlamak önemlidir.

En önemlisi, NHPoisson olay anlarının endekslerine ihtiyaç duymaktadır . Eğer zaman aralığını ve zaman aralığındaki olay sayısını kaydedersek, I'den daha sonra tek bir tarih sütununa çevirmeliyiz, muhtemelen tarihlerin kaydedildikleri aralığın üzerine "bulaşması" gerekir.

Basit olması için saniyeler içinde ölçülen zamanı kullandığımızı ve "ikinci" nin doğal birimi olduğunu varsayacağım .λ

Dakikada olayı olan basit, sabit bir Poisson işlemi için verileri simüle edelim :λ=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.funSimülasyonu yapar. Simüle edilmiş olay ateşleme anları endekslerineaux$posNH sahip bir değişken almak için kullanırız . `` Length (aux $ posNH) 'yi kontrol ederek kabaca 60 * 24 = 1440 olayın olduğunu görebiliriz.

λ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

Aslında yaptığımız şey , Poisson sürecini tanecikli binom olayları dizisiyle yaklaşık olarak tahmin etmemizdir, her olay, Poisson dağılımının yasadaki binom dağılımının bir limiti olarak görülebileceği mekanizmaya benzer şekilde tam olarak bir birim süreyi kapsar. nadir olayların .

Bir kez anladık, gerisi çok daha basit (en azından benim için).

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

Durağan olmayan bir Poisson sürecinin takılması

NHPoisson aşağıdaki modele uyar:

λ=exp(PTβ)

Pλ

Şimdi durağan olmayan Poisson sürecini hazırlayalım.

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)

Daha önce olduğu gibi, aux$posNHbize olayların endekslerini veririz, ancak bu sefer olayların yoğunluğunun zamanla katlanarak azaldığını fark edeceğiz. Ve bu azalmanın oranı tahmin etmek istediğimiz bir parametredir.

out<-fitPP.fun(tind=TRUE,covariates=cbind(all.seconds),
        posE=aux$posNH,
        start=list(b0=0,b1=0),modSim=TRUE)

all.secondsUnutmamak gerekir ki , bir değişken olarak koymalıyız , değil lambdas. Üstelleştirme / logaritizasyon, tarafından dahili olarak yapılır fitPP.fun. BTW, öngörülen değerlerin dışında, işlev varsayılan olarak iki grafik oluşturur.

Son parça model doğrulaması için swiss-knife fonksiyonudur globalval.fun.

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

Diğer şeylerin yanı sıra, işlev zamanı her lintnumune uzunluğunda aralıklara ayırır , bu nedenle tahmin edilen yoğunluğu gözlemlenen yoğunluk ile karşılaştıran ham grafikler oluşturmak mümkündür.


Harika açıklamalar Adam, çok teşekkür ederim. İki grup birey ve grup başına bir yoğunluk içeren bir modele uyamayacağımıza inanıyorum, değil mi?
Stéphane Laurent

@ StéphaneLaurent Grup üyeliğini ortak değişken olarak modelleyebilir ve - evet, ortak değişkenler ekleyebilirsiniz. Bir grup için farklı etkinlik yoğunluğu, diğeri için farklı etkinlik yoğunluğu olabilir. Yine de böyle bir şey yapmadım.
Adam Ryczkowski

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

Adam, belki kafam karışmıştı. Şimdi sorun yok izlenimi altındayım. İhtiyaç halinde daha sonra tekrar geleceğim. İlginiz için çok teşekkür ederim.
Stéphane Laurent

posNH,n=time.span,beta=0)ErrorinfitPP.fun(posE=auxposNH, n = time.span, beta = 0): "start" bağımsız değişkeni eksik, varsayılan yok
vak

0

"Out" içine kaydedilen bilgilere erişmek için şimdi "@" kullanmalısınız, örneğin katsayılara "out @ coef" kullanılarak erişilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.