2013-07-29 48 views
2

泊松迴歸預測區間我tryed兩種方法,但我覺得既困難.. 我嘗試更好地解釋這是我的問題之前,我告訴你,我的問題與這兩種方法。爲R上

我有數據集「承兌匯票」,其中我在用之前介紹的indipendent變量的醫院接受日常的數量。醫院有三個地方我們做訪問......所以在我的數據集中,我每天有三行一個地方。該數據集似乎是:

Date  Place NumerAccept weekday month NoConvention Rain 

2008-01-02 Place1  203  wed  Gen   0    1 
2008-01-02 Place2   70  wed  Gen   0    1 
2008-01-02 Place3   9  wed  Gen   0    1 
2008-01-03 Place1  345  thu  Gen   0    1 
2008-01-03 Place2   24  thu  Gen   0    1 
2008-01-03 Place3   99  thu  Gen   0    1 
2008-01-04 Place1  339  fri  Gen   0    0 
2008-01-04 Place2   36  fri  Gen   0    0 
2008-01-04 Place3  101  fri  Gen   0    0 

....等等......我有數據集,直到昨天,所以最後三行是昨天29 2013年七月 現在,我做我的泊松的承兌匯票迴歸:

poisson_reg=glm(NumeberAccept ~ 1 + weekday + month + place + NoConvention + Rain, 
        family = poisson(link = log), data = acceptances) 

現在對於我的預測,我創建從中我想計算的預測區間爲承兌匯票在未來2個月內數的新數據集acceptances_2!所以,第一行會acceptations今天的號碼,最後一行將在9月29日在接受


我不知道,如果這個問題已經有一個答案,但我沒能找到它。我試圖在R中做一個泊松迴歸,我想獲得預測區間。我看到lm的預測函數會給它編寫'interval="prediction"',但它不適用於predict.glm

有人知道是否有方法來預測這些間隔?如果你有一些例子,你可以輸入代碼嗎?

所以我要算在醫院日常接受的數目,我有以下代碼:

poisson_reg=glm(NumeberAccept ~ 1 + weekday + month + place + NoConvention + Rain, 
       family = poisson(link = log), data = dataset) 
summary(poisson_reg) 

現在,如果我中的R predict(poisson_reg, newdata, type="responce")型我有接受日常數量的預測,但我也需要預測間隔! 我在預測調用中看到對於類"lm"的對象,您可以編寫:predict(poisson_reg, newdata, interval="prediction"),它給出了95%的預測間隔。有沒有辦法與類"glm"的對象獲得相同的結果?

+0

檢出?confint。 http://stat.ethz.ch/R-manual/R-devel/library/MASS/html/confint.html –

+0

這*不*那麼簡單。與線性模型情況不同的是,可以簡單地將由於參數不確定性導致的方差與估計的誤差方差相加,以獲得總體預測方差,這裏您可能需要根據參數(或自舉分佈)的採樣分佈進行模擬,然後從條件泊松分佈中進行模擬,並收集相關的置信度。 –

+0

@ Ben:不要以爲我跟着你......你能舉個例子嗎? @弗蘭克:Confint也不行,因爲我需要的預測區間沒有信心的.. – klair

回答

3

這也許比一個編程問題的統計問題,而是:

從以前的問題偷竊示例數據:

ex <- read.table(
    header=TRUE, text=' 
Number.Accepted Weekday Month Place 
    20 6 8 1 
    16 7 8 1 
    12 4 8 2 
    11 7 1 1 
    12 1 4 1 
    12 7 10 2 
    13 5 6 2 
') 
ex.glm <- glm(Number.Accepted ~ Weekday + Month + Place, 
       family = poisson, data = ex) 

數據幀,我們要預測區間:

newdata <- data.frame(Weekday=c(5,6),Month=c(9,9),Place=c(1,1)) 

類似這樣的:

bootSimFun <- function(preddata,fit,data) { 
    bdat <- data[sample(seq(nrow(data)),size=nrow(data),replace=TRUE),] 
    bfit <- update(fit,data=bdat) 
    bpred <- predict(bfit,type="response",newdata=preddata) 
    rpois(length(bpred),lambda=bpred) 
} 

您還可以使用replicate()從基礎R,但plyr::raply()方便:

library(plyr) 
set.seed(101) 
simvals <- raply(500,bootSimFun(preddata=newdata,fit=ex.glm,data=ex)) 
t(apply(simvals,2,quantile,c(0.025,0.975))) 
## 2.5% 97.5% 
## 1 7.000 40 
## 2 7.475 36 
+0

嗨本,我已經tryed你的方法,但我有一些問題..當我在做BDAT我bootSimFun需要有我的數據集acceptances_2我希望爲接下來的兩個月的預計時間間隔。因此,在我的數據集中,我沒有列NumberAccepted,因爲我想預測該變量..所以你的代碼給了我一個錯誤,因爲它想要的變量..是我的推理錯誤? – klair

3

考慮澤裏格柯包。請參閱泊松小插圖 - http://rss.acs.unt.edu/Rdoc/library/Zelig/doc/poisson.pdf

澤裏格柯已經不僅僅是造型的統一方法(對於這一點,GLM()與它的各種鏈接的功能就足夠了),而且要提取和繪製的利息量。特別是,爲了模擬預測範圍 - 與預期範圍相反 - 您必須模擬係數(系統組件)和誤差項(隨機組件)。簡單地對誤差項進行平均,我認爲這就是predict.glm()所做的,它會給你預期的範圍,這個範圍更窄。

澤裏格柯具有如下功能:SIM()模擬兩個系統的和隨機分量,並輸出存儲器對象,可以使用繪製二者的預測和預期範圍。如果你想模擬你的解釋變量給定值的預測不確定性,它還有一個你可以在sim()之前使用的函數setx()。看到這裏 - http://rss.acs.unt.edu/Rdoc/library/Zelig/html/setx.html

這一切都始於本文:http://gking.harvard.edu/files/abs/making-abs.shtml。 Zelig基本上是Clarify長大的。

+0

嗨加比,我也試過你的方法..但我不明白一些東西..我做了迴歸和模擬:reg_zelig = zelig(公式= NumeroAccept〜1 +星期幾+月+地方+ NoConvention +雨,數據=接受,模型=「泊松」) x.out = setx(reg_zelig,data = acceptance_2) 這裏我有數據集accept_2,我想預測NumberAccept,所以我沒有那個變量..所以自帶的error..If我把NumerAccept = 0它的工作原理,但是當我做s.out <-sim(reg_zelig,X = x.out)它給我的結果: – klair

+0

期望值:E(Y | X) 平均sd 50%2.5%97.5% 335.463 3.076 335.401 329.502 341.582 預測值:Y | X mean sd 50%2.5%97.5% 335.242 18.45 335 300 373 但它只是指我的數據集中的第一個觀察結果。爲什麼?也許我在把NumberAccept = 0放在數據集中是錯誤的,但是我沒有那個變量,因爲我想要它的預測間隔!!而且我很抱歉,但是我不明白這個預測值是什麼真的需要..你能幫我理解嗎?真的感謝 – klair