「ハードルモデル」は本当に1つのモデルですか?または、2つの別個の順次モデルだけですか?


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個の正のカウントを持つカウントデータがあります。私の質問はハードルモデルに関するものであるため、これはデータ生成手順の定義によりポアソンプロセスであるということは今のところ気にしないでください。

これらの過剰なゼロをハードルモデルで処理したいとします。それらについての私の読書から、ハードルモデルはそれ自体が実際のモデルではないように思われました。彼らはただ2つの異なる分析を連続して行っているだけです。最初に、値が正であるかゼロであるかを予測するロジスティック回帰。第二に、ゼロ以外のケースのみを含むゼロ切り捨てポアソン回帰この2番目のステップは、(a)完全に適切なデータを破棄し、(b)データの多くがゼロであるため電力の問題につながる可能性があり、(c)基本的にそれ自体が「モデル」ではないため、間違っていると感じました、ただし2つの異なるモデルを順番に実行するだけです。

そこで、ロジスティックとゼロ打ち切りポアソン回帰を別々に実行するのではなく、「ハードルモデル」を試しました。彼らは私に同じ答えを与えました(簡潔にするために出力を省略しています):

> # 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 ***
---

モデルのさまざまな数学的表現には、正のカウントケースの推定で観測値がゼロ以外の確率が含まれているため、これは私には思えますが、上で実行したモデルは互いに完全に無視します。たとえば、これは、スミソン&マークルのカテゴリー限定および連続限定従属変数一般化線形モデルの128ページの第5章からのものです。

...次に、が任意の値(ゼロと正の整数)をとる確率は1に等しくなければなりません。これは式(5.33)では保証されません。この問題に対処するために、ポアソン確率にベルヌーイの成功確率πを掛けます。      これらの問題により、上記のハードルモデルをとして表現する必要があり ここで、、、yπ

