Trọng lượng và Offset có thể dẫn đến kết quả tương tự trong hồi quy poisson không?


8

Trong "Hướng dẫn của người quảng cáo cho các mô hình tuyến tính tổng quát" trong đoạn 1.83, có ghi rằng:

"Trong trường hợp cụ thể của GLM nhân bội số có thể chỉ ra rằng yêu cầu mô hình tính với thời hạn bù bằng với nhật ký phơi nhiễm tạo ra kết quả giống hệt với tần số mô hình hóa với các trọng số trước được đặt bằng với độ phơi sáng của mỗi quan sát. "

Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào thêm về kết quả này, vì vậy tôi đã thực hiện một số thử nghiệm thực nghiệm trong đó tôi không thể tìm thấy bằng chứng cho thấy tuyên bố này là chính xác. Bất cứ ai cũng có thể cung cấp một số cái nhìn sâu sắc tại sao kết quả này có thể đúng / sai.

FYI, tôi đã sử dụng mã R sau đây để kiểm tra giả thuyết, trong đó tôi không thể có được kết quả tương tự cho hai trường hợp được đề cập:

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y'=y, 'X'=X, 'offset' = offset)
formula = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula, family = "poisson", df, weights = offset) 
#Third model using poisson model on y/offset as reference
dfNew = df
dfNew$y = dfNew$y/offset
fit3 = glm(formula, family = "poisson", dfNew)

#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, fit3$coefficients, c(intercept,coefs))

Các ước tính hệ số do chạy mã này được đưa ra dưới đây:

 >  
    (Intercept)       X.1       X.2       X.3        X.4       X.5       X.6
[1,]    1.998277 0.2923091 0.4586666 0.1802960 0.11688860 0.7997154 0.4786655
[2,]    1.588620 0.2708272 0.4540180 0.1901753 0.07284985 0.7928951 0.5100480
[3,]    1.983903 0.2942196 0.4593369 0.1782187 0.11846876 0.8018315 0.4807802
[4,]    2.000000 0.2909240 0.4576965 0.1807591 0.11658183 0.8005451 0.4780123
              X.7       X.8       X.9      X.10
[1,]  0.005772078 0.9154808 0.9078758 0.3512824
[2,] -0.003705015 0.9117014 0.9063845 0.4155601
[3,]  0.007595660 0.9181014 0.9076908 0.3505173
[4,]  0.005881960 0.9150350 0.9084375 0.3511749
> 

và chúng ta có thể quan sát các hệ số không giống nhau.


1
Bạn không nên thực sự bao gồm rm(list=ls() )trong mã R bạn đăng ở đây! Điều đó có thể gây ngạc nhiên cho ai đó chạy nó, làm cho họ tức giận với bạn. Tôi đã gỡ bỏ nó. Tôi cũng chỉnh sửa để bao gồm các kết quả từ việc chạy mã. Nếu bạn đã thực hiện điều này ban đầu, có thể bạn đã nhận được phản hồi nhanh hơn, vì một số độc giả sẽ tự chạy mã.
kjetil b halvorsen

1
@kjetilbhalvorsen Cảm ơn bạn đã phản hồi, sẽ làm trong tương lai.
BDP1

@ BDP1 Vì hiện tại mã R của bạn không kiểm tra xác nhận quyền sở hữu mà bạn đang đề cập. Tôi đề nghị bạn thêm thuật ngữ trọng lượng cho fit3 và thêm phụ lục trực tiếp vào câu hỏi.
aivanov

Câu trả lời:


7

(với mã R của bạn, bạn có thể thay thế "poisson" bằng "quasipoisson" để tránh tất cả các cảnh báo được tạo. Không có gì khác về nhập sẽ thay đổi. Xem (*) bên dưới). Tài liệu tham khảo của bạn sử dụng thuật ngữ "phép nhân glm" mà tôi nghĩ chỉ có nghĩa là một glm với liên kết nhật ký, vì liên kết nhật ký có thể được coi là một mô hình nhân. Ví dụ của riêng bạn cho thấy rằng khiếu nại là sai, ít nhất là khi chúng tôi giải thích nó (Vì các tham số ước tính không bằng nhau). Bạn có thể viết các tác giả và hỏi họ ý nghĩa của chúng. Dưới đây tôi sẽ tranh luận lý do tại sao tuyên bố là sai.

Đặt là tham số poisson và trọng số. Đặt là công cụ dự báo tuyến tính không có phần bù và sau đó là công cụ dự báo tuyến tính có phần bù. Hàm xác suất poisson là Sau đó, hàm khả năng ghi nhật ký cho mô hình có offset trở thành trong khi chức năng khả năng ghi nhật ký cho mô hình có trọng số trở thành λiωiηiηi+log(ωi)

f(yi)=eλiλiyi/yi!
w = - Σ i ω i e η i + Σ i y i ω i η i - Σ i ω i log y i !
= =-ΣTôiωTôieηTôi+ΣTôiyTôiηTôi+ΣTôiyTôiđăng nhậpωTôi-ΣTôiđăng nhậpyTôi!
w= =-ΣTôiωTôieηTôi+ΣTôiyTôiωTôiηTôi-ΣTôiωTôiđăng nhậpyTôi!
và điều này rõ ràng là không giống nhau. Vì vậy, những gì các tác giả có nghĩa là không rõ ràng với tôi.

