Słownik metodologiczny · Modele regresji

Model hurdle – czym różni się od modelu z nadmiarem zer?

Model hurdle dzieli analizę zliczeń na dwie części: czy wynik jest większy od zera i ile wynosi, gdy jest dodatni. Pokazujemy, kiedy wybrać go zamiast ZINB, przykład w R z dwiema częściami modelu i gotowy opis do pracy.

Strona główna / Słownik / Model hurdle
W skrócie: Model hurdle to dwuczęściowy model dla zliczeń: część logistyczna opisuje, czy wynik jest większy od zera, a część ucięta w zerze (Poisson lub ujemna dwumianowa) – liczbę zdarzeń u osób z wynikiem dodatnim. W odróżnieniu od modelu z nadmiarem zer wszystkie zera pochodzą tu z jednego procesu.

Co to jest model hurdle?

Model hurdle (ang. hurdle model, model z barierą) to dwuczęściowy model dla zliczeń z dużą liczbą zer. Pierwsza część, zwykle logistyczna, opisuje, czy wynik przekracza „barierę” zera. Druga opisuje liczbę zdarzeń tylko u osób z wynikiem dodatnim, za pomocą rozkładu Poissona lub ujemnego dwumianowego uciętego w zerze. Cragg (1971) zaproponował, by o tym, czy wartość jest niezerowa, i o jej wielkości decydowały różne parametry. Mullahy (1986) rozwinął tę ideę dla zliczeń.

Hurdle a model z nadmiarem zer

W modelu z nadmiarem zer (ZIP, ZINB) zera mają dwa źródła: zera strukturalne i przypadkowe zera osób, które mogły mieć zdarzenie. W modelu hurdle wszystkie zera pochodzą z jednego procesu. Każda osoba, która przekroczy barierę, ma co najmniej jedno zdarzenie. Pasuje to do decyzji typu „czy w ogóle”: czy ktoś pali, czy pije, czy korzysta z poradni. Atkins i in. (2013) omawiają oba podejścia na danych o używaniu substancji.

Przykład

W symulowanych danych 400 osób podało liczbę papierosów wypalanych dziennie; 226 nie paliło. Zwykła regresja ujemna dwumianowa przewidywała 208.7 zer, a model hurdle odtwarza ich liczbę dokładnie (226.0). Ma też niższe AIC: 1596.9 wobec 1731.1. Wyższy stres wiązał się z większą szansą palenia, iloraz szans OR = 1.79, 95% CI [1.44, 2.22], p < .001. Wśród palących nie wiązał się wyraźnie z liczbą papierosów, IRR = 1.10, 95% CI [0.99, 1.21], p = .082.

Jak opisać w pracy

Liczbę papierosów analizowano modelem hurdle: część logistyczna opisywała palenie (tak / nie), a część ujemna dwumianowa ucięta w zerze – liczbę papierosów u palących. Wzrost stresu o jednostkę wiązał się z większą szansą palenia, OR = 1.79, 95% CI [1.44, 2.22], p < .001, ale nie z liczbą papierosów u palących, IRR = 1.10, 95% CI [0.99, 1.21], p = .082.

Na co uważać

  • Czytaj dwie części osobno. Predyktor może działać tylko na jedną z nich, jak stres w przykładzie.
  • Uzasadnij wybór teorią. Jeśli część zer to przypadek (ktoś pali, ale w tym tygodniu nie zapalił), lepszy może być ZINB.
  • W R model daje funkcja hurdle() z pakietu pscl. Obie części można też dopasować osobno, bo ich wiarygodności się rozdzielają.

Porównanie modeli NB, ZINB i hurdle na jednym zbiorze pokazuje wpis Regresja dla zliczeń krok po kroku.

Przykład reprodukowalny

Model hurdle w R

Kod dopasowuje obie części modelu hurdle osobno: regresję logistyczną dla wyniku większego od zera i ucięty model ujemny dwumianowy (VGAM::vglm(..., family = posnegbinomial())) dla wyników dodatnich. Na koniec porównuje liczbę przewidywanych zer i AIC ze zwykłą regresją ujemną dwumianową.

Liczba papierosów: część zerowa, część dodatnia i porównanie z NB

Dane wejściowe: liczba papierosów wypalanych dziennie i wynik skali stresu (w przybliżeniu na skali z) u 400 osób (dane symulowane, set.seed(293)).

Co odczytać: liczbę zer, OR dla stresu w części logistycznej, IRR z CI i p w części uciętej, liczbę zer przewidywaną przez NB i model hurdle oraz AIC obu modeli.

R
suppressPackageStartupMessages({library(MASS); library(VGAM)})
set.seed(293)
n <- 400
stres <- round(rnorm(n), 2)                              # wynik z skali stresu (dane symulowane)
pali <- rbinom(n, 1, plogis(-0.4 + 0.7 * stres))         # część 1: czy w ogóle pali
ile <- sapply(stres, function(s) { y <- 0
  while (y == 0) y <- rnegbin(1, mu = exp(2.2 + 0.15 * s), theta = 3); y })  # część 2: ile, gdy > 0
