“허들 모델”은 실제로 하나의 모델입니까? 아니면 두 개의 분리 된 순차적 모델 만?


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의 0과 31의 양의 카운트로 카운트 데이터가 있습니다. 내 질문은 허들 모델에 관한 것이기 때문에 이것이 데이터 생성 절차의 정의에 의한 Poisson 프로세스라는 점을 잊지 마십시오.

허들 모델에 의해 이러한 초과 제로를 처리하고 싶다고 가정 해 봅시다. 내가 읽은 바에 따르면 허들 모델 자체는 실제 모델이 아닌 것 같습니다. 그들은 두 가지 다른 분석을 순차적으로 수행하고 있습니다. 먼저 값이 양수인지 0인지를 예측하는 로지스틱 회귀 분석입니다. 둘째, 0 이 아닌 경우 만 포함하여 0으로 절단 된 포아송 회귀 분석입니다 . 이 두 번째 단계는 (a) 완벽하게 좋은 데이터를 버리기 때문에 (b) 많은 데이터가 0이기 때문에 전력 문제로 이어질 수 있고 (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 ***
---

양의 카운트 사례를 추정 할 때 관측치가 0이 아닌 확률을 포함하기 때문에 모델의 여러 가지 수학적 표현이 있기 때문에 이것은 나에게 보이지 않습니다. 그러나 위에서 실행 한 모델은 서로 완전히 무시합니다. 예를 들어, 이는 범주 형 및 연속 제한 종속 변수에 대한 Smithson & Merkle의 일반화 선형 모형 의 128 페이지 5 장에 나와 있습니다 .

... 둘째, 가 임의의 값 (0과 양의 정수)을 가정 할 확률은 1과 같아야합니다. 이것은 식 (5.33)에서 보장되지 않습니다. 이 문제를 처리하기 위해 포아송 확률에 Bernoulli 성공 확률 π을 곱합니다 .      이러한 문제는 위의 허들 모델을 여기서 , ,yπ

...λ=EXP(Xβ)π=LOgIt-1(Zγ)X(Z)βγ

(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β^γ^

두 모델을 서로 완전히 분리하여 (허들 모델이하는 것처럼 보이는), 가 양수 사례 예측에 어떻게 통합 되는지 알 수 없습니다 . 그러나 두 가지 다른 모델을 실행 하여 함수 를 복제하는 방법에 따라 이 잘린 포아송에서 어떻게 역할을하는지 알 수 없습니다 전혀 회귀. 로짓-1(Z의 γ )π^hurdlelogit1(zγ^)

허들 모델을 올바르게 이해하고 있습니까? 그들은 두 개의 순차적 모델을 실행하는 것처럼 보입니다. 첫째, 물류; 둘째, Poisson은 경우를 완전히 무시 합니다. 비즈니스 와의 혼란을 해소 할 수 있다면 감사하겠습니다 .π를y=0π^


그것이 허들 모델이 무엇인지 정확하다면, 더 일반적으로 "허들"모델의 정의는 무엇입니까? 서로 다른 두 가지 시나리오를 상상해보십시오.

  • 경쟁력 점수 (1-(우승자의 투표 비율-주자 상승의 투표 비율)를보고 선거 경쟁의 모델링 경쟁력을 상상해보십시오. 관계가 없기 때문에 (0, 1)입니다 (예 : 1). 한 가지 과정이 있기 때문에 여기서 허들 모델이 의미가 있습니다. (b) 그렇지 않다면 경쟁력을 예측 한 것은 무엇입니까? 따라서 먼저 로지스틱 회귀 분석을 수행하여 0과 (0, 1)을 분석합니다. 그런 다음 베타 회귀 분석을 수행하여 (0, 1) 사례를 분석합니다.

  • 전형적인 심리적 연구를 상상해보십시오. 반응은 전통적인 리 커트 척도와 같이 [1, 7]이며, 7에 큰 천장 효과가 있습니다. [1, 7) vs. 관찰 된 반응은 <7입니다.

두 가지 순차적 모델 (첫 번째 경우에는 물류 및 베타, 첫 번째 경우에는 물류, 그런 다음 두 번째에서는 Tobit)로 두 상황을 추정 하더라도이 두 가지 상황을 "허들"모델이라고 부르는 것이 안전 합니까?


5
허들 모델은 두 개의 별도 (이진 + 제로 자른) 모델을 실행하는 것과 같습니다 . 기술적 인 이유는 첫 번째 모델이 0/0이 아닌 값만 사용하여 를 추정하기 때문입니다 . 를 추정하기 위해 0이 아닌 응답에 대한 두 번째 모델 조건 . λπλ
벤 볼커

그래서 다음 것이다 매에 대한 ? π^1iy>0
Mark White

3
아니오. 조건부 모델은 항, 즉π^P(Y=y|Y>0)=exp(λ^)etc.
생략합니다

아 고마워 따라서 Smithson과 Merkle의 방정식이에서 구현 된 것과 다른 모델을 설명한다고 가정 pscl::hurdle하지만 방정식 5에서 다음과 같습니다. cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf 또는 아마도 여전히 클릭 할 수있는 기본 항목이 누락되어 있습니까?
Mark White

4
같은 모델입니다. Mike와 Ed는의 가장 간단한 경우 (logit + Poisson)에 중점을 둡니다 hurdle(). 우리는 짝 / 비 네트에서보다 일반적인 빌딩 블록을 강조하려고합니다.
Achim Zeileis

답변:


35

로그 우도 분리

대부분의 허들 모델을 개별적 으로 추정 할 수있는 것이 맞습니다 ( 순차 대신에 ). 그 이유는 로그 가능성이 두 부분으로 분해되어 개별적으로 최대화 될 수 있기 때문입니다. 때문이다 π는 로그 우도의 첨가제 용어된다 (5.34)에서 단지 스케일링 인자이다.π^

Smithson & Merkle의 표기법에서 : 여기서f(y;λ)=exp(λ)λy/y!

(β,γ;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!상기 (untruncated) 푸 아송 분포 및 밀도 제로 절단의 요인이다.1f(0;λ)=1exp(λ)

그러면 (이진 로짓 모형)과 2 ( β ) (제로 잘린 포아송 모형)를 따로 최대화하여 매개 변수 추정치, 공분산 등을 유발할 수 있습니다. 공동으로 최대화됩니다.1(γ)2(β)

πf()

μθhurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")countregpscl

구체적인 질문

(a) 완벽하게 좋은 데이터를 버리는 경우 : 일반적으로 아니요. 초과 0이없는 단일 포아송 모델의 데이터가 있습니다 ( 많은 0 임). 따라서 0과 0이 아닌 다른 모델을 추정 할 필요는 없습니다. 그러나 두 부분이 실제로 다른 매개 변수에 의해 구동되는 경우이를 고려해야합니다.

(b) 많은 데이터가 0이기 때문에 전원 문제가 발생할 수 있습니다 . 반드시 그런 것은 아닙니다. 여기에는 "성공"인 관찰의 3 분의 1이 있습니다 (허들 교차점). 이것은 이진 회귀 모델에서 매우 극단적 인 것으로 간주되지 않습니다. (물론, 별도의 모델을 추정 할 필요가 없다면 전력을 얻을 수 있습니다.)

(c) 기본적으로 그 자체로는 '모델'이 아니라 순차적으로 두 가지 다른 모델을 실행합니다. 이것은 더 철학적이며 "하나의"대답을하려고하지 않습니다. 대신, 실용적인 관점을 지적하겠습니다. 모형 추정의 경우 모형에 별도의 기능이 필요하다는 점을 강조하는 것이 편리 할 수 ​​있습니다. 예를 들어 예측 또는 잔차 등의 모델 적용의 경우 단일 모델로 보는 것이 더 편리 할 수 ​​있습니다.

(d)이 두 가지 상황을 모두 '허들'모델이라고 부르는 것이 안전 할 것인가 : 원칙적으로 그렇다. 그러나 전문 용어는 커뮤니티마다 다를 수 있습니다. 예를 들어, 제로 허드 베타 회귀는 제로 팽창 베타 회귀라고하는 것이 더 일반적입니다 (매우 혼란 스럽습니다). 개인적으로, 베타 배포판에는 팽창 할 수있는 0이 없기 때문에 후자가 매우 오해의 소지가 있습니다. 그러나 그것은 문학의 표준 용어입니다. 또한, 토비트 모델은 검열 된 모델이므로 허들 모델이 아닙니다. 그러나 프로 빗 (또는 로짓) 모델과 잘린 정규 모델에 의해 확장 될 수 있습니다 . 계량 경제학 문헌에서 이것은 Cragg 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 함수로 사용됩니다. 이를 통해 개별 모델이 아닌 "하나의"모델로 볼 수 있습니다.

  • 적합도를 평가하기 위해 루트 그램 및 무작위 양자화 잔차 그림과 같은 그래픽 디스플레이를 사용할 수 있습니다. (Kleiber & Zeileis, 2016, The American Statistician , 70 (3), 296–303. doi : 10.1080 / 00031305.2016.1173590 참조 )

시뮬레이션 된 데이터

시뮬레이션 된 데이터는 단일 포아송 프로세스에서 가져옵니다. e알려진 회귀 자로 취급 되면 표준 포아송 GLM이됩니다. 하면 e미지의 잡음 성분 인 효과로서, 다음 음 이항 모델 또는 단 등의 연속 혼합물 또는 임의의 효과의 다른 종류에 의해 포착 될 수 overdispersion 조금 일으키는 일부 관측 이질성가있다 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

이는 세 모델 모두가 실제 매개 변수를 일관되게 추정 할 수 있음을 반영합니다. 해당 표준 오류를 살펴보면이 시나리오에서 (허리 부품이 필요없는) Poisson 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에는 초과 제로 또는 힌트가 없다는 것을 잘 데이터를 맞는 것을 보여준다.

rootogram + qqrplot


초과 0과 많은 0의 차이점은 무엇입니까?
다다미

1
λ=0.5f(0;λ=0.5)60%

4

제로 팽창 모델과 허들 모델의 차이점을 이해하기 어렵다는 데 동의합니다. 둘 다 일종의 혼합 모델입니다. 내가 알 수 있듯이 중요한 차이점은 제로 팽창 모델에서 0의 질량을 분포 \ textit {와 0을 취할 수도 있음}과 혼합한다는 것입니다. 장애물 모델의 경우 0보다 큰 값을 취하는 분포와 0에서 질량을 혼합합니다. 따라서 0 팽창 모델에서는 '구조적 0'(0의 질량에 해당)과 '샘플링 0'을 구분할 수 있습니다 '는 혼합하고있는 모형에서 0이 나타날 확률에 해당합니다. 물론이 식별은 올바른 분포 선택에 달려 있습니다! 예를 들어 포아송이 0 인 경우 Poisson 구성 요소에서 오는 0 (샘플링 0)과 질량에서 0에서 오는 0 (구조적 0)을 구별 할 수 있습니다. 팽창 모델이 0이고 혼합중인 분포의 질량이 0이 아닌 경우 장애물 모델로 해석 될 수 있습니다.


두 종류의 0 사이의 구별은 모델 사양에서 직접 나오는 것이 필요하지만, 허들 모델에 대해 동일한 종류의 수량을 계산할 수 있습니다. 소위 제로 구성도로부터 산출 될 수 untruncated 매개 변수는에 기초 하였다하더라도 횟수 분포 (포아송 말) 절단 샘플. 구조적 제로에 대한 확률은 제로에 대한 확률 (전체적으로, 제로 장애물 부분으로부터)과 제로 샘플링에 대한 차이이다.
Achim Zeileis

1

철학적 측면과 관련하여 "우리가 무언가를 단일 모델로 고려해야 할 때와 두 개의 개별 모델을 고려해야 할 때" 는 모수-모수의 표본 추정치가 서로 관련되어 있다는 점에 주목하는 것이 좋습니다.

시뮬레이션이있는 아래 그림에서 대부분 경사와 카운트 부분의 절편 사이의 상관 관계를 볼 수 있습니다. 그러나 카운트 부분과 장애물 부분 사이에는 약간의 관계가 있습니다. 예를 들어, 포아송 분포의 람다를 작게하거나 표본 크기를 작게 설정하면 매개 변수를 변경하면 상관 관계가 더 강력 해집니다.

따라서 두 가지 모델 로 간주해서는 안된다고 말하고 싶습니다 . 또는 실제로 두 추정치를 서로 독립적으로 계산할 수있는 경우에도 약간의 관계가 있습니다.

상관 관계

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

두 부분 사이에 상관 관계가 있다는 것은 의미가 없습니다. 그러나 포아송 모형의 모수에 대한 이산 추정치 수준과이 값이 0의 수와 어떤 관련이있을 수 있습니다.


이것을 복제 할 수 없습니다. 나에게 : 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. 이것을 사용하면 제로 허들과 잘린 카운트 부분 사이의 경험적 상관 관계가 매우 작습니다.
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.