Eine logistische Regression kann prinzipiell in R recht ähnlich zu einem ALM gerechnet werden, statt die lm Funktion wird dabei die glm-Funktion genutzt (für Generalisiertes Lineares Modell); durch family = binomial(link = logit) wird spezifiziert, dass es sich um eine logistische Regression handelt
Wichtig ist, dass euer Kriterium 0/1-kodiert ist; Überlegt euch vorher, welche Ausprägung sinnvollerweise 0 und welche sinnvollerweise 1 sein sollte
Abhängige Variable (dichotom): Jobangebot -> Job bekommen (Y = 1) oder Job nicht bekommen (Y = 0)
Stetiger Präditkor: PunkteAC -> erlangte Punkte in Assessment-Center
Kategorialer Prädiktor: Praktikum -> Noch kein Praktikum in dem Unternehmen gemacht (Referenzkategorie; x = 0) oder gemacht (x = 1)
#Kontinuierliche Prädiktoren ggf. zentrieren
#hier sinnvoll (weil kaum jemand wird wohl nur 0 Punkte im AC erreichen)
df$PunkteAC <- scale(df$PunkteAC, center = T, scale = F)
#center = T sagt, dass zentriert werden soll und
#scale = F sagt, dass aber nicht standardisiert werden soll
#Logistische Regression aufstellen
mod1 <- glm(Jobangebot ~ PunkteAC + Praktikum, family = binomial(link = logit), data = df)
#Die Formulierung funktioniert so wie auch bei der lm-Funktion
#Kriterium ~ Prädiktoren + Prädiktoren
#Bei einer Interaktion zwischen PunkteAC und Praktikum wäre die Formula
#PunkteAC*Praktikum
#family = binomial(link = logit) gibt an, dass es eine logistische Regression sein soll
#Ergebnisse ausgeben lassen
summary(mod1)
##
## Call:
## glm(formula = Jobangebot ~ PunkteAC + Praktikum, family = binomial(link = logit),
## data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.03921 0.10599 0.370 0.711
## PunkteAC 1.56821 0.10746 14.593 < 2e-16 ***
## Praktikum 0.69153 0.15703 4.404 1.06e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1370.88 on 999 degrees of freedom
## Residual deviance: 995.55 on 997 degrees of freedom
## AIC: 1001.6
##
## Number of Fisher Scoring iterations: 5
Wichtig: R gibt die Koeffizienten in der Logit-Formulierung aus
Ausgehend davon sind aber die Werte für die anderen Interpretationen leicht zu berechnen - Die Logit-Werte sind ja der natürliche Logarithmus der Odds Ratio
Um also an die Odds Ratios zu kommen muss die Umkehrfunktion gerechnet werden; d.h. die Exponentialfunktion → die Werte die dann raus kommen sind eure Odds Ratios
#Odd Ratios
#Koeffizienten Speichern
coef <- coef(mod1)
#Exponentialfunktion rechnen, um auf OR zu kommen
OR <- exp(coef)
OR
## (Intercept) PunkteAC Praktikum
## 1.039990 4.798050 1.996769
Beispielinterpretation davon:
ORb0 = 1.04 → die vorh. Chance den Job zu erhalten ist größer als ihn nicht zu erhalten wenn man kein Praktikum in dem Unternehmen absolviert hat und einen mittleren Wert im AC erreicht hat (da OR > 1; wenn OR < 1 wäre, dann wäre die vorh. Chance den Job nicht zu erhalten größer als die vorh. Chance den Job zu erhalten unter den genannten Bedingungen, bei einem OR = 1 wären die Chancen gleich)
ORPunkte = 4.80 → die vorh. Chance den Job zu erhalten erhöht sich um den Faktor 1.57 bei Personen, die einen Punkt mehr im AC erreicht haben wenn man nicht verändert, ob die Personen ein Praktikum gemacht haben oder nicht
ORPraktikum = 2.00 → die Chance den Job zu erhalten erhöht sich um den Faktor 2.00 wenn Personen ein Praktikum in dem Unternehmen gemacht haben vs. nicht gemacht haben und die erreichte Punktzahl im Assessment-Center konstant gehalten wird
Um die bedingte Wahrscheinlichkeit in Kategorie 1 zu landen zu berechnen wenn die Ausprägung aller Prädiktoren 0 sind, müssen in die Formulierung der logistischen Regression als bedingte Wahrscheinlichkeit die Prädiktoren alle auf 0 gesetzt werden
#Koeffizienten Speichern
coef <- coef(mod1)
#coef[1] = die Konstante, erster Wert der Koeffizienten
#Bedingte Wahrscheinlichkeit in Kat y = 1 zu landen wenn alle Prädiktoren = 0
exp(coef[1])/(1+exp(coef[1]))
## (Intercept)
## 0.5098016
#Wenn ihr die OR bereits ausgerechnet habt, könnt ihr alternativ auch so vorgehen
OR[1]/(1+OR[1])
## (Intercept)
## 0.5098016