Politikwissenschaft

 

Webseite durchsuchen

Ordinal Logit in R

Benjamin Schlegel | 23. Mai 2017

PDF

Eine ordinale logistische Regression kann in R mit der Funktion polr() aus der Bibliothek MASS gerechnet werden. Doch bevor ein Modell gerechnet werden kann, müssen die Daten vorbereitet werden. Zuerst wird der Datensatz eingelesen und anschliessend die abhängige Variable recodiert. Der London Data Datensatz kann unter Data heruntergeladen werden.


data = read.csv("london_survey_2010.csv")

data$local_influence = 
  car::recode(data$Q54,"'Don\\'t know'=NA")

Anschliessend wird die abhängige Variable als ordinal skaliert definiert. Die Variable misst die Einstellung, ob man lokale Entscheide beeinflussen kann.


data$local_influence = ordered(data$local_influence,
      levels = c('Definitely disagree','Tend to disagree','Tend to agree','Definitely agree'))

Nun sind alle Vorbereitungen abgeschlossen und das Modell kann gerechnet werden. Als unabhängige Variable wird die Variable Q59E genommen. Sie misst, ob man tagtäglich Angestellte leitet. Als Kontrollvariable wird das Geschlecht genommen (Q1). Es wird folgende Hypothese überprüft: Wer einem unterstellte Mitarbeiter hat, hat eher das Gefühl, lokale Entscheidungen beeinflussen zu können. Dies, weil die Person bereits bei der Arbeit mehr Verantwortung hat und mitentscheiden kann.


library(MASS)
model1 = polr(local_influence ~ Q59E + Q1, data=data, Hess=TRUE)
summary(model1)

Call:
polr(formula = local_influence ~ Q59E + Q1, data = data, Hess = TRUE)

Coefficients:
         Value Std. Error t value
Q59EYes 0.3226     0.1219   2.647
Q1Male  0.1348     0.1011   1.334

Intercepts:
                                     Value    Std. Error t value 
Definitely disagree|Tend to disagree  -1.1703   0.0838   -13.9623
Tend to disagree|Tend to agree        -0.1332   0.0767    -1.7373
Tend to agree|Definitely agree         2.9061   0.1276    22.7686

Residual Deviance: 3263.704 
AIC: 3273.704 
(97 observations deleted due to missingness)

Im Output sieht man, dass Q59E signifikant ist (|t|>1.96) und Q1 nicht (|t|<1.96). Zudem ist der Effekt von Q59E auf local_influance positiv. Die Nullhypothese kann verworfen werden. Wer Angestellte hat, hat eher das Gefühl, lokale Entscheidungen beeinflussen zu können.

Effektstärke

In einem nächsten Schritt wird die Stärke des Effekts genauer angeschaut. Dazu werden die vorausgesagten Wahrscheinlichkeiten und die diskreten Änderungen berechnet. Beides kann mit der Bibliothek glm.predict berechnet werden.


library(glm.predict)
output = ordinal_discrete.changes(model1,"F;F(2)")
output

       mean1      mean2     lower1     upper1    lower2    upper2   mean.diff   lower.diff   upper.diff Q59E.1 Q59E.2   Q1               level
1 0.21322874 0.16479288 0.18543692 0.24318057 0.1321613 0.2009518  0.04843586  0.010970139  0.082376553     No    Yes Male Definitely disagree
2 0.21987378 0.19225483 0.19510721 0.24549855 0.1649890 0.2186965  0.02761895  0.005708963  0.049157071     No    Yes Male    Tend to disagree
3 0.50738162 0.56260904 0.47126343 0.54084075 0.5200269 0.6037919 -0.05522741 -0.094380387 -0.012295468     No    Yes Male       Tend to agree
4 0.05951585 0.08034325 0.04637829 0.07500136 0.0600410 0.1021299 -0.02082740 -0.038124009 -0.004105968     No    Yes Male    Definitely agree

Bei den negativen Einstellungen ist die Wahrscheinlichkeit für Personen mit Angestellten tiefer als bei Arbeitern ohne leitende Funktion. Bei den positiven Einstellungen ist es genau umgekehrt. Die Unterschiede sind überall signifikant, da im Konfidenzintervall von mean.diff die 0 nicht enthalten ist.

In einem nächsten Schritt kann das Ganze noch grafisch dargestellt werden. Dazu wird ggplot verwendet.


library(ggplot2)
ggplot(output, aes(x=level,y=mean.diff,ymin=lower.diff,ymax=upper.diff)) +
  geom_point() + geom_errorbar() + 
  geom_hline(yintercept=0,color="red",linetype="dashed") +
  theme_bw() + ylab("discrete change of gender") + 
  xlab("Can you influence local decisions?")
vorausgesagte Wahrscheinlichkeit

Modellgüte

Als dritter Schritt wird die Modellgüte überprüft. Ist das Modell besser als ein Modell mit weniger Variablen? Dazu gibt es verschiedene Tests. Einer davon ist der Loglikelihood Ratio Test. Er kann mit der Funktion lrtest() aus der Bibliothek lmtest durchgeführt werden. Um den Test durchzuführen, muss zuerst ein Modell mit nur einem Teil der Variablen (restricted) aus dem ganzen Modell (unrestricted) gebildet werden. Anschliessend können die beiden Modelle verglichen werden.


library(lmtest)
model2 = polr(local_influence ~ Q1, data=data, Hess=TRUE)
lrtest(model1,model2)

Likelihood ratio test

Model 1: local_influence ~ Q59E + Q1
Model 2: local_influence ~ Q1
  #Df  LogLik Df  Chisq Pr(>Chisq)   
1   5 -1631.8                        
2   4 -1635.4 -1 7.0777   0.007805 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Der p-Wert ist mit 0.0078 kleiner als 0.05. Damit ist das Modell mit Q59E besser als das Modell ohne diese Variable. Oder anders ausgedrückt: Die Variable Q59E bietet einen Mehrwert.


model3 = polr(local_influence ~ Q59E, data=data, Hess=TRUE)
lrtest(model1,model3)

Likelihood ratio test

Model 1: local_influence ~ Q59E + Q1
Model 2: local_influence ~ Q59E
  #Df  LogLik Df  Chisq Pr(>Chisq)
1   5 -1631.8                     
2   4 -1632.7 -1 1.7826     0.1818

Beim Vergleich mit oder ohne Q1 bekommt man einen p-Wert von 0.1818, was grösser ist als 0.05. Damit bringt die Variable Q1 keinem Mehrwert und kann weggelassen werden.

Die Resultate der Tests zeigen das gleiche wie die t-Werte. Bei diesen Tests ist es jedoch auch möglich mehrere Variablen zu vergleichen. So kann zum Beispiel getestet werden, ob das Modell besser ist als das Null-Modell.


model3 = polr(local_influence ~ Q59E, data=data, Hess=TRUE)
lrtest(model1,model3)

Likelihood ratio test

Model 1: local_influence ~ Q59E + Q1
Model 2: local_influence ~ Q59E
  #Df  LogLik Df  Chisq Pr(>Chisq)
1   5 -1631.8                     
2   4 -1632.7 -1 1.7826     0.1818

Der p-Wert ist 0.01 und damit kann die Null-Hypothese verworfen werden. Das Modell ist signifikant besser als das Null-Modell. Eine weitere Möglichkeit sind BIC/AIC, welche bei der logistischen Regression erklärt werden.