Tính khoảng tin cậy cho hồi quy logistic


15

Tôi đang sử dụng hồi quy logistic nhị thức để xác định xem việc tiếp xúc has_xhoặc has_yảnh hưởng đến khả năng người dùng sẽ nhấp vào cái gì đó. Mô hình của tôi là như sau:

fit = glm(formula = has_clicked ~ has_x + has_y, 
          data=df, 
          family = binomial())

Đây là đầu ra từ mô hình của tôi:

Call:
glm(formula = has_clicked ~ has_x + has_y, 
    family = binomial(), data = active_domains)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9869  -0.9719  -0.9500   1.3979   1.4233  

Coefficients:
                      Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -0.504737   0.008847 -57.050  < 2e-16 ***
has_xTRUE -0.056986   0.010201  -5.586 2.32e-08 ***
has_yTRUE  0.038579   0.010202   3.781 0.000156 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 217119  on 164182  degrees of freedom
Residual deviance: 217074  on 164180  degrees of freedom
AIC: 217080

Number of Fisher Scoring iterations: 4

Vì mỗi hệ số đều có ý nghĩa, sử dụng mô hình này, tôi có thể cho biết giá trị của bất kỳ kết hợp nào trong số này là sử dụng phương pháp sau:

predict(fit, data.frame(has_x = T, has_y=T), type = "response")

Tôi không hiểu làm thế nào tôi có thể báo cáo về Std. Lỗi dự đoán.

  1. Tôi chỉ cần sử dụng 1.96SE ? Hay tôi cần chuyển đổi SE bằng cách sử dụng một phương pháp được mô tả ở đây ?

  2. Nếu tôi muốn hiểu lỗi tiêu chuẩn cho cả hai biến, tôi sẽ xem xét điều đó như thế nào?

Không giống như câu hỏi này , tôi quan tâm đến việc hiểu các giới hạn trên và dưới của lỗi là bao nhiêu phần trăm. Ví dụ: dự đoán của tôi cho thấy giá trị 37% vì True,Truetôi có thể tính toán rằng đây là cho 95 % C I không? (0,3% được chọn để minh họa quan điểm của tôi)+/0.395%CI




@kjetilbhalvorsen bạn có chắc chắn đó là một bản sao vì OP dường như muốn có một khoảng dự đoán nhưng dường như đang hoạt động trên thang đo OR thay vì thang đo log có thể là gốc rễ của vấn đề?
mdewey

2
Nếu bạn muốn đánh giá dự đoán hồi quy logistic tốt như thế nào, người ta thường sử dụng các biện pháp khác với dự đoán + SE. Một biện pháp đánh giá phổ biến trong ROC-Curve với AUC tương ứng
adibender

1
Điều này có thể giúp được gì không? stackoverflow.com/questions/47414842/ Mạnh
Xavier Bourret Sicotte

Câu trả lời:


24

Câu hỏi của bạn có thể đến từ thực tế là bạn đang đối phó với Tỷ lệ và Xác suất kỳ lạ lúc đầu khó hiểu. Vì mô hình logistic là một phép biến đổi phi tuyến tính của tính toán, các khoảng tin cậy không đơn giản như vậy.βTx

Lý lịch

