“跨栏模式”真的是一种模式吗?还是只有两个单独的顺序模型?


25

考虑一个y从正常预测变量中预测计数数据的障碍模型x

set.seed(1839)
# simulate poisson with many zeros
x <- rnorm(100)
e <- rnorm(100)
y <- rpois(100, exp(-1.5 + x + e))

# how many zeroes?
table(y == 0)

FALSE  TRUE 
   31    69 

在这种情况下,我有69个零和31个正计数的计数数据。目前,请不要忘记,根据数据生成过程的定义,这是一个泊松过程,因为我的问题是关卡模型。

假设我想通过障碍模型处理这些多余的零。从我对它们的阅读中,似乎障碍模型本身并不是实际的模型,而是依次进行两种不同的分析。首先,进行逻辑回归,以预测该值是否为正对零。第二,零截断的Poisson回归仅包含非零情况。第二步对我来说是错误的,因为它是(a)丢弃完美的数据,(b)由于许多数据为零,可能会导致电源问题,并且(c)基本上不是其自身的“模型” ,但只需依次运行两个不同的模型即可。

因此,我尝试了“障碍模型”,而不是分别运行逻辑和零截断的泊松回归。他们给了我相同的答案(为简洁起见,我将输出缩写):

> # hurdle output
> summary(pscl::hurdle(y ~ x))

Count model coefficients (truncated poisson with log link):
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  -0.5182     0.3597  -1.441   0.1497  
x             0.7180     0.2834   2.533   0.0113 *

Zero hurdle model coefficients (binomial with logit link):
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -0.7772     0.2400  -3.238 0.001204 ** 
x             1.1173     0.2945   3.794 0.000148 ***

> # separate models output
> summary(VGAM::vglm(y[y > 0] ~ x[y > 0], family = pospoisson()))

Coefficients: 
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  -0.5182     0.3597  -1.441   0.1497  
x[y > 0]      0.7180     0.2834   2.533   0.0113 *

> summary(glm(I(y == 0) ~ x, family = binomial))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.7772     0.2400   3.238 0.001204 ** 
x            -1.1173     0.2945  -3.794 0.000148 ***
---

在我看来,这是因为模型的许多不同数学表示形式都包括在估计正计数情况下观察值非零的可能性,但是我上面运行的模型却完全相互忽略了。例如,这来自Smithson&Merkle的分类和连续受限因变量广义线性模型的第5章,第128页:

