Является ли «модель препятствий» действительно одной моделью? Или только две отдельные, последовательные модели?


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 положительным числом. Не берите в голову на данный момент, что это, по определению процедуры генерации данных, процесс Пуассона, потому что мой вопрос о моделях препятствий.

Допустим, я хочу справиться с этими избыточными нулями с помощью модели препятствий. Из моего прочтения о них оказалось, что модели с препятствиями сами по себе не являются реальными моделями - они просто последовательно проводят два разных анализа. Во-первых, логистическая регрессия, предсказывающая, является ли значение положительным по сравнению с нулем. Во-вторых, усеченная до нуля регрессия Пуассона с включением только ненулевых случаев. Этот второй шаг показался мне неправильным, потому что он (а) выбрасывает совершенно хорошие данные, что (б) может привести к проблемам с электропитанием, поскольку большая часть данных является нулями, и (в) сама по себе не является «моделью» , но просто последовательно работает две разные модели.

Так что я попробовал «модель препятствий» вместо того, чтобы просто проводить логистическую регрессию Пуассона с нулевой усечением отдельно. Они дали мне идентичные ответы (для краткости я сокращаю вывод):

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

Это кажется мне неприятным, поскольку многие различные математические представления модели включают вероятность того, что наблюдение является ненулевым при оценке случаев положительного счета, но модели, которые я запускал выше, полностью игнорируют друг друга. Например, это из главы 5, стр. 128 обобщенных линейных моделей Smithson & Merkle для категориальных и непрерывных ограниченных зависимых переменных :

