Woche 17-18: Das logistische Regressionsmodell

Ziel

Einführung und Anwendung des logistischen Regressionsmodells zur Analyse binärer und kategorialer Zielvariablen.

Inhalte

Logistische Regression und Odds Ratio

Die logistische Regression ist eine statistische Methode zur Modellierung von binären abhängigen Variablen. Sie wird verwendet, um die Wahrscheinlichkeit eines Ereignisses zu erklären, das nur zwei mögliche Ausgänge hat (z.B. Erfolg/Misserfolg, Ja/Nein).

Modellformulierung

Das logistische Regressionsmodell verwendet die logistische Funktion, um sicherzustellen, dass die vorhergesagte Wahrscheinlichkeit zwischen 0 und 1 liegt:

Hier ist die Wahrscheinlichkeit, dass das Ereignis auftritt, gegeben die unabhängigen Variablen .

Logit-Transformation

Die Logit-Transformation des logistischen Modells ist linear in den Prädiktoren:

Odds Ratio

Das Odds Ratio (OR) misst die Stärke des Zusammenhangs zwischen einem Prädiktor und dem Ergebnis. Es wird wie folgt berechnet:

Ein Odds Ratio größer als 1 deutet darauf hin, dass der Prädiktor die Wahrscheinlichkeit des Ereignisses erhöht, während ein Odds Ratio kleiner als 1 darauf hinweist, dass der Prädiktor die Wahrscheinlichkeit des Ereignisses verringert.

Maximum-Likelihood-Schätzung

Die Parameter der logistischen Regression werden durch Maximum-Likelihood-Schätzung (MLE) geschätzt. Die Likelihood-Funktion für das logistische Modell ist:

Die Log-Likelihood-Funktion ist dann:

Die Maximum-Likelihood-Schätzung findet die Werte der Parameter , die die Log-Likelihood maximieren.

Gütekriterien (AUC, ROC)

ROC-Kurve

Die ROC-Kurve (Receiver Operating Characteristic) ist ein grafisches Werkzeug zur Beurteilung der diagnostischen Fähigkeit eines binären Klassifikationsmodells. Sie stellt die True Positive Rate (TPR) gegen die False Positive Rate (FPR) für verschiedene Schwellenwerte dar.

AUC (Area Under the Curve)

Die Fläche unter der ROC-Kurve (AUC) ist ein Maß für die Gesamtgüte des Modells. Eine AUC von 1.0 zeigt ein perfektes Modell an, während eine AUC von 0.5 auf ein Modell hinweist, das keine bessere Vorhersagekraft als Zufall hat.

Multikategoriale logistische Regression

Die multikategoriale logistische Regression erweitert die binäre logistische Regression auf Fälle, in denen die abhängige Variable mehr als zwei Kategorien hat. Es gibt zwei Hauptansätze:

Multinomiale logistische Regression

Die multinomiale logistische Regression wird verwendet, wenn keine natürliche Reihenfolge zwischen den Kategorien besteht. Das Modell schätzt die Wahrscheinlichkeiten jeder Kategorie relativ zu einer Referenzkategorie.

Ordinale logistische Regression

Die ordinale logistische Regression wird verwendet, wenn eine natürliche Reihenfolge zwischen den Kategorien besteht. Hier wird das proportional odds Modell oft angewendet.

Übungen

Durchführung logistische Regression auf reale Datensätze

Beispiel in R:

# Paket laden
library(MASS)
 
# Daten laden
data <- read.csv("data.csv")
 
# Logistische Regression durchführen
model <- glm(Y ~ X1 + X2 + X3, family = binomial(link = "logit"), data = data)
 
# Zusammenfassung des Modells anzeigen
summary(model)

Beispiel in Python:

import pandas as pd
import statsmodels.api as sm
 
# Daten laden
data = pd.read_csv("data.csv")
 
# Logistische Regression durchführen
X = data[['X1', 'X2', 'X3']]
X = sm.add_constant(X)
model = sm.Logit(data['Y'], X).fit()
 
# Zusammenfassung des Modells anzeigen
print(model.summary())

Interpretation und Visualisierung der Ergebnisse

Interpretation in R:

# Odds Ratios berechnen
exp(coef(model))
 
# Konfidenzintervalle für die Koeffizienten
exp(confint(model))

Interpretation in Python:

import numpy as np
 
# Odds Ratios berechnen
odds_ratios = np.exp(model.params)
print(odds_ratios)
 
# Konfidenzintervalle für die Koeffizienten
conf = model.conf_int()
conf['OR'] = odds_ratios
print(np.exp(conf))

Visualisierung der Ergebnisse:

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
 
# ROC-Kurve plotten
y_pred = model.predict(X)
fpr, tpr, _ = roc_curve(data['Y'], y_pred)
roc_auc = auc(fpr, tpr)
 
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

Modellgüte und -diagnose

Beispiel in R:

# ROC-Kurve und AUC berechnen
library(pROC)
roc_curve <- roc(data$Y, fitted(model))
plot(roc_curve)
auc(roc_curve)

Beispiel in Python:

from sklearn.metrics import roc_auc_score
 
# AUC berechnen
auc_score = roc_auc_score(data['Y'], y_pred)
print('AUC: %0.2f' % auc_score)

Ausführliches Beispiel und Interpretation

