Cách tính các lỗi tiêu chuẩn của hệ số hồi quy logistic


18

Tôi đang sử dụng scikit-learn của Python để đào tạo và kiểm tra hồi quy logistic.

scikit-learn trả về các hệ số hồi quy của các biến độc lập, nhưng nó không cung cấp các lỗi tiêu chuẩn của hệ số. Tôi cần các lỗi tiêu chuẩn này để tính toán thống kê Wald cho từng hệ số và lần lượt so sánh các hệ số này với nhau.

Tôi đã tìm thấy một mô tả về cách tính các lỗi tiêu chuẩn cho các hệ số của hồi quy logistic ( ở đây ), nhưng hơi khó theo dõi.

Nếu bạn tình cờ biết một lời giải thích đơn giản, ngắn gọn về cách tính các lỗi tiêu chuẩn này và / hoặc có thể cung cấp cho tôi một lỗi, tôi thực sự đánh giá cao nó! Tôi không có nghĩa là mã cụ thể (mặc dù xin vui lòng gửi bất kỳ mã nào có thể hữu ích), nhưng thay vào đó là một lời giải thích thuật toán về các bước liên quan.


1
Bạn đang yêu cầu mã Python để nhận các lỗi tiêu chuẩn hoặc về cách các SE được tính toán (về mặt toán học / thuật toán) để bạn có thể tự làm điều đó? Nếu trước đây, Q này sẽ lạc đề về CV (xem trung tâm trợ giúp của chúng tôi ), nhưng có thể là chủ đề về Stack Overflow . Nếu sau này, nó sẽ là chủ đề ở đây (nhưng bạn có thể không nhận được bất kỳ đề xuất mã nào). Vui lòng chỉnh sửa Q của bạn để làm rõ điều này. Nếu là phiên bản cũ, chúng tôi có thể chuyển nó sang SO cho bạn ( tuy nhiên vui lòng không đăng chéo ).
gung - Phục hồi Monica

1
Cảm ơn, Gung. Tôi cố tình đăng ở đây vì tôi đang mong đợi cái sau, nhưng tôi sẽ chỉnh sửa để làm rõ. Tôi đã đề cập rằng tôi đang làm việc với Python với scikit-learn trong trường hợp ai đó sử dụng phần mềm này có thể cho tôi lời khuyên cụ thể về nó.
Gyan Veda

Xin chào @GyanVeda, bây giờ tôi đang đối mặt với cùng một vấn đề, giải pháp cuối cùng của bạn là gì?
zyxue

Câu trả lời:


12

Phần mềm của bạn có cung cấp cho bạn ma trận hiệp phương sai (hoặc phương sai hiệp phương sai) không? Nếu vậy, các lỗi tiêu chuẩn là căn bậc hai của đường chéo của ma trận đó. Bạn có thể muốn tham khảo sách giáo khoa (hoặc google cho ghi chú bài giảng của trường đại học) để biết cách lấy ma trận cho các mô hình tuyến tính tuyến tính và tổng quát.Vβ


1
Tôi chưa thể tìm thấy bất cứ điều gì trực tuyến cho trường hợp mô hình tuyến tính tổng quát (có thể tôi không biết các thuật ngữ tìm kiếm đúng?). Cứu giúp?
Kevin H. Lin

3
Đây là một cái mà tôi tìm thấy sau vài phút googling. Lời khuyên của tôi là trước tiên hãy hiểu cách tính phương sai tham số trong mô hình tuyến tính cơ bản. Khi bạn đã có được điều đó, việc mở rộng sang GLM sẽ dễ dàng hơn. Tất cả đều giống nhau, biết cách tính toán và biết cách lấy nó trong gói phần mềm không giống nhau. www.sagepub.com/upm-data/21121_Ch CHƯƠNG_15.pdf
generic_user

18

Các lỗi tiêu chuẩn của các hệ số mô hình là căn bậc hai của các mục chéo của ma trận hiệp phương sai. Hãy xem xét những điều sau đây:

  • Ma trận thiết kế:

