Là một mô hình rào cản của người Viking thực sự là một mô hình? Hay chỉ là hai mô hình riêng biệt, tuần tự?


25

Xem xét mô hình chướng ngại vật dự đoán dữ liệu đếm ytừ một người dự đoán bình thường 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 

Trong trường hợp này, tôi có dữ liệu đếm với 69 số không và 31 số dương. Không bao giờ nghĩ rằng đây là, theo định nghĩa của thủ tục tạo dữ liệu, một quy trình Poisson, bởi vì câu hỏi của tôi là về các mô hình vượt rào.

Giả sử tôi muốn xử lý các số 0 thừa này bằng mô hình chướng ngại vật. Từ việc tôi đọc về chúng, có vẻ như các mô hình vượt rào không phải là mô hình thực tế trên mỗi se họ đang thực hiện hai phân tích khác nhau theo trình tự. Đầu tiên, hồi quy logistic dự đoán giá trị có dương so với không. Thứ hai, một hồi quy Poisson không cắt ngắn chỉ bao gồm các trường hợp khác không. Bước thứ hai này cảm thấy sai đối với tôi vì nó (a) vứt bỏ dữ liệu hoàn toàn tốt, điều này (b) có thể dẫn đến các vấn đề về điện vì phần lớn dữ liệu là số không và (c) về cơ bản không phải là "mô hình" trong chính nó , nhưng chỉ tuần tự chạy hai mô hình khác nhau.

Vì vậy, tôi đã thử một "mô hình chướng ngại vật" thay vì chỉ chạy hồi quy Poisson logistic và không cắt ngắn. Họ đã cho tôi câu trả lời giống hệt nhau (tôi viết tắt là đầu ra, vì sự ngắn gọn):

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

Điều này có vẻ khó hiểu với tôi vì nhiều biểu diễn toán học khác nhau của mô hình bao gồm xác suất quan sát là khác không trong ước tính các trường hợp đếm dương, nhưng các mô hình tôi chạy ở trên hoàn toàn bỏ qua nhau. Ví dụ, đây là từ Chương 5, trang 128 của Mô hình tuyến tính tổng quát của Smithson & Merkle cho các biến phụ thuộc giới hạn phân loại và liên tục :

... Thứ hai, xác suất mà giả định bất kỳ giá trị nào (không và số nguyên dương) phải bằng một. Điều này không được đảm bảo trong phương trình (5.33). Để giải quyết vấn đề này, chúng tôi nhân xác suất Poisson với xác suất thành công Bernoulli π .      Các vấn đề này yêu cầu chúng tôi thể hiện mô hình rào cản ở trên là trong đó , ,yπ