(*) Lưu ý từ trợ giúp của glmchức năng R :

Không phải 'trọng lượng' 'trọng số' có thể được sử dụng để chỉ ra rằng các quan sát khác nhau có độ phân tán khác nhau (với các giá trị trong 'trọng số' tỷ lệ nghịch với độ phân tán); hoặc tương đương, khi các yếu tố của 'trọng số' là các số nguyên dương w_i, rằng mỗi phản hồi y_i là giá trị trung bình của các quan sát trọng số đơn vị w_i. Đối với trọng số GLM nhị phân trước được sử dụng để đưa ra số lượng thử nghiệm khi phản hồi là tỷ lệ thành công: chúng hiếm khi được sử dụng cho Poisson GLM.

Nhìn vào ý nghĩa của các đối số trọng số giải thích điều này, nó có rất ít ý nghĩa với hàm họ poisson, giả sử tham số tỷ lệ không đổi trong khi các đối số trọng số sửa đổi . Điều này làm cho nhiều ý nghĩa hơn với chức năng gia đình quasiposson. Xem câu trả lời cho đầu vào "trọng lượng" trong các hàm glm và lm trong R Câu trả lời được đưa ra cũng giúp tìm hiểu lý do tại sao khả năng trong trường hợp có trọng số có dạng như trên.φφ= =1φ

Câu trả lời được đưa ra ở đây có thể có liên quan: Làm thế nào một hồi quy tỷ lệ Poisson bằng với hồi quy Poisson với thời hạn bù tương ứng? và rất thú vị


Cảm ơn câu trả lời. Đi qua máng đóng góp khả năng làm rõ rất nhiều. Khi tìm kiếm thêm một số câu trả lời cho câu trả lời của bạn, tôi đã tìm thấy câu hỏi sau: stats.stackexchange.com/questions/66791/ trộm Trong đó cho thấy bằng cách chia phản hồi ban đầu cho phần bù và đặt biến bù là trọng số, các kết quả tương tự có thể thu được như mô hình cơ sở, trong đó nhật ký (bù) đi vào bộ dự báo tuyến tính với hệ số không đổi là 1.
BDP1

Tôi cũng đã cố gắng rút ra rằng các đóng góp khả năng của mô hình mới này bằng với các đóng góp của mô hình mới được đề cập, nhưng không thể làm như vậy, được đưa rathuật ngữ xuất hiện cho sau này. (yTôi/wTôi)!
BDP1

Ít nhất là trong thí nghiệm trong tập lệnh R được cung cấp, tuyên bố này dường như là đúng. điều này có thể dễ dàng nhìn thấy bằng cách thêm một đối số trọng số = offset trong dòng fit3 = glm (...)
BDP1

Tôi không hiểu những gì bạn nói ở đây, nếu bạn nghĩ rằng thử nghiệm của mình chứng thực, tại sao không chỉnh sửa thay đổi đó thành OP và giải thích lý do tại sao bạn nghĩ rằng nó chứng thực tuyên bố đó. Tôi đã cố gắng giải thích tại sao nó không đúng, có gì sai với lập luận của tôi?
kjetil b halvorsen

1
Trích dẫn từ Hướng dẫn của Practioner thực sự chính xác, nó chưa được OP triển khai chính xác. Điều này đã được Alan phấn chỉ ra trong một câu trả lời khác ở đây, bởi tôi stats.stackexchange.com/questions/430001 và cũng bởi Cokes stats.stackexchange.com/questions/264071 (mặc dù kết luận chính xác được chôn trong dòng cuối cùng của câu trả lời đó).
Gordon Smyth

4

Xin lỗi không chỉ đơn giản là thêm một nhận xét ở trên, nhưng tôi không có đủ đại diện.

Yêu cầu ban đầu - nhưng được sửa đổi một chút - là hoàn toàn chính xác.

Hai mô hình sau đây đưa ra chính xác cùng một câu trả lời trong R bằng cách sử dụng glm poisson với log-link:

  • mô hình y, sử dụng một offset là log (offset)
  • mô hình y / offset, sử dụng trọng số bằng offset

điều chỉnh mã gốc của bạn một chút cho thấy câu trả lời giống hệt nhau:

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y' = y,
                'y_over_offset' = y/offset,
                'X' = X,
                'offset' = offset)

formula_offset = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))
formula_weights = paste("y_over_offset ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula_offset, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula_weights, family = "poisson", df, weights = offset) 


#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, c(intercept,coefs))

Hy vọng rằng sẽ đưa ra câu trả lời giống hệt nhau.

Có thể chỉ ra rằng hai mô hình tương đương nhau về mặt thống kê (có một bài báo CAS ở đâu đó cho thấy điều này - tôi sẽ đăng một liên kết nếu tôi có thời gian).

Ngẫu nhiên, nếu bạn đang thực hiện hồi quy bị phạt thì cách các gói khác nhau như glmnet và H2o đo độ lệch cho hai cách xác định mô hình khác nhau, có thể dẫn đến kết quả khác nhau.


1
Câu hỏi nhanh bạn có thể thấy rằng với fit2, bạn không có AIC và các ô giữa 2 phù hợp có cốt truyện hơi khác nhau (fit1); cốt truyện (fit2) - bạn có biết tại sao điều này xảy ra không?]
Charl Francois Marais
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.