Hãy nhớ lại rằng đối với mô hình hồi quy Logistic

  • Xác suất của : p = e α + β 1 x 1 + β 2 x 2(Y=1)p=eα+β1x1+β2x21+eα+β1x1+β2x2

  • Tỷ lệ của : ( p(Y=1)(p1p)=eα+β1x1+β2x2

  • Nhật ký tỷ lệ cược của : log ( p(Y=1)log(p1p)=α+β1x1+β2x2

Hãy xem xét trường hợp bạn tăng một đơn vị trong biến , tức là x 1 + 1 , thì tỷ lệ cược mới làx1x1+1

Odds(Y=1)=eα+β1(x1+1)+β2x2=eα+β1x1+β1+β2x2
  • Tỷ lệ cược (OR) là do đó

Odds(x1+1)Odds(x1)=eα+β1(x1+1)+β2x2eα+β1x1+β2x2=eβ1
  • Tỷ lệ cược đăng nhập = β1

  • Nguy cơ tương đối hay (tỷ lệ xác suất) = eα+β1x1+β1+β2x21+eα+β1x1+β1+β2x2eα+β1x1+β2x21+eα+β1x1+β2x2

Hệ số phiên dịch

Làm thế nào bạn sẽ giải thích giá trị hệ số ? Giả sử rằng mọi thứ khác vẫn cố định:βj

  • Đối với mỗi gia tăng đơn vị trong log-odds ratio tăng β j .xjβj
  • Với mỗi đơn vị tăng trong , tỷ lệ chênh lệch tăng thêm e β j .xjeβj
  • Đối với mỗi tăng từ k đến k + Δ tỷ lệ cược tỷ lệ tăng e β j Δxjkk+ΔeβjΔ
  • Nếu hệ số âm, thì việc tăng sẽ dẫn đến giảm tỷ lệ chênh lệch.xj

Khoảng tin cậy cho một tham số duy nhất βj

Tôi chỉ cần sử dụng ? Hay tôi cần chuyển đổi SE bằng cách sử dụng một phương pháp được mô tả ở đây?1.96SE

Do tham số được ước tính bằng Ước tính khả năng sống tối đa, nên lý thuyết MLE cho chúng ta biết rằng nó không có triệu chứng bình thường và do đó chúng ta có thể sử dụng khoảng tin cậy Wald mẫu lớn để có được thông thườngβj

βj±zSE(βj)

Cung cấp một khoảng tin cậy về tỷ lệ cược log. Sử dụng thuộc tính bất biến của MLE cho phép chúng ta exponentiate để có được

eβj±zSE(βj)

đó là một khoảng tin cậy về tỷ lệ cược. Lưu ý rằng các khoảng này chỉ dành cho một tham số duy nhất.

Nếu tôi muốn hiểu lỗi tiêu chuẩn cho cả hai biến, tôi sẽ xem xét điều đó như thế nào?

Nếu bạn bao gồm một số tham số, bạn có thể sử dụng quy trình Bonferroni, nếu không, đối với tất cả các tham số, bạn có thể sử dụng khoảng tin cậy cho các ước tính xác suất

Thủ tục Bonferroni cho một số tham số

g1α

βg±z(1α2g)SE(βg)

Khoảng tin cậy cho ước tính xác suất

pPr(pLppU)=.95

Một cách tiếp cận được gọi là chuyển đổi điểm cuối thực hiện như sau:

  • xTβ
  • F(xTβ)

Pr(xTβ)=F(xTβ)xTβ

[Pr(xTβ)LPr(xTβ)Pr(xTβ)U]=[F(xTβ)LF(xTβ)F(xTβ)U]

βTx±zSE(βTx)

[exTβzSE(xTβ)1+exTβzSE(xTβ),exTβ+zSE(xTβ)1+exTβ+zSE(xTβ),]

xTβ

Var(xTβ)=xTΣx

(0,1)

Cũng có một số cách tiếp cận khác, sử dụng phương pháp delta, bootstrapping, v.v. mà mỗi phương pháp đều có những giả định, ưu điểm và giới hạn riêng.


Nguồn và thông tin

Cuốn sách yêu thích của tôi về chủ đề này là "Các mô hình thống kê tuyến tính ứng dụng" của Kutner, Neter, Li, Chương 14

Mặt khác, đây là một vài nguồn trực tuyến:


Phần lớn điều này là về CI cho các hệ số, đây là điều tốt để OP biết nhưng chúng tôi có chắc chắn đó là những gì anh ấy cần không? Phần sau của bạn có vẻ phù hợp với tôi hơn nhưng có lẽ sự khác biệt có thể bị bỏ qua nếu đọc quá nhanh?
mdewey 7/07/18

2
Có bạn có lẽ đúng - nhưng hiểu tỷ lệ cược, tỷ lệ cược log và xác suất để hồi quy log là điều tôi đã đấu tranh trong quá khứ - tôi hy vọng bài viết này tóm tắt chủ đề đủ tốt để nó có thể giúp đỡ ai đó trong tương lai. Có lẽ tôi có thể trả lời câu hỏi rõ ràng hơn bằng cách cung cấp CI nhưng chúng ta sẽ cần ma trận hiệp phương sai
Xavier Bourret Sicotte

4

Để có được khoảng tin cậy 95% của dự đoán, bạn có thể tính toán trên thang đo logit và sau đó chuyển đổi chúng trở lại thang đo xác suất 0-1. Dưới đây là một ví dụ sử dụng bộ dữ liệu titanic.

library(titanic)
data("titanic_train")

titanic_train$Pclass = factor(titanic_train$Pclass, levels = c(1,2,3), labels = c('First','Second','Third'))

fit = glm(Survived ~ Sex + Pclass, data=titanic_train, family = binomial())

inverse_logit = function(x){
  exp(x)/(1+exp(x))
}

predicted = predict(fit, data.frame(Sex='male', Pclass='First'), type='link', se.fit=TRUE)

se_high = inverse_logit(predicted$fit + (predicted$se.fit*1.96))
se_low = inverse_logit(predicted$fit - (predicted$se.fit*1.96))
expected = inverse_logit(predicted$fit)

Giá trị trung bình và thấp / cao 95% CI.

> expected
        1 
0.4146556 
> se_high
        1 
0.4960988 
> se_low
        1 
0.3376243 

Và đầu ra từ chỉ sử dụng type='response', chỉ mang lại giá trị trung bình

predict(fit, data.frame(Sex='male', Pclass='First'), type='response')
        1 
0.4146556

predict(fit, data.frame(Sex='male', Pclass='First'), type='response', se.fit=TRUE)sẽ làm việc.
Tony416
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.