Làm thế nào để ước tính quá trình Poisson bằng R? (Hoặc: cách sử dụng gói NHPoisson?)


15

Tôi có một cơ sở dữ liệu về các sự kiện (tức là một biến số của ngày) và các hiệp phương thức liên quan.

Các sự kiện được tạo ra bởi quá trình Poisson không cố định với tham số là một hàm chưa biết (nhưng có thể tuyến tính) của một số hiệp phương sai.

Tôi nghĩ rằng gói NHPoisson tồn tại chỉ cho mục đích này; nhưng sau 15 giờ nghiên cứu không thành công tôi vẫn chưa biết làm thế nào để sử dụng nó.

Heck, tôi thậm chí đã thử đọc cả hai cuốn sách tham khảo: Coles, S. (2001). Giới thiệu về mô hình thống kê của các giá trị cực đoan. Mùa xuân. Casella, G. và Berger, RL, (2002). Suy luận thống kê. Brooks / Cole.

Một ví dụ duy nhất trong tài liệu của fitPP.fun dường như không phù hợp với thiết lập của tôi; Tôi không có giá trị cực đoan! Tôi chỉ có những sự kiện trần trụi.

Bất cứ ai có thể vui lòng giúp tôi với một ví dụ đơn giản về việc khớp quy trình Poisson với tham số với hiệp phương trình đơn lẻ và giả định rằng ? Tôi quan tâm đến việc ước tính và . Tôi cung cấp một tập hợp dữ liệu hai cột với thời gian của các sự kiện (giả sử, được đo bằng giây sau một khoảng thời gian tùy ý ) và một cột khác có giá trị của hiệp phương ?λXλ=λ0+αXλ0αt0X


Đối với những người quan tâm, tôi đang viết lại thư viện này để cải thiện khả năng sử dụng. github.com/statwonk/NHPoisson
Statwonk

Câu trả lời:


15

Lắp một quy trình Poisson cố định

Trước hết, điều quan trọng là phải nhận ra, NHPoisson cần loại dữ liệu đầu vào nào.

Trước hết, NHPoisson cần một danh sách các chỉ số của các khoảnh khắc sự kiện. Nếu chúng ta ghi lại khoảng thời gian và số lượng sự kiện trong khoảng thời gian, hơn tôi, chúng ta phải dịch nó thành một cột ngày duy nhất, có thể "bôi nhọ" các ngày trong khoảng thời gian chúng được ghi lại.

Để đơn giản, tôi sẽ giả sử rằng chúng ta sử dụng thời gian được tính bằng giây và "giây" là đơn vị tự nhiên của .λ

Hãy mô phỏng dữ liệu cho một quy trình Poisson đơn giản, cố định, có sự kiện mỗi phút:λ= =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))

Việc simNHP.funlàm cho các mô phỏng. Chúng tôi sử dụng để có được aux$posNH, một biến với các chỉ số của khoảnh khắc bắn sự kiện mô phỏng. Chúng ta có thể thấy rằng chúng ta có khoảng 60 * 24 = 1440 sự kiện, bằng cách kiểm tra `length (aux $ posNH).

Bây giờ chúng ta hãy thiết kế ngược lại với :λ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

Bởi vì hàm chỉ lấy các chỉ số của sự kiện, nên nó cũng cần một thước đo xem có bao nhiêu chỉ số có thể có. Và đây là một phần rất khó hiểu , bởi vì trong quá trình Poisson thực sự, có thể có vô số các sự kiện có thể xảy ra (nếu chỉ ). Nhưng từ quan điểm của chúng ta cần phải chọn một số đơn vị thời gian đủ nhỏ. Chúng tôi chọn nó quá nhỏ để chúng tôi có thể giả sử tối đa một sự kiện trên mỗi đơn vị thời gian.λ>0fitPP

Vì vậy, những gì chúng ta làm trong thực tế là chúng ta ước tính quá trình Poisson với chuỗi các sự kiện nhị thức chi tiết, mỗi sự kiện kéo dài chính xác một đơn vị thời gian, tương tự như cơ chế phân phối Poisson có thể được coi là một giới hạn của phân phối nhị thức trong luật của các sự kiện hiếm .

Một khi chúng ta hiểu nó, phần còn lại đơn giản hơn nhiều (ít nhất là đối với tôi).

Để có được xấp xỉ của chúng tôi, tôi cần lấy số mũ của tham số được trang bị , . Và đây là một thông tin quan trọng khác, còn thiếu trong hướng dẫn sử dụng : với chúng tôi phù hợp với logarit của , chứ không phải với chính .λbetaexp(coef(out)[1])NHPoissonλλ

Lắp một quy trình Poisson không cố định

NHPoisson phù hợp với mô hình sau:

λ= =điểm kinh nghiệm(PTβ)

tức là nó phù hợp với sự kết hợp tuyến tính của các tham số (được gọi là hiệp phương sai) với logarit của .Pλ

Bây giờ chúng ta hãy chuẩn bị quá trình Poisson không cố định.

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)

Cũng như trước đây, aux$posNHsẽ cho chúng ta các chỉ số của các sự kiện, nhưng lần này chúng ta sẽ nhận thấy rằng cường độ của các sự kiện giảm dần theo cấp số nhân theo thời gian. Và tỷ lệ giảm dần này là một tham số chúng tôi muốn ước tính.

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

Điều quan trọng cần lưu ý là chúng ta cần đặt all.secondsnhư một đồng biến, không phải lambdas. Việc lũy thừa / logarit được thực hiện bởi nội bộ fitPP.fun. BTW, ngoài các giá trị dự đoán, hàm tạo hai biểu đồ theo mặc định.

Phần cuối cùng là một hàm dao thụy sĩ để xác nhận mô hình , globalval.fun.

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

Trong số những thứ khác, hàm chia thời gian thành các khoảng, mỗi lintmẫu dài, do đó có thể tạo ra các biểu đồ thô so sánh cường độ dự đoán với cường độ quan sát được.


Adam giải thích tuyệt vời, cảm ơn bạn rất nhiều. Tôi có ấn tượng rằng chúng ta không thể phù hợp với một mô hình với hai nhóm cá nhân và một cường độ cho mỗi nhóm, phải không?
Stéphane Laurent

@ StéphaneLaurent Bạn có thể mô hình thành viên nhóm dưới dạng hiệp phương sai và - vâng, bạn có thể thêm đồng biến. Có thể có cường độ khác nhau cho một nhóm và khác nhau cho nhóm khác. Tôi chưa bao giờ làm điều gì đó như thế.
Adam Ryczkowski

Cảm ơn bạn Adam. Tôi thấy làm thế nào để đặt một "chặn" cho mỗi nhóm, ví dụ như một cường độ có dạng , nhưng tôi không thấy làm thế nào để đặt một dốc cho mỗi nhóm. λTôi(t)= =điểm kinh nghiệm(mộtTôi+bt)bTôi
Stéphane Laurent

Adam, có lẽ tôi đã nhầm lẫn. Bây giờ tôi đang có ấn tượng không có vấn đề. Tôi sẽ quay lại sau trong trường hợp cần thiết. Cảm ơn bạn rất nhiều sự chú ý của bạn.
Stéphane Laurent

câu trả lời rất tốt btw,> out <-fitPP.fun (posE = aux posNH, n = time.span, beta = 0): đối số "bắt đầu "bị thiếu, không có mặc địnhpoSNH,n= =tTôime.Spmộtn,betmột= =0)ErrorTôinfTôitPP.fbạnn(poSE= =mộtbạnx
vak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.