X = [1x1,1Giáo dụcx1,p1x2,1Giáo dụcx2,p1xn,1Giáo dụcxn,p]xTôi,jjTôi

(LƯU Ý: Điều này giả sử một mô hình có đánh chặn.)

  • V = [π^1(1-π^1)0Giáo dục00π^2(1-π^2)Giáo dục000Giáo dụcπ^n(1-π^n)]π^TôiTôi

Ma trận hiệp phương sai có thể được viết là:

(XTVX)-1

Điều này có thể được thực hiện với mã sau đây:

import numpy as np
from sklearn import linear_model

# Initiate logistic regression object
logit = linear_model.LogisticRegression()

# Fit model. Let X_train = matrix of predictors, y_train = matrix of variable.
# NOTE: Do not include a column for the intercept when fitting the model.
resLogit = logit.fit(X_train, y_train)

# Calculate matrix of predicted class probabilities.
# Check resLogit.classes_ to make sure that sklearn ordered your classes as expected
predProbs = resLogit.predict_proba(X_train)

# Design matrix -- add column of 1's at the beginning of your X_train matrix
X_design = np.hstack([np.ones((X_train.shape[0], 1)), X_train])

# Initiate matrix of 0's, fill diagonal with each predicted observation's variance
V = np.diagflat(np.product(predProbs, axis=1))

# Covariance matrix
# Note that the @-operater does matrix multiplication in Python 3.5+, so if you're running
# Python 3.5+, you can replace the covLogit-line below with the more readable:
# covLogit = np.linalg.inv(X_design.T @ V @ X_design)
covLogit = np.linalg.inv(np.dot(np.dot(X_design.T, V), X_design))
print("Covariance matrix: ", covLogit)

# Standard errors
print("Standard errors: ", np.sqrt(np.diag(covLogit)))

# Wald statistic (coefficient / s.e.) ^ 2
logitParams = np.insert(resLogit.coef_, 0, resLogit.intercept_)
print("Wald statistics: ", (logitParams / np.sqrt(np.diag(covLogit))) ** 2)

Tất cả những gì đang được nói, statsmodelscó lẽ sẽ là một gói tốt hơn để sử dụng nếu bạn muốn truy cập vào rất nhiều chẩn đoán "ngoài luồng".


2
Để tránh các vấn đề về bộ nhớ và để giải thích cho trường hợp ma trận số ít, bạn có thể cập nhật mã của mình như sau -V = np.product(predProbs, axis=1); covLogit = np.linalg.pinv(np.dot(X_design.T * V), X_design)
ổn định

6

Nếu bạn quan tâm đến việc suy luận, thì có lẽ bạn sẽ muốn xem qua các số liệu thống kê . Lỗi tiêu chuẩn và kiểm tra thống kê phổ biến có sẵn. Đây là một ví dụ hồi quy logistic .


Cảm ơn vì lời giới thiệu! Tôi sẽ xem xét số liệu thống kê. Thật tệ là scikit-learn không cung cấp loại đầu ra này.
Gyan Veda

1
Vâng. Nó thường không phải là mục tiêu của các hộp công cụ máy học để cung cấp các công cụ cho các bài kiểm tra giả thuyết (thường xuyên). Nếu bạn gặp phải các ràng buộc về kích thước dữ liệu không hoạt động tốt trong các số liệu thống kê nhưng hoạt động trong scikit-learn, tôi rất muốn nghe về chúng trên github.
jsablesold

@jsablesold Tuy nhiên, nếu bạn muốn có một số khái niệm đặc biệt về tầm quan trọng của tính năng trong hồi quy logistic, bạn không thể chỉ đọc các kích thước hiệu ứng (hệ số) mà không nghĩ về các lỗi tiêu chuẩn của chúng. Vì vậy, ngay cả khi bạn không thực hiện kiểm tra thường xuyên và bạn chỉ muốn một số dấu hiệu về kích thước và độ mạnh của hiệu ứng, việc thiếu sklearn của đầu ra phương sai là một thách thức.
ely
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.