障碍模型预测 - 计数与响应

hurdle model prediction - count vs response

我正在研究跨栏模型,运行 遇到了一个我不太明白的问题。据我了解,跨栏的整体响应预测是计数预测与概率预测的乘积。即,总体响应必须小于或等于计数预测。但是,在我的数据中,响应预测高于计数预测,我不明白为什么。

这是玩具模型的类似结果(代码改编自 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

最后一个问题最容易回答。障碍模型的 "count" 部分不仅仅是一个标准计数模型(包括零的正概率),而是一个 zero-truncated 计数模型(其中不能出现零)。

使用 R-Forge 中的 countreg 包,您可以在您的示例中拟合您试图用 glm.nb 拟合的模型。 (或者,VGAMgamlss 也可用于拟合同一模型。)

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

前两个模型完全等同,只有很小的数值差异。然而,non-truncated 模型必须通过增加截距和抑制斜率参数来补偿零点的缺失,这显然不适合这里。

关于预测,可以区分三个量:

  1. 未截断计数部分的期望值,即简单的 exp(x'b)。
  2. 计数部分的 conditional/truncated 期望值,即考虑零截断:exp(x'b)/(1 - f(0)) 其中 f(0) 是 0 的概率在那个计数部分。
  3. 完整障碍模型的总体期望,即跨越障碍的概率乘以 2 的条件期望:exp(x'b)/(1 - f(0)) * (1 - g (0)) 其中 g(0) 是模型零障碍部分中 0 的概率。

有关更多详细信息和公式,另请参阅 vignette("countreg", package = "pscl") 中的第 2.2 节和附录 C。 predict(..., type = "count") 从上面计算项目 1,其中 predict(..., type = "response") 计算 hurdle 模型的项目 3 和 zerotrunc 模型的项目 2。