我正在研究障碍模型并遇到一个我无法弄清楚的问题。据我所知,障碍的整体响应预测是计数预测乘以概率预测的乘法。即,总体响应必须小于或等于计数预测。但是,在我的数据中,响应预测高于计数预测,我无法弄清楚原因。
以下是玩具模型的类似结果(代码改编自here):
library("pscl")
data("RecreationDemand", package = "AER")
## model
m <- hurdle(trips ~ quality | ski, data = RecreationDemand, dist = "negbin")
nd <- data.frame(quality = 0:5, ski = "no")
predict(m, newdata = nd, type = "count")
predict(m, newdata = nd, type = "response")
为什么计数高于回复?
添加了对glm.nb的比较
另外 - 我的印象是,障碍模型的计数部分应该对只有正值的计数模型给出相同的预测。当我尝试时,我会得到完全不同的价值观。我错过了什么?
library(MASS)
m.nb <- glm.nb(trips ~ quality, data = RecreationDemand[RecreationDemand$trips > 0,])
predict(m, newdata = nd, type = "count") ## hurdle
predict(m.nb, newdata = nd, type = "response") ## positive counts only
答案 0 :(得分:0)
最后一个问题是最容易回答的问题。 &#34;计数&#34;障碍模块的一部分不仅仅是标准计数模型(包括零的正概率),而是零截断计数模型(其中零不能出现)。
使用R-Forge中的countreg
软件包,您可以在示例中使用您尝试适合glm.nb
的模型。 (或者,VGAM
或gamlss
也可用于拟合相同的模型。)
library("countreg")
m.truncnb <- zerotrunc(trips ~ quality, data = RecreationDemand,
subset = trips > 0, dist = "negbin")
cbind(hurdle = coef(m, model = "count"), zerotrunc = coef(m.truncnb), negbin = coef(m.nb))
## hurdle zerotrunc negbin
## (Intercept) 0.08676189 0.08674119 1.75391028
## quality 0.02482553 0.02483015 0.01671314
最小的数值差异前两个模型完全相同。然而,非截断模型必须通过增加截距和抑制斜率参数来补偿零点的缺失,这在这里显然是不合适的。
至于预测,可以区分三个数量:
有关详细信息和公式,另请参见vignette("countreg", package = "pscl")
中的第2.2节和附录C. predict(..., type = "count")
计算上面的第1项,其中predict(..., type = "response")
为hurdle
模型计算第3项,为zerotrunc
模型计算第2项。