Wie man die Standardfehler der Koeffizienten einer logistischen Regression berechnet

18

Ich benutze Pythons Scikit-Learn, um eine logistische Regression zu trainieren und zu testen.

scikit-learn gibt die Regressionskoeffizienten der unabhängigen Variablen zurück, liefert jedoch nicht die Standardfehler der Koeffizienten. Ich benötige diese Standardfehler, um eine Wald-Statistik für jeden Koeffizienten zu berechnen und diese Koeffizienten miteinander zu vergleichen.

Ich habe eine Beschreibung gefunden, wie man Standardfehler für die Koeffizienten einer logistischen Regression berechnet ( hier ), aber es ist etwas schwierig zu folgen.

Wenn Sie eine einfache, prägnante Erklärung zur Berechnung dieser Standardfehler kennen und / oder mir eine geben können, wäre ich Ihnen sehr dankbar! Ich meine nicht spezifischen Code (obwohl Sie gerne jeden Code posten, der hilfreich sein könnte), sondern eine algorithmische Erklärung der beteiligten Schritte.

Gyan Veda
quelle
1
Fragen Sie nach Python-Code, um die Standardfehler zu erhalten, oder danach, wie die SEs berechnet werden (mathematisch / algorithmisch), damit Sie es selbst tun können? In letzterem Fall ist diese Frage für den Lebenslauf nicht relevant (siehe unsere Hilfe ), kann jedoch für den Stapelüberlauf relevant sein . In letzterem Fall wäre dies hier ein Thema (aber möglicherweise erhalten Sie keine Codevorschläge). Bitte bearbeiten Sie Ihr Q, um dies zu klären. Wenn es das erstere ist, können wir es für Sie auf SO migrieren ( bitte jedoch nicht überkreuzen ).
gung - Wiedereinsetzung von Monica
1
Danke, Gung. Ich habe hier absichtlich gepostet, weil ich letzteres erwarte, aber ich werde es bearbeiten, um es zu klären. Ich erwähnte, dass ich in Python mit scikit-learn arbeite, falls jemand, der diese Software verwendet, mir spezifische Tipps geben kann.
Gyan Veda
Hallo @GyanVeda, ich stehe jetzt vor dem gleichen Problem. Was ist Ihre endgültige Lösung, bitte?
Zyxue

Antworten:

12

Gibt Ihre Software eine Parameterkovarianz (oder Varianz-Kovarianz) -Matrix an? Wenn ja, sind die Standardfehler die Quadratwurzel der Diagonale dieser Matrix. Sie möchten wahrscheinlich ein Lehrbuch (oder Google für Vorlesungsunterlagen der Universität) zu Rate ziehen, um die Matrix für lineare und verallgemeinerte lineare Modelle zu erhalten.Vβ

generic_user
quelle
1
Ich konnte online nichts für den Fall des verallgemeinerten linearen Modells finden (kenne ich möglicherweise nicht die richtigen Suchbegriffe?). Hilfe?
Kevin H. Lin
3
Hier ist eine, die ich nach ein paar Minuten googeln gefunden habe. Mein Rat ist, zunächst zu verstehen, wie die Parametervarianz in einem linearen Grundmodell berechnet wird. Sobald Sie das erhalten, ist die Erweiterung auf GLMs einfacher. Trotzdem ist es nicht dasselbe, zu wissen, wie man es berechnet und wie man es in ein Softwarepaket bekommt. www.sagepub.com/upm-data/21121_Chapter_15.pdf
generic_user
18

Die Standardfehler der Modellkoeffizienten sind die Quadratwurzeln der Diagonaleinträge der Kovarianzmatrix. Folgendes berücksichtigen:

  • Entwurfsmatrix:

, wobei x i , j der Wert der ist j Prädiktor für die i- ten Beobachtungen.X = [1x1,1x1,p1x2,1x2,p1xn,1xn,p]xi,jji

(HINWEIS: Dies setzt ein Modell mit einem Achsenabschnitt voraus.)

  • , wobei π i repräsentiert die vorhergesagte Wahrscheinlichkeit einer Klassenmitgliedschaft für die Beobachtung i .V = [π^1(1π^1)000π^2(1π^2)000π^n(1π^n)]π^ii

Die Kovarianzmatrix kann wie folgt geschrieben werden:

(XTVX)1

Dies kann mit dem folgenden Code implementiert werden:

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)

Alles, was gesagt wird, statsmodelswird wahrscheinlich ein besseres Paket sein, wenn Sie Zugriff auf eine Menge "out-of-the-box" -Diagnosen wünschen.

j_sack
quelle
2
Um Speicherprobleme zu vermeiden und den Fall einer singulären Matrix zu berücksichtigen, können Sie Ihren Code wie folgt aktualisieren -V = np.product(predProbs, axis=1); covLogit = np.linalg.pinv(np.dot(X_design.T * V), X_design)
steadyfish
6

Wenn Sie Schlüsse ziehen möchten, sollten Sie sich wahrscheinlich die Statistikmodelle ansehen . Standardfehler und allgemeine statistische Tests sind verfügbar. Hier ist ein Beispiel für eine logistische Regression .

jseabold
quelle
Danke für die Empfehlung! Ich werde mir Statistiken ansehen. Schade, dass Scikit-Learn diese Art von Ausgabe nicht bietet.
Gyan Veda
1
Ja. Es ist in der Regel nicht das Ziel maschinell erlernter Toolboxen, Tools für (häufig auftretende) Hypothesentests bereitzustellen. Wenn Sie auf Einschränkungen in Bezug auf die Datengröße stoßen, die in Statistikmodellen nicht gut funktionieren, aber in Scikit-Learn funktionieren, würde ich mich freuen, wenn Sie auf Github davon erfahren.
jseabold
@jseabold Wenn Sie jedoch eine Ad-hoc-Vorstellung von der Bedeutung von Merkmalen in der logistischen Regression erhalten möchten, können Sie die Effektgrößen (die Koeffizienten) nicht einfach ablesen, ohne über ihre Standardfehler nachzudenken. Selbst wenn Sie keinen Frequentistentest durchführen und nur einen Anhaltspunkt für die Effektgröße und Robustheit benötigen, ist die mangelnde Varianz beim Erlernen der Ausgabe eine Herausforderung.
Ely