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()
.
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
!