... Во-вторых, вероятность того, что принимает любое значение (ноль и натуральные числа), должна равняться единице. Это не гарантируется в уравнении (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β^γ^

Делая две модели полностью отделенными друг от друга - что, похоже, и делают модели с препятствиями, - я не понимаю, как включается в прогнозирование случаев положительного числа. Но исходя из того, как мне удалось воспроизвести функцию, просто запустив две разные модели, я не понимаю, как играет роль в усеченном Пуассоне регресс на всех.π^hurdlelogit1(zγ^)

Я правильно понимаю модели препятствий? Похоже, они просто работают по двум последовательным моделям: во-первых, логистика; Во-вторых, это Пуассон, полностью игнорирующий случаи, когда . Я был бы признателен, если бы кто-то мог разобраться в моем замешательстве с бизнесом .y=0π^


Если я прав, это то, что это модели препятствий, каково определение модели «препятствий», в более общем смысле? Представьте себе два разных сценария:

  • Представьте себе моделирование конкурентоспособности избирательных гонок, взглянув на показатели конкурентоспособности (1 - (доля голосов победителей - доля голосов победителей)). Это [0, 1), потому что нет связей (например, 1). Модель препятствий имеет здесь смысл, потому что есть один процесс (а), выборы были неоспоримыми? и (б) если это не так, что предсказывало конкурентоспособность? Таким образом, мы сначала делаем логистическую регрессию для анализа 0 против (0, 1). Затем мы проводим бета-регрессию для анализа (0, 1) случаев.

  • Представьте себе типичное психологическое исследование. Ответы [1, 7], как и в традиционной шкале Лайкерта, с огромным потолочным эффектом в 7. Можно создать модель препятствий, которая представляет собой логистическую регрессию [1, 7) против 7, а затем регрессию Тобита для всех случаев, когда наблюдаемые ответы <7.

Будет ли безопасным называть обе эти ситуации «барьерными» моделями , даже если я оцениваю их с помощью двух последовательных моделей (логистика и затем бета в первом случае, логистика и затем Тобит во втором)?


5
Я полагаю, что модели с препятствиями эквивалентны использованию двух отдельных (двоичных + усеченных) моделей. Техническая причина, по которой это работает, заключается в том, что первая модель использует только ноль / ненулевое значение для оценки ; вторая модель условий на ненулевой отклик на оценку . πλ
Бен Болкер

Таким образом, будет равен для каждого , которого ? π^1iy>0
Марк Уайт

3
Нет. Условная модель термин , т.е. ...π^P(Y=y|Y>0)=exp(λ^)etc.
Бен Болкер,

Ах, спасибо. Итак, я полагаю, что уравнение Смитсона и Меркля описывает другую модель, нежели реализовано в ней pscl::hurdle, но в уравнении 5 оно выглядит так же: cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf Или, может быть, я мне все еще не хватает чего-то простого, что заставило бы меня щелкнуть?
Марк Уайт

4
Это та же модель. Майк и Эд фокусируются на простейшем случае (логит + пуассон), который используется по умолчанию в hurdle(). В нашей паре / виньетке мы стараемся подчеркнуть более общие строительные блоки.
Ахим Цейлейс

Ответы:


35

Разделение логарифмической вероятности

Это верно, что большинство моделей препятствий можно оценить отдельно (я бы сказал, а не последовательно ). Причина в том, что логарифмическая вероятность может быть разложена на две части, которые можно максимизировать отдельно. Это связано с тем, что - это просто масштабный коэффициент в (5.34), который становится аддитивным членом в логарифмическом правдоподобии.π^

В обозначениях Smithson & Merkle: где - плотность (не усеченного) пуассоновского распределения, а - коэффициент от нулевого усечения.

(β,γ;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()

Ярким примером может служить случай, когда в двух компонентах модели используются отрицательные биномиальные распределения с отдельными параметрами но общими параметрами . (Это доступно в в пакете с R-Фордж, преемника реализации.)μθhurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")countregpscl

Конкретные вопросы

(а) Отбрасывание совершенно хороших данных: в вашем случае да, вообще нет. У вас есть данные из одной модели Пуассона без лишних нулей (хотя и многих нулей ). Следовательно, нет необходимости оценивать отдельные модели для нулей и ненулей. Однако, если две части действительно управляются разными параметрами, это необходимо учитывать.

(б) Может привести к проблемам с питанием, так как большая часть данных является нулями: не обязательно. Здесь у вас есть треть наблюдений, которые являются «успехами» (преодоление препятствий). Это не будет считаться очень экстремальным в модели бинарной регрессии. (Конечно, если нет необходимости оценивать отдельные модели, вы бы набрали силу.)

(c) По сути, это не «модель» сама по себе, а просто последовательная работа двух разных моделей: это более философски, и я не буду пытаться дать «один» ответ. Вместо этого я укажу прагматические точки зрения. Для оценки модели может быть удобно подчеркнуть, что модели являются отдельными, потому что - как вы показываете - вам может не потребоваться выделенная функция для оценки. Для применения модели , например, для прогнозов или остатков и т. Д., Может быть удобнее рассматривать это как единую модель.

(d) Было бы безопасно называть обе эти ситуации моделями «препятствий»: в принципе, да. Тем не менее, жаргон может варьироваться в зависимости от сообщества. Например, бета-регрессия с нулевым барьером чаще (и очень запутанно) называется бета-регрессией с нулевым раздуванием. Лично я нахожу последнее очень вводящим в заблуждение, потому что бета-дистрибутив не имеет нулей, которые могли бы быть завышены - но это все равно стандартный термин в литературе. Более того, модель тобита является цензурированной моделью и, следовательно, не моделью препятствий. Однако он может быть расширен за счет пробитной (или логитовой) модели плюс усеченная нормальная модель. В литературе по эконометрике это называется моделью Крэгга, состоящей из двух частей.

Комментарии к программному обеспечению

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это неизвестный компонент шума, то существует некоторая ненаблюдаемая неоднородность, вызывающая небольшую избыточную дисперсию, которая может быть уловлена ​​отрицательной биномиальной моделью или каким-либо другим видом непрерывной смеси или случайным эффектом и т. Д. Однако, поскольку эффект 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

Стандартные критерии информации будут выбирать истинную Пуассона GLM в качестве лучшей модели:

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

И тест Вальда правильно определил бы, что два компонента модели препятствий существенно не отличаются:

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)показывает, что Poisson GLM очень хорошо вписывается в данные и что нет никаких дополнительных нулей или намеков на дальнейшие ошибочные спецификации.

rootogram + qqrplot


В чем разница между избыточными нулями и многими нулями?
татами

1
Пример: распределение Пуассона с ожиданием имеет вероятность около . Это, безусловно, много нулей . Однако, если у вас есть распределение, имеющее форму Пуассона (0,5), но с большим количеством нулей, то это избыточные нули . λ=0.5f(0;λ=0.5)60%
Ахим Цейлейс

4

Я согласен, что разницу между моделями с нулевой раздувкой и препятствиями трудно понять. Оба являются своего рода смешанной моделью. Из того, что я могу сказать, важное отличие состоит в том, что в модели с нулевым раздувом вы смешиваете массу в нуле с распределением \ textit {, которое также может принимать значение ноль}. Для модели препятствий вы смешиваете массу в нуле с распределением, которое принимает значения только больше 0. Таким образом, в модели с нулевым раздувом вы можете различать «структурные нули» (соответствующие массе в нуле) и «выборочные нули» 'соответствует случайному появлению 0 из модели, в которую вы смешиваете. Конечно, эта идентификация сильно зависит от правильного выбора распределения! Но, если у вас есть Пуассон с нулевой раздувкой, например, Вы можете различить нули, которые берутся из компонента Пуассона (выборочные нули), и нули, которые берутся из массы в нуле (структурные нули). Если у вас есть модель с нулевым раздувом, а распределение, в котором вы смешиваете, не имеет массы в нуле, это можно интерпретировать как модель с препятствиями.


В то время как различие между двумя типами нулей является необходимостью, которая вытекает непосредственно из спецификации модели, можно вычислить такую ​​же величину для модели с препятствиями. Так называемые структурные нули также могут быть вычислены по неусеченному распределению числа (скажем, по Пуассону), даже если его параметры основаны на усеченной выборке. Вероятность для структурных нулей - это тогда разница между вероятностью для нуля (в целом, от части с нулевым барьером) и для нулей выборки.
Ахим Цейлейс

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

Не имеет особого смысла, что между этими двумя частями есть корреляция. Но, возможно, это связано с дискретными уровнями оценок параметров в модели Пуассона и тем, как они соотносятся с числом нулей.


Я не могу повторить это. Для меня: 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из R-Forge легче моделировать из модели Пуассона с препятствиями с заданной вероятностью пересечения препятствий 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 на данный момент у меня нет возможности посмотреть на вашу ошибку и прокомментировать ее. Но в любом случае корреляция не более чем очень мала в изображении, которое я показал. Дело было более философским / теоретическим. На практике у вас, скорее всего, будут небольшие проблемы, если вы будете рассматривать модель как два отдельных, не интегрированных шага.
Секст Эмпирик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.