3

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

这是玩具模型的类似结果(代码改编自此处):

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
4

1 回答 1

1

最后一个问题是最容易回答的。障碍模型的“计数”部分不仅仅是一个标准计数模型(包括零的正概率),而是一个零截断计数模型(零不能出现)。

使用countregR-Forge 的包,您可以在示例中拟合您尝试拟合的模型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

前两个模型在数值差异很小的情况下是完全等价的。然而,非截断模型必须通过增加截距和衰减斜率参数来补偿零点的缺失,这在此处显然是不合适的。

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

  1. 来自未截断计数部分的期望,即简单的 exp(x'b)。
  2. 计数部分的条件/截断期望,即考虑零截断: 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")计算模型的项目 3 和hurdle模型的项目 2 zerotrunc

于 2018-02-16T23:43:47.997 回答