Regressionen

Im Beispiel ist es das Ziel eine Untersuchung der Variable stfdem in allen Schritten grafisch darzustellen. Zuletzt willst du jetzt ein Regressionmodell auf stfdem rechnen, dass die Effekte von stfeco, district, gndr, trstlgl, trstprl und agea inkludiert.

Als erstes berechnest du nun das Modell, bevor du mit den grafischen Darstellungen beginnen kannst:

model1 <- lm(
  stfdem ~ 1 + stfeco + district + gndr + trstlgl + trstprl + agea,
  pss
)

summary(model1)
## 
## Call:
## lm(formula = stfdem ~ 1 + stfeco + district + gndr + trstlgl + 
##     trstprl + agea, data = pss)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.7191 -1.0880  0.0338  1.1554  5.7564 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          0.582230   0.179506   3.244 0.001189 ** 
## stfeco               0.878646   0.014100  62.314  < 2e-16 ***
## districtDistrikt 5   0.013212   0.082147   0.161 0.872229    
## districtDistrikt 7   0.067992   0.084835   0.801 0.422900    
## districtDistrikt 10  0.073204   0.089332   0.819 0.412567    
## districtDistrikt 12  0.175263   0.097254   1.802 0.071593 .  
## gndrmale            -0.089675   0.050657  -1.770 0.076754 .  
## trstlgl             -0.048787   0.013905  -3.509 0.000455 ***
## trstprl             -0.001430   0.012900  -0.111 0.911713    
## agea                 0.001942   0.002268   0.856 0.391970    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.734 on 4695 degrees of freedom
##   (295 observations deleted due to missingness)
## Multiple R-squared:  0.4593,	Adjusted R-squared:  0.4583 
## F-statistic: 443.2 on 9 and 4695 DF,  p-value: < 2.2e-16

Im Model erkennst du signifikante Effekte von stfeco, gndrmale sowie trstlgl. Diese wollen wir gleich darstellen. Zuerst wiederholst du jetzt aber die Darstellung des Plots aller Regressionskoeffizienten aus Lernblock 4 mit dwplot().

Probiere es erst selbst und schaue erst danach hier nach!

Oftmals ist es nicht nur das Ziel Regressionsmodelle in Tabellen darzustellen, sondern auch spezifische Effekte grafisch darzustellen, z.B. von den signifikanten Effekten. Dazu stellen wir hier eine Möglichkeit vor: manuell über eigene predictions.

Es gibt zwar libraries wie ggraphExtra, diese können aber nur sehr eingeschränkt plotten.

Sobald wir aber ein multivariates Modell haben, ist dies nicht mehr direkt so möglich. Da wir die anderen Effekte konstanthalten müssen, um die Abbildung korrekt darzustellen. Aber es ist immer noch leicht umzusetzen, sobald man versteht, was Konstanthalten bedeutet.

Wir möchten den Effekt von stfeco auf stfdem plotten. Dieser Effekt ist immer mit den weiteren Effekten zu interpretieren. Um den Effekt plotten zu können, halten wir den (oder die) weiteren Effekt(e) konstant. Dazu nehmen wir die library sjPlot und daraus nutzt du die Funktion plot_model(). Ebenso must du ggplot laden.

install.packages("sjPlot")
library("sjPlot")
library("tidyverse")

In der Funktion plot_model() rufst du zuerst das Objekt des Regressionsmodels auf (hier model1), gibst im zweiten Argument an, dass es sich um ein marginal plot, der vorhergesagte Werte beinhaltet, handelt (type = pred) und bestimmst dann im Argument terms, welcher Effekt geplottet werden soll. Die Funktion stellt automatisch alle metrischen Variablen konstant auf den Mittelwert bzw. kategorielle Variablen auf die Referenzkategorie.

plot_model(
  model1, 
  type = "pred",
  terms = "stfeco"
)

Du siehst in der Grafik also den Effekt on stfeco auf stfdem, unter Konstanthalten (Mittelwert) von trstlgl, trstprl und agea für weibliche (Referenzlevel gndr) Personen aus Distrikt 1 (Referenzlevel district).

Willst du jetzt den Effekt für unterschiedliche Gruppen der kategoriellen Variablen hinzufügen, gibst du in terms einfach die weitere Variable an:

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr"
  )
)

Genauso leicht könntest du die nächste kategorielle Variable einfach hinzufügen:

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district"
  )
)

Ebenso kannst du die Ausgabe auf bestimmte levels (Ausprägungen einer Variable beschränken), in dem du die levels in [..] Klammern hinter den Variablennamen setzt (aber innerhalb der "..."):

# levels von district
levels(pss$district)
## [1] "Distrikt 1"  "Distrikt 5"  "Distrikt 7"  "Distrikt 10" "Distrikt 12"
plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district[Distrikt 1, Distrikt 12]")
)

Modifikationen eines ggplots funktionieren auch hier: Wir ändern die Achsen und ändern die Farben!

plot_model(
  model1, 
  type = "pred",
  terms = c(
    "stfeco",
    "gndr",
    "district"
  )
) +
  scale_x_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  ) +
  scale_y_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  ) +
  scale_color_manual(values = beyonce_palette(72))

Stelle jetzt den Zusammenhang zwischen trstlgl und stfdem dar. Dabei soll für jeden Distrikt jeweils eine eigene Linie abgebildet sein und die Plots nach Geschlecht getrennt sein. Probiere es erst selbst aus, bevor du dir die Lösung anschaust.

plot_model(
model1,
type = “pred”,
terms = c(
“trstlgl”,
“district”,
“gndr”
)
) +
scale_x_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_y_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_color_manual(values = beyonce_palette(18))

So das war’s! Du hast in diesem Kapitel geübt für einzelne Methoden Grafiken darzustellen und beherrschst nun erste Schritte mit ggplot!