Datensatz: Herzkrankheit

Angenommen, wir haben einen Datensatz zur Vorhersage von Herzkrankheiten, wobei die abhängige Variable den Zustand (Herzkrankheit: Ja/Nein) darstellt und die unabhängigen Variablen bis verschiedene Risikofaktoren wie Alter, Cholesterin und Blutdruck sind.

Schritte zur Analyse:

  1. Datenstruktur:

    • : Herzkrankheit (1: Ja, 0: Nein)
    • : Alter
    • : Cholesterin
    • : Blutdruck
  2. Modellformulierung:

    • Logistische Regression:

Beispiel in R:

# Paket laden
library(MASS)
 
# Daten laden
data <- read.csv("herzkrankheit.csv")
 
# Logistische Regression durchführen
model <- glm(Y ~ Alter + Cholesterin + Blutdruck, family = binomial(link = "logit"), data = data)
 
# Zusammenfassung des Modells anzeigen
summary(model)

Beispiel in Python:

import pandas as pd
import statsmodels.api as sm
 
# Daten laden
data = pd.read_csv("herzkrankheit.csv")
 
# Logistische Regression durchführen
X = data[['Alter', 'Cholesterin', 'Blutdruck']]
X = sm.add_constant(X)
model = sm.Logit(data['Y'], X).fit()
 
# Zusammenfassung des Modells anzeigen
print(model.summary())

Interpretation der Ergebnisse

  1. Interzept ():

    • Der Interzept stellt die Log-Odds dar, dass eine Person eine Herzkrankheit hat, wenn alle Prädiktoren gleich null sind.
  2. Koeffizienten ():

    • Diese Koe

ffizienten repräsentieren die Änderung der Log-Odds für eine Einheit Änderung des jeweiligen Prädiktors.

  • Beispiel: Ein Koeffizient von für Alter bedeutet, dass die Log-Odds für eine Herzkrankheit um 0.03 steigen, wenn das Alter um ein Jahr steigt.
  1. Odds Ratios:
    • Die Exponentialfunktion der Koeffizienten gibt die Odds Ratios.
    • Beispiel: Ein Odds Ratio von 1.03 für Alter bedeutet, dass die Odds für eine Herzkrankheit um 3% steigen, wenn das Alter um ein Jahr steigt.

Visualisierung der Ergebnisse

  1. ROC-Kurve und AUC:
    • Die ROC-Kurve hilft zu verstehen, wie gut das Modell zwischen den Klassen unterscheidet.
    • Die AUC gibt die Gesamtleistung des Modells an.

Beispiel in R:

# ROC-Kurve und AUC berechnen
library(pROC)
roc_curve <- roc(data$Y, fitted(model))
plot(roc_curve)
auc(roc_curve)

Beispiel in Python:

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
 
# ROC-Kurve plotten
y_pred = model.predict(X)
fpr, tpr, _ = roc_curve(data['Y'], y_pred)
roc_auc = auc(fpr, tpr)
 
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

Multikategoriale logistische Regression

Beispiel: Prädiktion von Ausbildungsniveaus

Angenommen, wir möchten das Ausbildungsniveau (niedrig, mittel, hoch) basierend auf verschiedenen sozioökonomischen Faktoren vorhersagen. Da es mehr als zwei Kategorien gibt, verwenden wir die multinomiale logistische Regression.

Beispiel in R:

# Paket laden
library(nnet)
 
# Daten laden
data <- read.csv("ausbildungsniveaus.csv")
 
# Multinomiale logistische Regression durchführen
model <- multinom(Ausbildungsniveau ~ Einkommen + Alter + Geschlecht, data = data)
 
# Zusammenfassung des Modells anzeigen
summary(model)

Beispiel in Python:

import pandas as pd
from statsmodels.discrete.discrete_model import MNLogit
 
# Daten laden
data = pd.read_csv("ausbildungsniveaus.csv")
 
# Multinomiale logistische Regression durchführen
X = data[['Einkommen', 'Alter', 'Geschlecht']]
X = sm.add_constant(X)
model = MNLogit(data['Ausbildungsniveau'], X).fit()
 
# Zusammenfassung des Modells anzeigen
print(model.summary())

Interpretation der multikategorialen logistischen Regression

  1. Interzepte ():

    • Die Interzepte repräsentieren die Log-Odds für die Referenzkategorie im Vergleich zu jeder anderen Kategorie.
  2. Koeffizienten ():

    • Diese Koeffizienten geben die Änderung der Log-Odds für eine Einheit Änderung der jeweiligen Prädiktoren an, relativ zur Referenzkategorie.
  3. Odds Ratios:

    • Die Exponentialfunktion der Koeffizienten gibt die Odds Ratios für jede Kategorie im Vergleich zur Referenzkategorie an.

Fazit

Das logistische Regressionsmodell ist ein leistungsstarkes Werkzeug zur Analyse binärer und kategorialer Zielvariablen. Es ermöglicht die Modellierung der Wahrscheinlichkeit eines Ereignisses und bietet nützliche Gütekriterien wie die ROC-Kurve und die AUC zur Bewertung der Modellleistung. Die multikategoriale logistische Regression erweitert diese Methode auf Fälle mit mehr als zwei Kategorien und bietet eine flexible und robuste Möglichkeit, komplexe Daten zu analysieren.