(5.34)P(Y=y|x,z,β,γ)={1π^for y=0π^×exp(λ^)λ^y/y!1exp(λ^)for y=1,2,
λ^=exp(xβ)π^=logit1(zγ)xはポアソンモデルの共変量、はロジスティック回帰モデルの共変量、およびはそれぞれの回帰係数です... 。 zβ^γ^

2つのモデルを互いに完全に分離することにより(ハードルモデルが行うことのように思われます)、がポジティブカウントケースの予測にどのように組み込まれるかわかりません。しかし、2つの異なるモデルを実行するだけで関数を複製できた方法に基づいて、切り捨てられたポアソンでがどのように役割を果たすかわかりません全く回帰。π^hurdlelogit1(zγ^)

ハードルモデルを正しく理解していますか?2つは2つのシーケンシャルモデルを実行しているように見えます。1つ目はロジスティックです。第二に、場合を完全に無視するポアソン。誰かがビジネスとの混乱を解消できれば幸いです。y=0π^


それがハードルモデルであると私が正しい場合、より一般的に「ハードル」モデルの定義は何ですか?2つの異なるシナリオを想像してください。

  • 競争力スコア(1-(投票の勝者の割合-次点の投票の割合))を見て、選挙競争の競争力をモデル化することを想像してください。同順位がないため、これは[0、1)です(たとえば、1)。ハードルモデルはここで理にかなっています。なぜなら、1つのプロセス(a)が争われなかったからです。(b)そうでない場合、競争力を予測したものは何ですか?そのため、最初に0対(0、1)を分析するためにロジスティック回帰を行います。次に、ベータ回帰を実行して(0、1)ケースを分析します。

  • 典型的な心理学的研究を想像してください。応答は、従来のリッカートスケールと同様に[1、7]であり、7の巨大な天井効果があります。[1、7)対7のロジスティック回帰であるハードルモデルを実行し、すべてのケースでTobit回帰を実行できます観察された応答は7未満です。

これらの状況の両方を「ハードル」モデルと呼んでも、 2つのシーケンシャルモデル(最初のケースではロジスティック、次にベータ、ロジスティック、次に2番目のTobit)で推定しても安全でしょうか?


5
ハードルモデルは、2つの別個の(バイナリ+ゼロ切り捨て)モデルを実行することと同等であると思います。それが機能する技術的な理由は、最初のモデルがゼロ/非ゼロのみを使用してを推定することです。2番目のモデルは、ゼロ以外の応答条件としてを推定します。πλ
ベンボルカー

したがって、はすべてのに対してになりますか?π^1iy>0
マークホワイト

3
いいえ。条件付きモデルでは、項は除外されます。つまり、π^P(Y=y|Y>0)=exp(λ^)etc.
etc。

ああ、ありがとう。だから、スミスソンとマークルの方程式はで実装されているものとは異なるモデルを説明していると思いますpscl::hurdleが、ここの方程式5でも同じように見えます:cran.r-project.org/web/packages/pscl/vignettes/countreg.pdfまたは多分私は「クリックしてくれる基本的なものがまだ足りないのですか?
マークホワイト

4
同じモデルです。マイクとエドは、最も単純なケース(logit + Poisson)に焦点を当てていますhurdle()。これはのデフォルトです。ペア/ビネットでは、より一般的なビルディングブロックを強調しようとします。
アヒムZeileis

回答:


35

対数尤度の分離

ほとんどのハードルモデルは個別に推定できることは正しいです(順番にではなく)。その理由は、対数尤度を別々に最大化できる2つの部分に分解できるからです。これは、が(5.34)の単なるスケーリング係数であり、対数尤度の加法的項になるためです。π^

スミソンとマークルの表記: ここで、は(切り捨てられていない)ポアソン分布とはゼロ切り捨ての係数です。

(β,γ;y,x,z)=1(γ;y,z)+2(β;y,x)=i:yi=0log{1logit1(ziγ)}+i:yi>0log{logit1(ziγ)}+i:yi>0[log{f(yi;exp(xiβ)}log{1f(0;exp(xiβ)}]
f(y;λ)=exp(λ)λy/y!1f(0;λ)=1exp(λ)

次に、(バイナリロジットモデル)および(ゼロ切り捨てポアソンモデル)を個別に最大化できることが明らかになり、同じパラメーター推定値、共分散などがれます。それらは共同で最大化されます。1(γ)2(β)

同じ論理は、ゼロハードル確率がロジットモデルを通してパラメーター化されていない場合でも機能しますが、他のバイナリ回帰モデル、たとえば1で右打ち切りされたカウント分布、そしてもちろん、も別のカウント分布、たとえば負の二項分布。ゼロハードルと切り捨てられたカウント部分の間に共有パラメーターがある場合にのみ、分離全体が壊れます。πf()

顕著な例は、別々ので共通のパラメーターを持つ負の二項分布がモデルの2つのコンポーネントで使用される場合です。(これは、実装の後継であるR-Forgeのパッケージに含まれています。)μθhurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")countregpscl

具体的な質問

(a)完全に良いデータを捨てる:あなたの場合、はい、一般にいいえ。あなたは、単一のポアソンモデルからのデータを持っている余分なゼロを付けない(とはいえ、多くのゼロを)。したがって、ゼロとゼロ以外の個別のモデルを推定する必要はありません。ただし、2つの部分が異なるパラメーターによって実際に駆動される場合は、これを考慮する必要があります。

(b)データの多くがゼロであるため、電力の問題につながる可能性があります。必ずしもそうではありません。ここでは、観測の3分の1が「成功」(ハードルクロッシング)です。これは、バイナリ回帰モデルではあまり極端とは見なされません。(もちろん、個別のモデルを推定する必要がない場合、パワーが得られます。)

(c)基本的にそれ自体は「モデル」ではなく、2つの異なるモデルを順番に実行するだけです。これはより哲学的であり、「1つ」の答えをしようとはしません。代わりに、実用的な観点を指摘します。モデルの推定では、モデルが分離していることを強調すると便利です。これは、示されているように、推定に専用の関数が必要ない場合があるためです。たとえば、予測や残差などのモデルアプリケーションの場合、これを単一のモデルと見なす方が便利です。

(d)これらの状況の両方を「ハードル」モデルと呼ぶのは安全でしょうか:原則としてはい。ただし、専門用語はコミュニティによって異なる場合があります。たとえば、ハードルがゼロのベータ回帰は、一般に(そして非常に混乱を招くように)ゼロが膨張したベータ回帰と呼ばれます。個人的には、ベータ分布には膨らむことができるゼロがないため、後者は非常に誤解を招きますが、それはとにかく文献の標準用語です。さらに、tobitモデルは打ち切りモデルであり、したがってハードルモデルではありません。ただし、プロビット(またはロジット)モデルと切り捨てられた通常モデルによって拡張できます。計量経済学の文献では、これはクラッグ2部モデルとして知られています。

ソフトウェアのコメント

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関数として機能します。これにより、これらを個別のモデルではなく「1つの」モデルとして見やすくなります。

  • 適合度を評価するために、ルートグラムやランダム化された変位値残差プロットなどのグラフィック表示が利用可能です。(Kleiber&Zeileis、2016、The American Statistician70(3)、296–303。doi:10.1080 / 00031305.2016.1173590を参照してください。)

シミュレートされたデータ

シミュレートされたデータは、単一のポアソンプロセスから取得されます。e既知のリグレッサーとして扱われる場合、標準のポアソン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

これは、3つのモデルすべてが常に真のパラメーターを推定できることを反映しています。対応する標準エラーを見ると、このシナリオでは(ハードル部分は不要)、ポアソン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

標準情報基準では、真のポアソンGLMが最適なモデルとして選択されます。

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

また、Waldテストでは、ハードルモデルの2つのコンポーネントに有意差がないことが正しく検出されます。

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(0.5)の形状を持ち、ゼロが多い分布がある場合は、超過ゼロです。λ=0.5f(0;λ=0.5)60%
アヒムザイレイス

4

ゼロ膨張モデルとハードルモデルの違いは理解しにくいことに同意します。両方とも一種の混合モデルです。私が知ることができることから、重要な違いは、ゼロ膨張モデルでは、ゼロの質量を分布\ textit {値ゼロを取ることもできる}と混合することです。ハードルモデルの場合、ゼロより大きい質量のみをとる分布とゼロの質量を混合します。したがって、ゼロ膨張モデルでは、「構造ゼロ」(ゼロの質量に対応)と「サンプリングゼロ」を区別できます。 '混合しているモデルからの0の偶然の発生に対応します。もちろん、この識別は、分布の正しい選択を行うことに強く依存しています。ただし、たとえば、膨張していないポアソンがある場合、ポアソン成分に由来するゼロ(サンプリングゼロ)とゼロの質量に由来するゼロ(構造的ゼロ)を区別できます。ゼロ膨張モデルがあり、混合する分布にゼロの質量がない場合、それはハードルモデルとして解釈される可能性があります。


2種類のゼロの区別はモデル仕様から直接生じる必要性ですが、ハードルモデルに対して同じ種類の量を計算することは可能です。いわゆる構造ゼロもから計算することができる切り捨てられていないそのパラメータをもとにしていたにもかかわらず、度数分布(ポアソンを言う)切り捨てられたサンプル。構造的ゼロの確率は、ゼロの確率(全体的に、ゼロのハードル部分から)とゼロのサンプリングの確率の差です。
アヒムザイレイス

1

哲学的な側面に関しては、「いつ何かを単一のモデルと考えるべきか、2つの別々のモデルを考えるべきか」ということは、モデルパラメーターのサンプル推定値が相関していることに注目するのは興味深いかもしれません。

以下のシミュレーションのプロットでは、カウント部分の傾きと切片の間の相関関係がほとんど見られます。しかし、カウントの部分とハードルの部分の間にはわずかな関係もあります。パラメーターを変更すると、たとえばポアソン分布のラムダを小さくしたり、サンプルサイズを小さくしたりすると、相関が強くなります。

したがって、2つの別個のモデルと見なすべきではないと言います。または、実際には2つの推定値を互いに独立して計算できる場合でも、少なくとも何らかの関係があります。

相関関係

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]))

2つの部分間に相関関係があることはあまり意味がありません。しかし、おそらくポアソンモデルのパラメーターの推定値の離散レベルと、これらがゼロの数にどのように関係するかによる可能性があります。


これを複製できません。私にとって: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。いずれにせよ、R-Forgeのrhpois()fromパッケージcountregを使用すると、与えられたハードル交差確率piと基礎となる(切り捨てられていない)ポアソン期待値を持つハードルポアソンモデルからのシミュレーションが容易になりlambdaます。これらを使用した場合、ハードルがゼロの部分とカウントが切り捨てられた部分の間の経験的な相関関係は非常に小さくなります。
アヒムザイレイス

データ生成プロセス: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)は、推定がかなりうまく機能していることを示しています。
アヒムザイレイス

@AchimZeileis現時点では、エラーを調査してコメントする可能性はありません。しかし、とにかく、相関関係は、私が示したイメージでは非常に小さいものではありません。ポイントは、より哲学的/理論的でした。実際には、モデルを2つの独立した非統合ステップとして扱う場合、ほとんど問題はありません。
セクストスエンピリカス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.