วิธีประมาณกระบวนการปัวซองโดยใช้ R (หรือ: วิธีการใช้แพคเกจ NHPoisson?)


15

ฉันมีฐานข้อมูลของเหตุการณ์ (เช่นตัวแปรของวันที่) และ covariates ที่เกี่ยวข้อง

เหตุการณ์ถูกสร้างขึ้นโดยกระบวนการปัวซองที่ไม่อยู่กับที่ซึ่งพารามิเตอร์เป็นฟังก์ชันที่ไม่รู้จัก (แต่อาจเป็นเชิงเส้น) ของ covariates บางตัว

ฉันคิดว่าแพ็คเกจ NHPoisson มีไว้เพื่อจุดประสงค์นี้เท่านั้น แต่หลังจากการวิจัยไม่ประสบความสำเร็จ 15 ชั่วโมงฉันก็ยังไม่รู้ว่าจะใช้อย่างไร

Heck ฉันลองอ่านหนังสืออ้างอิงทั้งสองเล่ม: Coles, S. (2001) บทนำสู่การสร้างแบบจำลองทางสถิติของค่าที่สูงที่สุด สปริงเกอร์ Casella, G. และ Berger, RL, (2002) อนุมานทางสถิติ. บรูคส์ / โคล

ตัวอย่างเดียวในเอกสารประกอบของ fitPP.fun ดูเหมือนจะไม่เหมาะกับการตั้งค่าของฉัน ฉันไม่มีคุณค่ามากนัก! ฉันเพิ่งมีเหตุการณ์ที่เปลือยเปล่า

ทุกคนได้โปรดช่วยฉันด้วยตัวอย่างง่ายๆของการกระชับกระบวนการ Poisson กับพารามิเตอร์กับตัวแปรร่วมเดียวและสมมติฐานที่ ? ฉันสนใจในการประมาณและ\ฉันให้ชุดข้อมูลสองคอลัมน์พร้อมเวลาของเหตุการณ์ (สมมติว่าวัดเป็นวินาทีหลังจากเวลาโดยพลการ ) และอีกคอลัมน์หนึ่งที่มีค่าของ covariate ?X λ = λ 0 + α X λ 0 α T 0 XλXλ=λ0+αXλ0αt0X


สำหรับผู้ที่สนใจฉันกำลังเขียนของห้องสมุดนี้เพื่อปรับปรุงการใช้งาน github.com/statwonk/NHPoisson
Statwonk

คำตอบ:


15

การปรับกระบวนการปัวซองให้อยู่กับที่

ก่อนอื่นสิ่งสำคัญคือต้องตระหนักว่าข้อมูลอินพุตแบบใดที่ 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

ดังนั้นสิ่งที่เราทำก็คือเราประมาณกระบวนการปัวซงโดยมีลำดับเหตุการณ์แบบทวินามแต่ละเหตุการณ์มีช่วงเวลาหนึ่งหน่วยเท่ากันเมื่อเปรียบเทียบกับกลไกที่การแจกแจงแบบปัวซองสามารถมองได้ว่าเป็นข้อ จำกัด ของการแจกแจงแบบทวินามในกฎหมาย ของเหตุการณ์ที่หายาก

เมื่อเราเข้าใจแล้วส่วนที่เหลือก็ง่ายกว่า (อย่างน้อยสำหรับฉัน)

ในการรับค่าประมาณของฉันต้องใช้เลขชี้กำลังของพารามิเตอร์ที่ติดตั้ง, . และที่นี่มาอีกชิ้นสำคัญของข้อมูลที่ขาดหายไปในคู่มือ : กับเราพอดีกับลอการิทึมของไม่เองλ λλ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การยกกำลัง / logaritmization เสร็จภายใน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éphane Laurent

@ StéphaneLaurentคุณสามารถสร้างแบบจำลองความเป็นสมาชิกกลุ่มเป็นผู้ร่วมงานและ - ใช่คุณสามารถเพิ่มผู้ร่วมงานได้ อาจมีเหตุการณ์ที่แตกต่างกันสำหรับกลุ่มหนึ่งและกลุ่มอื่น ฉันไม่เคยทำอะไรแบบนั้นมาก่อน
Adam Ryczkowski

ขอบคุณอดัม ฉันเห็นวิธีใส่ "การสกัดกั้น" หนึ่งรายการต่อกลุ่มเช่นความเข้มที่มีรูปแบบแต่ฉันไม่เห็นวิธีการใส่ความชันต่อกลุ่ม b iλผม(เสื้อ)=ประสบการณ์(aผม+เสื้อ)ผม
Stéphane Laurent

อดัมบางทีฉันอาจจะสับสน ตอนนี้ฉันอยู่ภายใต้ความประทับใจไม่มีปัญหา ฉันจะกลับมาใหม่ในกรณีที่จำเป็น ขอบคุณมากสำหรับความสนใจของคุณ
Stéphane Laurent

คำตอบที่ดีมาก! btw,> out <-fitPP.fun (posE = aux posNH, n = time.span, beta = 0): อาร์กิวเมนต์ "start "หายไปโดยไม่มีค่าเริ่มต้นพีโอsยังไม่มีข้อความH,n=เสื้อผมม.อี.sพีan,อีเสื้อa=0)ERRโอRผมnผมเสื้อPP.ยูn(พีโอsE=aยูx
vak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.