...第二,任何值(零和正整数)的概率必须等于一。在公式(5.33)中不能保证这一点。为了解决这个问题,我们将泊松概率乘以伯努利成功概率。      这些问题要求我们将上述障碍模型表示为 ,其中,,π P Ý = Ý | X ž β γ = { 1 - π为  Ŷ = 0 π × EXP - λλ ÿ / ÿ yπ

...λ=EXPXβπ=ö-1żγXŽ

(5.34)P(Y=y|x,z,β,γ)={1π^for y=0π^×exp(λ^)λ^y/y!1exp(λ^)for y=1,2,
λ^=exp(xβ)π^=logit1(zγ)x是Poisson模型的协变量,是逻辑回归模型的协变量,和是各自的回归系数... 。 z γβ^γ^

通过将两个模型完全彼此分开(这似乎是障碍模型所做的),我看不出如何将纳入正计数案例的预测中。但是基于我仅通过运行两个不同的模型就能复制函数的方式,我看不到在截断的Poisson中如何发挥作用完全没有回归。分对数-1ż γπ^hurdleLogit-1个žγ^

我是否正确理解跨栏模型?他们似乎有两个只是在运行两个顺序模型:第二,泊松,完全忽略。如果有人能消除我对业务的困惑,我将不胜感激。πÿ=0π^


如果我没错,那就是障碍模型,那么“障碍”模型的定义是什么?想象一下两种不同的情况:

  • 想象一下通过查看竞争力得分(1-(获胜者的投票比例-亚军投票比例))来模拟选举种族的竞争力。这是[0,1),因为没有联系(例如1)。这里有一个障碍模型是有道理的,因为有一个过程(a)选举不受争议?(b)如果不是,那么预测的竞争力是什么?因此,我们首先进行逻辑回归分析0与(0,1)。然后我们进行beta回归分析(0,1)情况。

  • 想象一个典型的心理学研究。响应为[1,7],就像传统的李克特量表一样,在7处具有最大的天花板效应。一个人可以做一个障碍模型,该模型对[1,7)对7进行逻辑回归,然后对所有情况进行Tobit回归,观察到的响应<7。

即使我使用两个连续模型(后一种情况是Logistic,然后是beta,第二种情况是Logistic,然后是Tobit)来估计这两种情况的“障碍”模型是否安全?


5
我相信跨栏模型等同于运行两个单独的(二进制+零截断)模型。它起作用的技术原因是,第一个模型仅使用零/非零来估计;第二个模型以非零响应为条件估计。λπλ
本·博克

所以然后将对每一个,其? 1ÿ>0π^1个一世ÿ>0
马克·怀特

3
不。条件模型省略了项,即π^Pÿ=ÿ|ÿ>0=经验值-λ^等等
etc。

啊谢谢你 因此,我假设Smithson和Merkle的方程式描述的模型与在中实现的模型不同pscl::hurdle,但是在此处的方程式5中看起来是相同的:cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf也许我仍然缺少一些基本的东西会让我点击?
马克·怀特

4
这是相同的模型。Mike和Ed关注最简单的情况(logit + Poisson),这是的默认情况hurdle()。不过,在配对/小插图中,我们尝试强调更通用的构建基块。
Achim Zeileis

Answers:


35

分离对数似然

这是正确的,最关模型可以估算分开(我要说的,而不是按顺序)。原因是对数似然可以分解为两个部分,可以分别最大化。这是因为只是(5.34)中的比例因子,它成为对数似然的加法项。π^

以Smithson&Merkle的符号表示: ,其中是(未截断的)泊松分布的密度和是零截断的因子。

βγ;ÿXž=1个γ;ÿž+2β;ÿX=一世ÿ一世=0日志{1个-ØG一世Ť-1个ž一世γ}+一世ÿ一世>0日志{ØG一世Ť-1个ž一世γ}+一世ÿ一世>0[日志{Fÿ一世;经验值X一世β}-日志{1个-F0;经验值X一世β}]
Fÿ;λ=经验值-λλÿ/ÿ1个-F0;λ=1个-经验值-λ

然后很明显,可以分别最大化(二进制logit模型)和(零截断泊松模型),从而获得与情况相同的参数估计,协方差等。共同最大化它们。1个γ2β

如果未通过logit模型对零障碍概率进行参数设置,但通过任何其他二进制回归模型(例如,以1为右删减的计数分布)进行参数化,则相同的逻辑也将起作用。当然,也可以是另一个计数分布,例如负二项式。仅当零障碍和截短的计数部分之间存在共享参数时,整个分隔才会分解。πF

一个突出的示例是,如果在模型的两个组件中采用具有单独的但共有的参数的负二项式分布。(可从实现的后继者R-Forge 的软件包中获得。)μθhurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")countregpscl

具体问题

(a)丢弃完美的数据:就您而言,是的,通常不。您具有来自单个Poisson模型的数据,且没有多余的零(尽管有许多零)。因此,没有必要估计零和非零的单独模型。但是,如果这两个部分实际上是由不同的参数驱动的,则必须考虑到这一点。

(b)可能导致电源问题,因为许多数据为零:不一定。在这里,您有三分之一的观察结果是“成功”(跨栏)。在二元回归模型中,这不会被认为是极端的。(当然,如果没有必要估计单独的模型,则将获得功能。)

(c)基本上不是其本身的“模型”,而是依次运行两个不同的模型:这是更具哲学意义的,我不会尝试给出“一个”答案。相反,我将指出一些务实的观点。对于模型估计,可以方便地强调模型是独立的,因为-如您所示-您可能不需要专用的估计函数。对于模型应用(例如,用于预测或残差等),将其视为单个模型会更方便。

(d)将这两种情况称为“障碍”模型是否安全:原则上是。但是,行话可能会因社区而异。例如,零障碍Beta回归更普遍(且非常令人困惑)称为零膨胀beta回归。就我个人而言,我发现后者极具误导性,因为Beta分布中没有可能被夸大的零-但这仍然是文献中的标准术语。此外,轨道模型是审查模型,因此不是障碍模型。但是,可以通过一个概率模型(或logit模型)加上一个截断的普通模型来扩展它。在计量经济学文献中,这称为Cragg两部分模型。

软件注释

countreg在上R-伪造包https://R-Forge.R-project.org/R/?group_id=522是后继实施hurdle()/ zeroinfl()pscl。它(仍然)不在CRAN上的主要原因是我们想要修改predict()接口,可能是采用不完全向后兼容的方式。否则,实现将非常稳定。相比之下,pscl它具有一些不错的功能,例如:

  • zerotrunc()函数使用hurdle()与模型的零截断部分完全相同的代码。因此,它提供了的替代方法VGAM

  • 此外,它作为d / p / q / r函数用于零截断,跨栏和零膨胀计数分布。这有助于将它们视为“一个”模型而不是单独的模型。

  • 为了评估拟合优度,可以使用图形显示,如根图和随机分位数残差图。(请参见Kleiber&Zeileis,2016,美国统计学家70(3),296–303。doi:10.1080 / 00031305.2016.1173590。)

模拟数据

您的模拟数据来自单个泊松过程。如果e将其视为已知的回归变量,则它将是标准的Poisson GLM。如果e是未知的噪声分量,则存在一些未观察到的异质性,会引起一点点的过度分散,这可以由负二项式模型或某种其他类型的连续混合或随机效应等捕获。但是,由于e此处的效应很小,这些都没有太大的不同。在下面,我将其e视为回归变量(即,真实系数为1),但是您也可以忽略这一点,并使用负二项式或泊松模型。定性地,所有这些导致相似的见解。

## Poisson GLM
p <- glm(y ~ x + e, family = poisson)
## Hurdle Poisson (zero-truncated Poisson + right-censored Poisson)
library("countreg")
hp <- hurdle(y ~ x + e, dist = "poisson", zero.dist = "poisson")
## all coefficients very similar and close to true -1.5, 1, 1
cbind(coef(p), coef(hp, model = "zero"), coef(hp, model = "count"))
##                   [,1]       [,2]      [,3]
## (Intercept) -1.3371364 -1.2691271 -1.741320
## x            0.9118365  0.9791725  1.020992
## e            0.9598940  1.0192031  1.100175

这反映出所有三个模型都可以一致地估计真实参数。查看相应的标准错误表明,在这种情况下(不需要障碍部分),泊松GLM的效率更高:

serr <- function(object, ...) sqrt(diag(vcov(object, ...)))
cbind(serr(p), serr(hp, model = "zero"), serr(hp, model = "count"))
##                  [,1]      [,2]      [,3]
## (Intercept) 0.2226027 0.2487211 0.5702826
## x           0.1594961 0.2340700 0.2853921
## e           0.1640422 0.2698122 0.2852902

标准信息标准将选择真正的Poisson GLM作为最佳模型:

AIC(p, hp)
##    df      AIC
## p   3 141.0473
## hp  6 145.9287

Wald检验可以正确检测出障碍模型的两个组成部分之间没有显着差异:

hurdletest(hp)
## Wald test for hurdle models
## 
## Restrictions:
## count_((Intercept) - zero_(Intercept) = 0
## count_x - zero_x = 0
## count_e - zero_e = 0
## 
## Model 1: restricted model
## Model 2: y ~ x + e
## 
##   Res.Df Df  Chisq Pr(>Chisq)
## 1     97                     
## 2     94  3 1.0562     0.7877

最后双方rootogram(p)qqrplot(p)表明泊松GLM拟合数据非常好,而且有进一步misspecifications没有多余的零或提示。

根图+ qqrplot


多余的零和许多零之间有什么区别?
榻榻米

1
例如:期望 Poisson分布具有大约的概率。那肯定是很多零。但是,如果您的分布具有Poisson(0.5)的形状但有多个零,则这些为多余的零λ=0.5F0;λ=0.560
Achim Zeileis

4

我同意零膨胀模型和障碍模型之间的区别很难理解。两者都是一种混合模型。据我所知,重要的区别是,在零膨胀模型中,您将零质量与分布\ textit {也可以取零“混合在一起。对于障碍模型,您将零质量与仅接受大于0的分布的混合。因此,在零膨胀模型中,您可以区分“结构零”(对应于零质量)和“采样零” '对应于您要混入的模型中0的偶然出现。当然,此标识在很大程度上取决于正确选择分布!但是,例如,如果您的Poisson膨胀为零,您可以区分来自泊松分量的零(采样零)和来自质量为零的零(结构零)。如果您有一个零膨胀模型,并且要混合的分布在零时没有质量,则可以将其解释为障碍模型。


虽然两种零之间的区别是直接来自模型规范的必要性,但可以为跨栏模型计算相同种类的数量。即使其结构参数是基于截短的样本,也可以从未截断的计数分布(例如泊松)计算出所谓的结构零点。那么,结构零的概率就是零(总体而言,从零障碍部分开始)与采样零的概率之差。
Achim Zeileis

1

关于哲学方面,“什么时候我们应该将某事考虑为一个模型,而当两个单独的模型时”,可能有趣的是注意到模型参数的样本估计是相关的。

在下面带有模拟的图中,您几乎可以看到斜率与计数部分的截距之间的相关性。但是计数部分和障碍部分之间也存在一些细微的关系。如果更改参数,例如使Poisson分布中的lambda较小或样本大小较小,则相关性会变强。

因此,我要说的是,您不应将其视为两个单独的模型。或至少存在某种关系,即使在实践中您可以彼此独立地计算两个估计值。

相关性

set.seed(1839)

Nrep <- 3000
Ns <- 100
pars <- matrix(rep(0,3*Nrep),Nrep)
colnames(pars) <- c("count_intercept","count_slope","hurdle_intercept")

# simulation-loop
# Note that a truncated poisson is used to generate data
# this will make the parameters from the hurdle function easier to interpret and compare
for (i in 1:Nrep) {
  x <- rnorm(Ns,0,1)
  e <- rbinom(Ns,1,exp(-0.7))
  y <- e*truncdist::rtrunc(n=Ns,spec='pois',a=0,b=Inf,lambda=exp(-1.5 + x))
  mod <- pscl::hurdle(y ~ 1+x|1, link="log")
  pars[i,1]<-mod$coefficients$count[1]
  pars[i,2]<-mod$coefficients$count[2]
  pars[i,3]<-mod$coefficients$zero[1]
}  

# viewing data
plotpars <- pars[pars[,1]>-7,] #clipping
pairs(plotpars,cex=0.7,pch=21,
      col= rgb(0,0,0,0.03),
      bg = rgb(0,0,0,0.03))

# demonstrating linear relation / significant correlation
summary(lm(pars[,1] ~ pars[,3]))

这两个部分之间没有关联是没有多大意义的。但这可能是由于泊松模型中参数估计值的离散水平以及它们与零的数量之间的关系所致。


我不能重复这个。对我来说:truncdist::rtrunc(n = 100, spec = 'pois', a = 0, b = Inf, lambda = exp(-1.5 + rnorm(100)))产生一个错误(使用版本1.0.2): Error in if (G.a == G.b) { : the condition has length > 1。无论如何,在给定的跨栏穿越概率和基础(未过时的)泊松期望的情况下,rhpois()countreg跨栏Poisson模型进行模拟更容易在R-Forge上使用from软件包。如果使用这些,则在零跨度和截断计数部分之间只会得到很小的经验相关性。pilambda
Achim Zeileis

数据生成处理:dgp <- function(n = 100, b = c(-0.5, 2), g = c(0.5, -2)) { x <- runif(n, -1, 1) ; y <- rhpois(n, lambda = exp(b[1] + b[2] * x), pi = plogis(g[1] + g[2] * x)); data.frame(x = x, y = y) }模拟:set.seed(1); cf <- t(replicate(3000, coef(hurdle(y ~ x, data = dgp()))))。评估:pairs(cf)cor(cf)。检查colMeans(cf)还表明,估算效果良好。
Achim Zeileis

目前,我无法使用@AchimZeileis来调查您的错误并对此发表评论。但是无论如何,在我显示的图像中,相关性都不会很小。重点是哲学/理论上的。实际上,将模型视为两个单独的,非集成的步骤时,您极有可能会遇到一些问题。
Sextus Empiricus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.