(5.34)P(Y=y|x,z,β,γ)={1π^for y=0π^×exp(λ^)λ^y/y!1exp(λ^)for y=1,2,
λ^=exp(xβ)π^=logit1(zγ)xlà các đồng biến cho mô hình Poisson, là các biến số cho mô hình hồi quy logistic và và là các hệ số hồi quy tương ứng ... . zβ^γ^

Bằng cách thực hiện hai mô hình tách biệt hoàn toàn với một mô hình khác, dường như đó là những mô hình vượt rào, tôi không thấy được kết hợp như thế nào để dự đoán các trường hợp đếm tích cực. Nhưng dựa trên cách tôi có thể sao chép chức năng bằng cách chỉ chạy hai mô hình khác nhau, tôi không thấy cách đóng vai trò trong Poisson bị cắt ngắn hồi quy nào cả.π^hurdlelogit-1(zγ^)

Tôi có hiểu mô hình rào cản chính xác không? Có vẻ như hai người chỉ đang chạy hai mô hình tuần tự: Thứ nhất, một hậu cần; Thứ hai, một Poisson, hoàn toàn bỏ qua các trường hợp trong đó . Tôi sẽ đánh giá cao nếu ai đó có thể giải tỏa sự nhầm lẫn của tôi với doanh nghiệp .πy= =0π^


Nếu tôi đúng rằng đó là mô hình rào cản là gì, định nghĩa của mô hình "rào cản", nói chung là gì? Hãy tưởng tượng hai kịch bản khác nhau:

  • Hãy tưởng tượng mô hình hóa khả năng cạnh tranh của các cuộc bầu cử bằng cách nhìn vào điểm số cạnh tranh (1 - (tỷ lệ phiếu bầu của người chiến thắng - tỷ lệ phiếu bầu của người chạy bộ)). Đây là [0, 1), vì không có mối quan hệ nào (ví dụ: 1). Một mô hình rào cản có ý nghĩa ở đây, bởi vì có một quá trình (a) là cuộc bầu cử không được kiểm chứng? và (b) nếu không, điều gì đã dự đoán khả năng cạnh tranh? Vì vậy, trước tiên chúng tôi thực hiện hồi quy logistic để phân tích 0 so với (0, 1). Sau đó, chúng tôi thực hiện hồi quy beta để phân tích các trường hợp (0, 1).

  • Hãy tưởng tượng một nghiên cứu tâm lý điển hình. Các phản hồi là [1, 7], giống như thang đo Likert truyền thống, với hiệu ứng trần rất lớn ở mức 7. Người ta có thể thực hiện một mô hình vượt rào đó là hồi quy logistic của [1, 7) so với 7, và sau đó là hồi quy Tobit cho mọi trường hợp phản ứng quan sát là <7.

Sẽ an toàn nếu gọi cả hai mô hình này là "rào cản" , ngay cả khi tôi ước tính chúng với hai mô hình tuần tự (logistic và sau đó là beta trong trường hợp đầu tiên, logistic và sau đó là Tobit trong lần thứ hai)?


5
Tôi tin rằng các mô hình rào cản tương đương với việc chạy hai mô hình riêng biệt (nhị phân + không cắt ngắn). Lý do kỹ thuật mà nó hoạt động là mô hình đầu tiên chỉ sử dụng zero / non-zero để ước tính ; mô hình thứ hai điều kiện trên-zero không phản ứng để ước lượng λ . πλ
Ben Bolker

Vì vậy, π sau đó sẽ là 1 cho mỗi iy > 0 ? π^1iy>0
Đánh dấu trắng

3
Số Các mô hình có điều kiện lá ra π hạn, tức là P ( Y = y | Y > 0 ) = exp ( - λ ) , vv ...π^P(Y=y|Y>0)=exp(λ^)etc.
Bến Bolker

Ah cảm ơn bạn. Vì vậy, tôi cho rằng phương trình từ Smithson và Merkle mô tả một mô hình khác với mô hình được triển khai trong pscl::hurdle, nhưng nó trông giống nhau trong Công thức 5 ở đây: cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf Hoặc có lẽ tôi Tôi vẫn còn thiếu một cái gì đó cơ bản sẽ làm cho nó nhấp cho tôi?
Đánh dấu

4
Đó là cùng một mô hình. Mike và Ed tập trung vào trường hợp đơn giản nhất (logit + Poisson) là mặc định trong hurdle(). Trong cặp / họa tiết của chúng tôi, chúng tôi cố gắng nhấn mạnh các khối xây dựng chung hơn, mặc dù.
Achim Zeileis

Câu trả lời:


35

Phân tách khả năng đăng nhập

Đúng là hầu hết các mô hình rào cản có thể được ước tính riêng (tôi sẽ nói, thay vì theo tuần tự ). Lý do là khả năng đăng nhập có thể được phân tách thành hai phần có thể được tối đa hóa một cách riêng biệt. Điều này là do π là một chỉ là một yếu tố rộng trong (5,34) mà trở thành một thuật ngữ phụ trong loga.π^

Trong ký hiệu của 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(β)

πf()

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

Câu hỏi cụ thể

(a) Vứt bỏ dữ liệu hoàn toàn tốt: Trong trường hợp của bạn có, nói chung là không. Bạn có dữ liệu từ một mô hình Poisson duy nhất mà không có số 0 thừa (mặc dù có nhiều số không ). Do đó, không cần thiết phải ước tính các mô hình riêng biệt cho các số không và số không. Tuy nhiên, nếu hai phần thực sự được điều khiển bởi các tham số khác nhau thì cần phải tính đến điều này.

(b) Có thể dẫn đến các sự cố về điện do phần lớn dữ liệu là số không: Không nhất thiết. Ở đây, bạn có một phần ba các quan sát là "thành công" (vượt rào). Điều này sẽ không được coi là rất cực đoan trong mô hình hồi quy nhị phân. (Tất nhiên, nếu không cần thiết phải ước tính các mô hình riêng biệt, bạn sẽ có được sức mạnh.)

(c) Về cơ bản không phải là một "mô hình" trong chính nó, mà chỉ chạy tuần tự hai mô hình khác nhau: Đây là triết lý hơn và tôi sẽ không cố gắng đưa ra câu trả lời "một". Thay vào đó, tôi sẽ chỉ ra những quan điểm thực dụng. Đối với ước tính mô hình , có thể thuận tiện để nhấn mạnh rằng các mô hình là riêng biệt bởi vì - như bạn trình bày - bạn có thể không cần một chức năng chuyên dụng cho việc ước tính. Đối với ứng dụng mô hình , ví dụ, đối với các dự đoán hoặc phần dư, v.v., có thể thuận tiện hơn khi xem đây là một mô hình duy nhất.

(d) Sẽ an toàn nếu gọi cả hai mô hình 'vượt rào' này: Về nguyên tắc có. Tuy nhiên, biệt ngữ có thể khác nhau giữa các cộng đồng. Ví dụ, hồi quy beta không có rào cản là phổ biến hơn (và rất khó hiểu) được gọi là hồi quy beta không lạm phát. Cá nhân, tôi thấy cái sau rất sai lệch vì bản phân phối beta không có số không có thể bị thổi phồng - nhưng dù sao đó cũng là thuật ngữ tiêu chuẩn trong tài liệu. Hơn nữa, mô hình quỹ đạo là một mô hình bị kiểm duyệt và do đó không phải là một mô hình vượt rào. Tuy nhiên, nó có thể được mở rộng bằng mô hình probit (hoặc logit) cộng với mô hình bình thường bị cắt cụt . Trong tài liệu kinh tế lượng, nó được gọi là mô hình hai phần Cragg.

Nhận xét phần mềm

Các countreggói vào R-Forge tại https://R-Forge.R-project.org/R/?group_id=522 là việc thực hiện kế hurdle()/ zeroinfl()từ pscl. Lý do chính mà nó (vẫn) không có trên CRAN là chúng tôi muốn sửa đổi predict()giao diện, có thể theo cách không tương thích hoàn toàn ngược. Nếu không thì việc thực hiện khá ổn định. So với psclnó đi kèm với một vài tính năng hay, ví dụ:

  • Một zerotrunc()hàm sử dụng chính xác cùng mã hurdle()với phần không bị cắt cụt của mô hình. Vì vậy, nó cung cấp một sự thay thế cho VGAM.

  • Hơn nữa, nó là các hàm d / p / q / r cho các phân phối đếm không bị cắt ngắn, vượt rào và không bị thổi phồng. Điều này tạo điều kiện cho việc xem đây là mô hình "một" thay vì các mô hình riêng biệt.

  • Để đánh giá mức độ phù hợp của sự phù hợp, hiển thị đồ họa như biểu đồ gốc và các lô dư lượng tử ngẫu nhiên có sẵn. (Xem Kleiber & Zeileis, 2016, Nhà thống kê người Mỹ , 70 (3), 296 Tiết303. Doi: 10.1080 / 00031305.2016.1173590 .)

Dữ liệu mô phỏng

Dữ liệu mô phỏng của bạn đến từ một quá trình Poisson duy nhất. Nếu eđược coi là một biến hồi quy đã biết thì đó sẽ là một Poisson GLM tiêu chuẩn. Nếu elà một thành phần nhiễu không xác định, thì có một số sự không đồng nhất không quan sát được gây ra một chút quá mức có thể bị bắt bởi một mô hình nhị thức âm hoặc một loại hỗn hợp liên tục hoặc hiệu ứng ngẫu nhiên khác, v.v. Tuy nhiên, vì hiệu ứng của enó khá nhỏ ở đây , không ai trong số này làm cho một sự khác biệt lớn. Dưới đây, tôi đang xử lý enhư một biến hồi quy (nghĩa là với hệ số thực là 1) nhưng bạn cũng có thể bỏ qua điều này và sử dụng các mô hình nhị thức hoặc Poisson âm. Về mặt định tính, tất cả những điều này dẫn đến những hiểu biết tương tự.

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

Điều này phản ánh rằng cả ba mô hình có thể nhất quán ước tính các tham số thực. Nhìn vào các lỗi tiêu chuẩn tương ứng cho thấy trong kịch bản này (không cần phần cản trở), Poisson GLM hiệu quả hơn:

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

Tiêu chí thông tin tiêu chuẩn sẽ chọn Poisson GLM thực sự là mẫu tốt nhất:

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

Và một bài kiểm tra Wald sẽ phát hiện chính xác rằng hai thành phần của mô hình rào cản không khác biệt đáng kể:

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

Cuối cùng cả hai rootogram(p)qqrplot(p)cho thấy Poisson GLM rất phù hợp với dữ liệu và không có số không hoặc gợi ý dư thừa nào về các lỗi chính tả.

rootogram + qqrplot


Sự khác biệt giữa số không thừa và nhiều số không là gì?
chiếu

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

4

Tôi đồng ý sự khác biệt giữa các mô hình không thổi phồng và vượt rào là khó hiểu. Cả hai đều là một loại mô hình hỗn hợp. Từ những gì tôi có thể nói, sự khác biệt quan trọng là, trong một mô hình có độ phồng bằng 0, bạn trộn một khối lượng bằng 0 với một phân phối \ textit {cũng có thể lấy giá trị 0}. Đối với mô hình chướng ngại vật, bạn trộn một khối lượng bằng 0 với phân phối chỉ lấy các giá trị lớn hơn 0. Do đó, trong mô hình bơm hơi bằng 0, bạn có thể phân biệt giữa 'số không cấu trúc' (tương ứng với khối lượng bằng 0) và 'số không lấy mẫu 'tương ứng với cơ hội xuất hiện 0 từ mô hình bạn đang trộn. Tất nhiên, nhận dạng này phụ thuộc mạnh mẽ vào việc lựa chọn phân phối đúng! Nhưng, nếu bạn có Poisson bằng 0, chẳng hạn, bạn có thể phân biệt giữa các số không đến từ thành phần Poisson (số không lấy mẫu) và số không đến từ khối lượng bằng không (số không cấu trúc). Nếu bạn có một mô hình bơm hơi bằng 0 và phân phối bạn đang trộn không có khối lượng bằng 0, thì nó có thể được hiểu là một mô hình vượt rào.


Mặc dù sự khác biệt giữa hai loại số không là một điều cần thiết xuất phát trực tiếp từ đặc điểm kỹ thuật mô hình, có thể tính toán cùng một loại số lượng cho mô hình chướng ngại vật. Cái gọi là số không cấu trúc cũng có thể được tính từ untruncated phân phối count (nói Poisson) mặc dù các thông số của nó được dựa trên một cắt ngắn mẫu. Xác suất cho các số 0 cấu trúc sau đó là sự khác biệt giữa xác suất cho số không (tổng thể, từ phần rào cản bằng 0) và để lấy mẫu số không.
Achim Zeileis

1

Về khía cạnh triết học, "khi nào chúng ta nên xem xét một mô hình duy nhất và khi hai mô hình riêng biệt" , có thể thú vị lưu ý rằng các ước tính mẫu của các tham số mô hình có tương quan với nhau.

Trong cốt truyện dưới đây với một mô phỏng, bạn chủ yếu thấy mối tương quan giữa độ dốc và phần chặn của phần đếm. Nhưng cũng có một số mối quan hệ nhỏ giữa phần đếm và phần vượt rào. Nếu bạn thay đổi các tham số, ví dụ làm cho lambda trong phân phối Poisson nhỏ hơn hoặc kích thước mẫu nhỏ hơn, thì mối tương quan trở nên mạnh mẽ hơn.

Vì vậy, tôi sẽ nói rằng bạn không nên coi đó là hai mô hình riêng biệt . Hoặc ít nhất là có một số mối quan hệ ngay cả khi trong thực tế, bạn có thể tính hai ước tính độc lập với nhau.

tương quan

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

Nó không có ý nghĩa nhiều rằng có một mối tương quan giữa hai phần. Nhưng điều này có thể là do các mức ước tính riêng biệt cho các tham số trong mô hình Poisson và cách chúng liên quan đến số 0.


Tôi không thể sao chép này. Đối với tôi: truncdist::rtrunc(n = 100, spec = 'pois', a = 0, b = Inf, lambda = exp(-1.5 + rnorm(100)))mang lại một lỗi (sử dụng phiên bản 1.0.2) : Error in if (G.a == G.b) { : the condition has length > 1. Trong mọi trường hợp, việc sử dụng rhpois()từ gói countregtrên R-Forge sẽ dễ dàng hơn cho việc mô phỏng từ mô hình Poisson vượt rào với xác suất vượt rào được đưa ra pivà kỳ vọng Poisson cơ bản (không bị cắt xén) lambda. Nếu tôi sử dụng những thứ này, tôi chỉ nhận được mối tương quan theo kinh nghiệm rất nhỏ giữa các phần không và phần bị cắt cụt.
Achim Zeileis

Quá trình tạo dữ liệu: 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) }Mô phỏng : set.seed(1); cf <- t(replicate(3000, coef(hurdle(y ~ x, data = dgp())))). Đánh giá: pairs(cf)cor(cf). Kiểm tra colMeans(cf)cũng cho thấy rằng ước tính đã làm việc hợp lý tốt.
Achim Zeileis

@AchimZeileis tại thời điểm này tôi không có khả năng xem xét lỗi của bạn và nhận xét về nó. Nhưng dù sao, sự tương quan là không quá nhỏ trong hình ảnh mà tôi đã hiển thị. Điểm này mang tính triết học / lý thuyết nhiều hơn. Trong thực tế, rất có thể bạn sẽ có ít vấn đề khi bạn coi mô hình là hai bước riêng biệt, không tích hợp.
Sextus Empiricus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.