Ordinale Logistische Regression

  • Zuvor: multivariate nominale abhängige Variable
  • Jetzt: multivariate ordinale abhängige Variable

Überblick Datensatz

data_planen <- read.csv("../data/planendf.csv")
head(data_planen)
  geschl alter kdauer schule planen
1      1     2      4      1      1
2      1     1      3      1      4
3      1     2      4      1      2
4      1     1      3      2      3
5      2     1      2      2      4
6      2     1      1      3      4
table(data_planen$geschl)

 1  2 
44 41 
table(data_planen$planen)

 1  2  3  4  5 
24 18 18 16  9 
table(data_planen$alter)

 1  2  3 
29 29 27 
table(data_planen$schule)

 1  2  3 
53 18 14 
table(data_planen$kdauer)

 1  2  3  4 
24 16 32 13 

Umsetzung mit R

# install.packages("ordinal")
# install.packages("rcompanion")
# install.packages("MASS")
library(ordinal)
library(rcompanion)
library(MASS)
data_planen$planen <- factor(
  data_planen$planen,
  levels = c(1, 2, 3, 4, 5),
  labels = c("gar nicht", "wenig", "mittel", "ziemlich", "sehr stark")
)
data_planen$alter <- factor(
  data_planen$alter,
  levels = c(1, 2, 3),
  labels = c("bis 40 Jahre", "41-55 Jahre", "über 55 Jahre")
)
data_planen$kdauer <- factor(
  data_planen$kdauer,
  levels = c(1, 2, 3, 4),
  labels = c("bis 5 Jahre", "6-10 Jahre", "11-20 Jahre", "über 20 Jahre")
)
model_0 <- clm(as.factor(planen) ~ 1, data = data_planen, link = "logit")
model <- clm(
  as.factor(planen) ~ geschl + as.factor(alter) + as.factor(kdauer),
  data = data_planen,
  link = "logit"
)

ACHTUNG: Bei der Erstellung von Faktoren legt R immer die erste Kategorie als Referenzkategorie fest !

Umsetzung mit R — Fortsetzung

anova(model_0, model)
Likelihood ratio tests of cumulative link models:
 
        formula:                                                          link:
model_0 as.factor(planen) ~ 1                                             logit
model   as.factor(planen) ~ geschl + as.factor(alter) + as.factor(kdauer) logit
        threshold:
model_0 flexible  
model   flexible  

        no.par    AIC  logLik LR.stat df Pr(>Chisq)    
model_0      4 274.32 -133.16                          
model       10 253.84 -116.92  32.485  6  1.317e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • ANOVA-Ergebnisse des Modellvergleichs: AIC ist etwa um 21 kleiner als Nullmodell (gut!)
  • ANOVA-Ergebnissunterschiede sind auch signifikant \(p\text{-value}=1.317\text{e-}05\) mit ***, also drei Sternchen, also hoch signifikant.

Ergebnisse ohne p-Werte:

ordinal.model <- polr(
  as.factor(planen) ~ geschl + alter + kdauer,
  data = data_planen,
  Hess = TRUE
)
summary(ordinal.model)
Call:
polr(formula = as.factor(planen) ~ geschl + alter + kdauer, data = data_planen, 
    Hess = TRUE)

Coefficients:
                      Value Std. Error t value
geschl               1.1162     0.4262  2.6188
alter41-55 Jahre    -0.7926     0.4933 -1.6065
alterüber 55 Jahre  -2.2612     0.5397 -4.1897
kdauer6-10 Jahre    -0.1265     0.5742 -0.2203
kdauer11-20 Jahre   -0.6471     0.5002 -1.2936
kdauerüber 20 Jahre -2.0930     0.7309 -2.8636

Intercepts:
                    Value   Std. Error t value
gar nicht|wenig     -1.1579  0.8135    -1.4232
wenig|mittel         0.0166  0.7974     0.0208
mittel|ziemlich      1.2489  0.8088     1.5441
ziemlich|sehr stark  2.8422  0.8768     3.2416

Residual Deviance: 233.8394 
AIC: 253.8394 

Interpretation der Koeffizienten:

  • Frauen zeigen 1,12-mal höhere Zustimmung als Männer (Referenzgruppe).
  • Niedriges Alter & kurze Krankheitsdauer erhöhen Zustimmung (negatives Vorzeichen).
  • Altersgruppen:
    • 41–55 Jahre: Wahrscheinlichkeit sinkt um Faktor 0,79, aktiv vorauszuplanen.
    • Über 55 Jahre: Wahrscheinlichkeit sinkt um Faktor 2,26.
  • Krankheitsdauer:
    • Über 20 Jahre: Wahrscheinlichkeit des aktiven Vorausplanens und Handelns sinkt um Faktor 2,09 gegenüber einer Krankheitsdauer von 5 Jahren.

Umsetzung mit R — Fortsetzung

nagelkerke(fit = model, null = model_0)
$Models
                                                                                                   
Model: "clm, as.factor(planen) ~ geschl + as.factor(alter) + as.factor(kdauer), data_planen, logit"
Null:  "clm, as.factor(planen) ~ 1, data_planen, logit"                                            

$Pseudo.R.squared.for.model.vs.null
                             Pseudo.R.squared
McFadden                             0.121975
Cox and Snell (ML)                   0.317626
Nagelkerke (Cragg and Uhler)         0.332097

$Likelihood.ratio.test
 Df.diff LogLik.diff  Chisq   p.value
      -6     -16.243 32.485 1.317e-05

$Number.of.observations
         
Model: 85
Null:  85

$Messages
[1] "Note: For models fit with REML, these statistics are based on refitting with ML"

$Warnings
[1] "None"

Modellgüte & Signifikanz

  • Nagelkerke \(R^2\) = 0,332 \(\ra\) akzeptable Modellgüte (Varianzerklärung ~33%)

  • Signifikante Prädiktoren (p < 0,001):

    • Geschlecht
    • Alter (über 55 Jahre)
    • Krankheitsdauer (über 20 Jahre)

Ergebnisse mit P-Werten

Umsetzung mit R — Fortsetzung

summary(model)
formula: as.factor(planen) ~ geschl + as.factor(alter) + as.factor(kdauer)
data:    data_planen

 link  threshold nobs logLik  AIC    niter max.grad cond.H 
 logit flexible  85   -116.92 253.84 5(0)  1.17e-12 2.2e+02

Coefficients:
                               Estimate Std. Error z value Pr(>|z|)    
geschl                           1.1162     0.4262   2.619  0.00882 ** 
as.factor(alter)41-55 Jahre     -0.7925     0.4933  -1.607  0.10816    
as.factor(alter)über 55 Jahre   -2.2612     0.5397  -4.190 2.79e-05 ***
as.factor(kdauer)6-10 Jahre     -0.1265     0.5742  -0.220  0.82567    
as.factor(kdauer)11-20 Jahre    -0.6471     0.5002  -1.294  0.19579    
as.factor(kdauer)über 20 Jahre  -2.0930     0.7309  -2.864  0.00419 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Threshold coefficients:
                    Estimate Std. Error z value
gar nicht|wenig     -1.15788    0.81355  -1.423
wenig|mittel         0.01657    0.79743   0.021
mittel|ziemlich      1.24892    0.80882   1.544
ziemlich|sehr stark  2.84219    0.87680   3.242
  • Signifikanzprüfung mittels summary(model) d.h. auf dem clm() - Befehl basierendes Modell
Back to top