आर का उपयोग करके पॉइसन प्रक्रिया का अनुमान कैसे लगाएं? (या: NHPoisson पैकेज का उपयोग कैसे करें?)


15

मेरे पास घटनाओं का डेटाबेस (यानी तारीखों का एक चर) और संबद्ध कोवरिएट्स हैं।

गैर-स्थिर पॉइज़न प्रक्रिया द्वारा घटनाओं को उत्पन्न किया जाता है, जिसमें पैरामीटर कुछ कोवरिएट का अज्ञात (लेकिन संभवतः रैखिक) फ़ंक्शन होता है।

मुझे लगता है कि NHPoisson पैकेज सिर्फ इस उद्देश्य के लिए मौजूद है; लेकिन असफल अनुसंधान के 15 घंटे के बाद भी मैं अभी तक यह जानने के लिए पास नहीं हूं कि इसका उपयोग कैसे किया जाए।

हेक, मैंने भी संदर्भित पुस्तकों दोनों को पढ़ने की कोशिश की: कोल्स, एस (2001)। चरम मूल्यों के सांख्यिकीय मॉडलिंग के लिए एक परिचय। स्प्रिंगर। कैसला, जी और बर्जर, आरएल, (2002)। सांख्यिकीय अनुमान। ब्रूक्स / कोल।

FitPP.fun के प्रलेखन में एक एकल उदाहरण मेरे सेटअप के लायक नहीं लगता है; मेरे पास चरम मूल्य नहीं हैं! मेरे पास सिर्फ नंगे कार्यक्रम हैं।

किसी को भी पैरामीटर के साथ एक प्वासों प्रक्रिया फिटिंग का एक सरल उदाहरण के साथ मुझे मदद कृपया कर सकते एकल covariate साथ एक्स , और इस धारणा है कि λ = λ 0 + अल्फा एक्स ? मुझे λ 0 और α के अनुमान में दिलचस्पी है । मैं घटनाओं (मान लीजिए, कुछ मनमाने ढंग से समय के बाद सेकंड में मापा के समय के साथ एक दो-स्तंभ डेटा सेट प्रदान करते हैं टी 0 ) और covariate के मूल्यों के साथ एक और स्तंभ एक्स ?λएक्सλ=λ0+αएक्सλ0αटी0एक्स


रुचि रखने वालों के लिए, मैं प्रयोज्यता में सुधार के लिए इस पुस्तकालय के पुनर्लेखन पर काम कर रहा हूं। github.com/statwonk/NHPoisson
स्टेटवॉक

जवाबों:


15

एक स्थिर Poisson प्रक्रिया फिटिंग

सबसे पहले यह महसूस करना महत्वपूर्ण है कि 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, नकली घटना फायरिंग के क्षणों के सूचकांक के साथ एक चर । हम देख सकते हैं कि हमारे पास लगभग ६० * २४ = १४४० इवेंट हैं, aux लंबाई (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

तो हम वास्तव में क्या करते हैं कि हम विसंगतिपूर्ण घटनाओं के बारीक अनुक्रम के साथ पॉइसन प्रक्रिया का अनुमान लगाते हैं, प्रत्येक घटना तंत्र की समरूपता में समय की एक इकाई तक फैलती है, जिसमें पोइसन वितरण को कानून में द्विपद वितरण की सीमा के रूप में देखा जा सकता है। दुर्लभ घटनाओं की

एक बार जब हम इसे समझ लेते हैं, तो बाकी बहुत सरल होता है (कम से कम मेरे लिए)।

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

एक गैर-स्थिर पॉइसन प्रक्रिया का सामना करना

NHPoisson निम्नलिखित मॉडल फिट बैठता है:

λ=exp(पीटीβ)

पीλ

अब गैर-स्थिर पॉइज़न प्रक्रिया तैयार करते हैं।

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नमूने लंबे होते हैं, इसलिए क्रूड ग्राफ़ बनाने के लिए संभव है जो प्रेक्षित तीव्रता के साथ अनुमानित तीव्रता की तुलना करते हैं।


महान स्पष्टीकरण एडम, बहुत बहुत धन्यवाद। मैं इस धारणा के तहत हूं कि हम व्यक्तियों के दो समूहों और प्रति समूह एक तीव्रता के साथ एक मॉडल फिट नहीं कर सकते, क्या मैं सही हूं?
स्टीफन लॉरेंट

@ StéphaneLaurent आप एक covariate के रूप में समूह सदस्यता मॉडल कर सकते हैं, और - हाँ, आप covariates जोड़ सकते हैं। एक समूह के लिए अलग-अलग घटनाओं की तीव्रता हो सकती है और दूसरे के लिए अलग। मैंने ऐसा कुछ कभी नहीं किया है, हालांकि।
एडम रिक्ज़ोस्की

λमैं(टी)=exp(मैं+टी)मैं

एडम, शायद मैं उलझन में था। अब मैं इस धारणा के अधीन हूं कि कोई समस्या नहीं है। जरूरत के मामले में बाद में वापस आऊंगा। ध्यान देने के लिये धन्यवाद।
स्टीफन लॉरेंट

पीरोंएनएच,n=टीमैंरोंपीn,टी=0)आरआरआरमैंnमैंटीपीपीयूn(पीरों=यूएक्सposNH, n = time.span, beta = 0): तर्क "प्रारंभ" गायब है, बिना किसी डिफ़ॉल्ट के
vak
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.