papierosy <- pali * ile
table(papierosy == 0)                                    # TRUE = osoby niepalące
round(c(M = mean(papierosy), max = max(papierosy)), 2)
# Część 1 (bariera): logit P(Y > 0)
m_zero <- glm(I(papierosy > 0) ~ stres, family = binomial)
round(exp(cbind(OR = coef(m_zero), confint.default(m_zero))), 2)
round(summary(m_zero)$coefficients["stres", ], 3)
# Część 2: ucięty rozkład ujemny dwumianowy tylko dla Y > 0
m_plus <- vglm(papierosy ~ stres, family = posnegbinomial(), subset = papierosy > 0)
b <- coef(m_plus)["stres"]; se <- sqrt(vcov(m_plus)["stres", "stres"])
round(exp(c(IRR = b, lower = b - 1.96 * se, upper = b + 1.96 * se)), 2)
round(c(z = unname(b / se), p = 2 * pnorm(-abs(unname(b / se)))), 3)
# Liczba zer przewidywana przez zwykły model NB i przez model hurdle
m_nb <- glm.nb(papierosy ~ stres)
round(c(obserwowane = sum(papierosy == 0),
        NB = sum(dnbinom(0, mu = fitted(m_nb), size = m_nb$theta)),
        hurdle = sum(1 - fitted(m_zero))), 1)
round(c(AIC_NB = AIC(m_nb), AIC_hurdle = AIC(m_zero) + AIC(m_plus)), 1)
Wynik w R

FALSE  TRUE 
  174   226 
    M   max 
 4.08 43.00 
              OR 2.5 % 97.5 %
(Intercept) 0.74  0.60   0.90
stres       1.79  1.44   2.22
  Estimate Std. Error    z value   Pr(>|z|) 
     0.581      0.111      5.251      0.000 
  IRR.stres lower.stres upper.stres 
       1.10        0.99        1.21 
    z     p 
1.740 0.082 
obserwowane          NB      hurdle 
      226.0       208.7       226.0 
    AIC_NB AIC_hurdle 
    1731.1     1596.9 

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiety MASS i VGAM). W pracy podaj wersję R, której faktycznie użyto (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. MASS (wersja 7.3-65): Venables, W. N., & Ripley, B. D. (2002). Modern applied statistics with S (4th ed.). Springer. https://doi.org/10.1007/978-0-387-21706-2
  3. VGAM (wersja 1.1-14): Yee, T. W. (2026). VGAM: Vector generalized linear and additive models [R package]. https://CRAN.R-project.org/package=VGAM

Najczęstsze pytania

Kiedy wybrać model hurdle zamiast modelu z nadmiarem zer?

Gdy zero oznacza decyzję „wcale” i każdy, kto ją przekroczy, ma co najmniej jedno zdarzenie, np. palenie. Gdy część zer jest przypadkowa u osób, które mogły mieć zdarzenie, rozważ ZINB.

Jak interpretować dwie części modelu hurdle?

Część zerowa daje iloraz szans wyniku większego od zera. Część dodatnia daje iloraz częstości (IRR) liczby zdarzeń, ale tylko wśród osób, które przekroczyły zero.

Jak dopasować model hurdle w R?

Funkcją hurdle(y ~ x, dist = "negbin") z pakietu pscl. Bez niego dopasuj osobno glm(y > 0 ~ x, family = binomial) i model ucięty w zerze, np. z pakietu VGAM.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Atkins, D. C., Baldwin, S. A., Zheng, C., Gallop, R. J., & Neighbors, C. (2013). A tutorial on count regression and zero-altered count models for longitudinal substance use data. Psychology of Addictive Behaviors, 27(1), 166–177. https://doi.org/10.1037/a0029508 ● Otwarty dostęp: pełny tekst
  2. Cragg, J. G. (1971). Some statistical models for limited dependent variables with application to the demand for durable goods. Econometrica, 39(5), 829–844. https://doi.org/10.2307/1909582
  3. Mullahy, J. (1986). Specification and testing of some modified count data models. Journal of Econometrics, 33(3), 341–365. https://doi.org/10.1016/0304-4076(86)90002-3 ● Otwarty dostęp

Cytowania BibTeX

@article{atkins2013tutorial, author={Atkins, David C. and Baldwin, Scott A. and Zheng, Cheng and Gallop, Robert J. and Neighbors, Clayton}, title={{A tutorial on count regression and zero-altered count models for longitudinal substance use data}}, journal={Psychology of Addictive Behaviors}, year={2013}, volume={27}, number={1}, pages={166--177}, doi={10.1037/a0029508}}
@article{cragg1971some, author={Cragg, John G.}, title={{Some statistical models for limited dependent variables with application to the demand for durable goods}}, journal={Econometrica}, year={1971}, volume={39}, number={5}, pages={829--844}, doi={10.2307/1909582}}
@article{mullahy1986specification, author={Mullahy, John}, title={{Specification and testing of some modified count data models}}, journal={Journal of Econometrics}, year={1986}, volume={33}, number={3}, pages={341--365}, doi={10.1016/0304-4076(86)90002-3}}
R