簡體   English   中英

R上泊松回​​歸的預測間隔

[英]Prediction intervals for poisson regression on R

我已經嘗試了這兩種方法,但是在這兩種方法上我都遇到了困難。.在我用兩種方法告訴您問題之前,我試圖更好地解釋這是我的問題。

我有一個“承兌”數據集,其中有我之前描述的各個變量在醫院中每天的承兌數量。 醫院在三個地方進行探視。因此,在我的數據集中,我每天有3行,每個地方一行。 數據集看起來像:

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

....依此類推...我有直到昨天的數據集,所以最后三行是2013年7月29日昨天的接受。現在,我進行泊松回歸:

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

現在,對於我的預測,我創建了一個新的數據集acceptances_2,我要根據該數據集計算下兩個月的接收數預測間隔!! 因此,第一行是今天的接受數量,最后一行是9月29日的接受數量。


我不知道這個問題是否已經找到答案,但是我找不到它。 我正在嘗試在R中進行泊松回歸,我想獲得預測間隔。 我看到lm的預測函數給它寫了'interval="prediction"'但是它不適用於'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"類的對象獲得相同的結果?

這可能是統計問題,而不是編程問題,但是:

竊取上一個問題的示例數據:

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

考慮一下Zelig軟件包。 在此處查看Poisson小插圖-http: //rss.acs.unt.edu/Rdoc/library/Zelig/doc/poisson.pdf

Zelig具有統一的方法,不僅可以建模(為此,具有各種鏈接功能的glm()就足夠了),而且可以提取和繪制感興趣的量。 特別是,要對預測范圍(而不只是預期范圍)進行建模,必須同時模擬系數(系統成分)和誤差項(隨機成分)。 簡單地對誤差項求平均,我認為這是predict.glm()所做的,將為您提供預期的范圍,該范圍更窄。

Zelig有一個函數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長大的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM