วิธีการคำนวณข้อผิดพลาดมาตรฐานของสัมประสิทธิ์การถดถอยโลจิสติก


18

ฉันใช้ Scikit เรียนรู้ของ Python ในการฝึกอบรมและทดสอบการถดถอยโลจิสติก

scikit-Learn จะส่งกลับค่าสัมประสิทธิ์การถดถอยของตัวแปรอิสระ แต่ไม่ได้ให้ข้อผิดพลาดมาตรฐานของสัมประสิทธิ์ ฉันต้องการข้อผิดพลาดมาตรฐานเหล่านี้เพื่อคำนวณสถิติ Wald สำหรับค่าสัมประสิทธิ์แต่ละค่าและเปรียบเทียบค่าสัมประสิทธิ์เหล่านี้กับแต่ละอื่น ๆ

ฉันได้พบคำอธิบายวิธีการคำนวณข้อผิดพลาดมาตรฐานสำหรับค่าสัมประสิทธิ์ของการถดถอยโลจิสติก ( ที่นี่ ) แต่มันค่อนข้างยากที่จะติดตาม

หากคุณรู้วิธีอธิบายง่ายๆเกี่ยวกับการคำนวณข้อผิดพลาดมาตรฐานเหล่านี้และ / หรือสามารถให้ข้อผิดพลาดมาตรฐานกับฉันได้ฉันขอขอบคุณจริงๆ! ฉันไม่ได้หมายถึงรหัสเฉพาะ (แต่โปรดโพสต์รหัสใด ๆ ที่อาจเป็นประโยชน์) แต่เป็นคำอธิบายอัลกอริทึมของขั้นตอนที่เกี่ยวข้อง


1
คุณกำลังขอรหัส Python เพื่อรับข้อผิดพลาดมาตรฐานหรือวิธีคำนวณ SEs (ทางคณิตศาสตร์ / อัลกอริทึม) เพื่อให้คุณทำเองได้หรือไม่? หากอดีต Q นี้จะปิดหัวข้อสำหรับ CV (ดูของเราศูนย์ช่วยเหลือ ) แต่อาจจะอยู่ในหัวข้อเกี่ยวกับกองมากเกิน ถ้าอย่างหลังมันจะอยู่ในหัวข้อที่นี่ (แต่คุณอาจไม่ได้รับคำแนะนำโค้ด) โปรดแก้ไข Q ของคุณเพื่อชี้แจงเรื่องนี้ หากเป็นอดีตเราสามารถโอนย้ายเป็น SO สำหรับคุณได้ ( โปรดอย่าโพสต์ข้อความข้าม )
gung - Reinstate Monica

1
ขอบคุณ Gung ฉันตั้งใจโพสต์ที่นี่เพราะฉันคาดหวังไว้หลัง แต่ฉันจะแก้ไขเพื่อให้ชัดเจน ฉันพูดถึงว่าฉันทำงานใน Python พร้อม scikit เรียนรู้ในกรณีที่คนที่ใช้ซอฟต์แวร์นี้สามารถให้คำแนะนำเฉพาะกับฉันได้
Gyan Veda

สวัสดี @GyanVeda ฉันกำลังเผชิญกับปัญหาเดียวกันตอนนี้อะไรคือทางออกสุดท้ายของคุณโปรด?
zyxue

คำตอบ:


12

ซอฟต์แวร์ของคุณให้เมทริกซ์ความแปรปรวนร่วมพารามิเตอร์ (หรือแปรปรวนร่วมแปรปรวน) กับคุณหรือไม่? ถ้าเป็นเช่นนั้นข้อผิดพลาดมาตรฐานคือรากที่สองของเส้นทแยงมุมของเมทริกซ์นั้น คุณอาจต้องการที่จะปรึกษาตำราเรียน (หรือ google สำหรับเอกสารประกอบการบรรยายมหาวิทยาลัย) สำหรับวิธีการที่จะได้รับเมทริกซ์เชิงเส้นและเส้นตรงรุ่นทั่วไปVβ


1
ฉันไม่สามารถค้นหาสิ่งใดทางออนไลน์สำหรับกรณีตัวแบบเชิงเส้นทั่วไปได้ (บางทีฉันไม่รู้คำค้นหาที่ถูกต้องใช่ไหม) ช่วยด้วย?
Kevin H. Lin

3
นี่คือสิ่งที่ฉันได้พบหลังจากผ่านไปไม่กี่นาที คำแนะนำของฉันคือการเข้าใจก่อนว่าการคำนวณความแปรปรวนของพารามิเตอร์ในโมเดลเชิงเส้นพื้นฐานเป็นอย่างไร เมื่อคุณได้รับส่วนขยายของ GLM นั้นง่ายกว่า การรู้วิธีการคำนวณและการรับมันในแพ็คเกจซอฟต์แวร์นั้นไม่เหมือนกันทั้งหมด www.sagepub.com/upm-data/21121_Chapter_15.pdf
generic_user

18

ข้อผิดพลาดมาตรฐานของสัมประสิทธิ์แบบจำลองคือรากที่สองของรายการเส้นทแยงมุมของเมทริกซ์ความแปรปรวนร่วม พิจารณาสิ่งต่อไปนี้:

  • เมทริกซ์การออกแบบ:

X = [1x1,1x1,p1x2,1x2,p1xn,1xn,p]xi,jji

(หมายเหตุ: นี่ถือว่าเป็นโมเดลที่มีจุดตัด)

  • V = [π^1(1π^1)000π^2(1π^2)000π^n(1π^n)]π^ii

เมทริกซ์ความแปรปรวนร่วมสามารถเขียนได้เป็น:

(XTVX)1

สิ่งนี้สามารถนำไปใช้กับรหัสต่อไปนี้:

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)

ทั้งหมดที่กล่าวมาstatsmodelsน่าจะเป็นแพ็คเกจที่ดีกว่าหากคุณต้องการเข้าถึงการวินิจฉัยแบบ "ทันที"


2
เพื่อหลีกเลี่ยงปัญหาหน่วยความจำและการบัญชีสำหรับกรณีของเมทริกซ์เอกพจน์คุณสามารถอัปเดตโค้ดดังต่อไปนี้ -V = np.product(predProbs, axis=1); covLogit = np.linalg.pinv(np.dot(X_design.T * V), X_design)
steadyfish

6

หากคุณกำลังสนใจในการทำข้อสรุปแล้วคุณอาจจะต้องการที่จะมีลักษณะที่statsmodels มีข้อผิดพลาดมาตรฐานและการทดสอบทางสถิติทั่วไป นี่คือการถดถอยโลจิสติตัวอย่างเช่น


ขอบคุณสำหรับคำแนะนำ! ฉันจะดูเป็นสถิติ น่าเสียดายที่ scikit-Learn ไม่ได้ให้ผลลัพธ์แบบนี้
Gyan Veda

1
ใช่. โดยปกติแล้วมันไม่ใช่เป้าหมายของกล่องเครื่องมือประเภทการเรียนรู้ของเครื่องเพื่อให้เครื่องมือสำหรับการทดสอบสมมติฐาน (บ่อยครั้ง) หากคุณพบข้อ จำกัด ขนาดข้อมูลที่ทำงานได้ไม่ดีในสถิติ แต่ทำงานใน scikit เรียนรู้ฉันสนใจที่จะได้ยินเกี่ยวกับพวกเขาใน gitHub
jseabold

@ jseabold อย่างไรก็ตามหากคุณต้องการได้รับแนวคิดเฉพาะของคุณลักษณะสำคัญในการถดถอยโลจิสติกคุณไม่สามารถอ่านขนาดของเอฟเฟกต์ (สัมประสิทธิ์) โดยไม่คิดถึงข้อผิดพลาดมาตรฐานของพวกเขา ดังนั้นแม้ว่าคุณจะไม่ได้ทำการทดสอบเป็นประจำและคุณแค่ต้องการบ่งชี้ถึงขนาดของเอฟเฟกต์และความทนทานการขาดความแปรปรวนของการขาดความแปรปรวนก็เป็นสิ่งที่ท้าทาย
ely
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.