使用障碍泊松模型预测未来值

机器算法验证 r 广义线性模型 零通胀
2022-04-02 20:22:58

我在包含一个 y(因变量)和一个 x(自变量)的测试数据集上执行了一个障碍泊松模型。

head(df)

y       width
8       34.4
0       22.5
3       28.34
7       32.22

输出如下图所示。

Count model coefficients (truncated poisson with log link):
(Intercept)        width  
    0.58915      0.03386  

Zero hurdle model coefficients (binomial with logit link):
(Intercept)        width  
   -12.3508       0.4972 

我不知道如何计算 的y未来值的值x比如说任何帮助深表感谢。x (width)34.3

2个回答

基本思想是“二项分布的成功概率”*“泊松分布的lambda(=期望值)”但是你必须考虑到计数部分的泊松模型永远不会返回 0。

我假设您的示例数据并预测何时widthc(23, 26, 29)

library(pscl)
data <- data.frame(y = c(8, 0, 3, 7), width = c(34.40, 22.50, 28.34, 32.22))

model <- hurdle(y ~ width, data = data)
model
 # Count model coefficients (truncated poisson with log link):
 # (Intercept)        width  
 #     -3.4520       0.1629    # model$coef$count[[1]] (left); model$coef$count[[2]] (right)

 # Zero hurdle model coefficients (binomial with logit link):
 # (Intercept)        width  
 #    -198.851        7.809    # model$coef$zero[[1]] (left); model$coef$zero[[2]] (right)

首先,您计算二项式模型的成功概率phi_zero, (逻辑方程)。(由于使用它,我附上了一个记录版本predict()。)

phi_zero <- 1 / ( 1 + exp(-(model$coef$zero[[1]] + model$coef$zero[[2]] * c(23, 26, 29))))
# p0_zero <- log(phi_zero)

其次,您计算泊松模型的参数(= 期望值)mu,以及 > 0 的概率,phi_count

mu <- exp(model$coef$count[[1]] + model$coef$count[[2]] * c(23, 26, 29))
phi_count <- ppois(0, lambda = mu, lower.tail = F)  # not 0 probability
# p0_count <- ppois(0, lambda = mu, lower.tail = F, log.p = T)

最后,整合两个模型的值。

phi <- phi_zero / phi_count  # because there isn't 0 coming from poisson.
rval <- phi * mu
# logphi <- p0_zero - p0_count
# rval2 <- exp(logphi + log(mu))
rval
 # [1] 8.051324e-09 2.429582e+00 3.674317e+00

并将predict()hurdle作为参数(参见 参考资料?predict.hurdle)。

predict(model, data.frame(width = c(23, 26, 29)), type = "response")
 #            1            2            3 
 # 8.051324e-09 2.429582e+00 3.674317e+00     # the same

跨栏模型也称为两部分模型。它们对于实现具有许多零的计数数据很有用。

在第一步中,计算因变量为零或正数的概率。该表应该像 logit 回归一样解释。

Zero hurdle model coefficients (binomial with logit link):
(Intercept)        width  
   -12.3508       0.4972 

现在算法分为零和一。在我们的例子中,零是因变量取值为 0 的情况。在我们的例子中,是因变量取正整数的情况。

Count model coefficients (truncated poisson with log link):
(Intercept)        width  
    0.58915      0.03386  

在因变量为正整数(非零)的情况下,可以通过下式 计算width=34的值-12.3508 + 34 * 0.4972

在一个例子中指出它:

  1. 您想计算德国成年人每天吸烟的数量。
  2. 您决定使用计数数据模型,因为香烟的数量是一个计数变量
  3. 由于您的数据集中有很多零(德国的大多数人根本不吸烟),您坚持使用障碍泊松模型。
  4. 现在,零障碍模型系数计算了这个人实际上是在吸烟还是根本不吸烟。
  5. 在吸烟者中,计数模型系数预测吸烟者每天要抽多少支香烟。