Nachdem wir uns in der letzten Sitzung symmetrischen Beziehungen gewidmet haben, wollen wir uns in der heutigen Sitzung mit bivariaten linearen Regressionen (OLS) auseinandersetzen. Die Grundidee ist, dass wir durch die x-Werte (unabhängige Variable) eines Falls dessen y-Werte (abhängige Variable) vorhersagen können. Wie gut unser Modell die y-Werte voraussagt, können wir mithilfe von \(r^2\) quantifizieren. Die OLS nimmt an, dass sich die abhängige Variable als lineare Funktion einer unabhängigen Variable beschreiben lässt. Eine Veränderung um eine Einheit der unabhängigen Variable führt also zu einer Veränderung der abhängigen Variable um den Wert des Steigungskoeffizienten. Im Folgenden führen wir eine bivariate lineare Regression durch und berechnen beispielhaft den Zusammenhang zwischen der effektiven Parteienanzahl (ENP) und dem Gallagher-Index.
getwd()
setwd("eigener Pfad")
library(foreign)
gles <- read.spss(file = "ZA6801_de_v4-0-1.sav", to.data.frame = TRUE)
lijphart <- read.csv2("Lijphart_Data_recode.csv")
# Lijphart
# ENPP
lijphart$enpp4510 <- as.numeric(lijphart$enpp4510)
# Gallagher-Index
lijphart$disprop4510 <- as.numeric(lijphart$disprop4510)
# Bikameralismus-Index
lijphart$bicam4510 <- as.numeric(lijphart$bicam4510)
# Minimal-Gewinn-Koalition mit einer Partei
lijphart$minwin_one_part4510 <- as.numeric(lijphart$minwin_one_part4510)
# Exekutivdominanz (Kabinettsdauer)
lijphart$exe_dom4510 <- as.numeric(lijphart$exe_dom4510)
Um eine bivariate lineare Regression durchzuführen, verwenden wir die
Funktion lm()
(kurz für linear model). Wir müssen die
abhängige Variable, die unabhängige Variable und den Datensatz angeben.
In unserem Beispiel geben wir enpp4510
als abhängige
Variable und disprop4510
als unabhängige Variable an und
beziehen diese Variablen aus dem Datensatz lijphart
. In
einer OLS wird die abhängige Variable als lineare Funktion der
unabhängigen Variable angenommen. Zur Berechnung einer solchen Funktion
nutzen wir das tilde-Symbol ~
(Alt + N
oder
Option + N
). Die Regressionsergebnisse speichern wir in dem
Objekt lm_lijphart
.
lm_lijphart <- lm(enpp4510 ~ disprop4510, data = lijphart)
Wenn wir lm_lijphart
eingeben, werden uns der Intercept
(der Schnittpunkt der Regressionsgeraden mit der y-Achse) und die
Koeffizienten des Modells ausgegeben.
lm_lijphart
##
## Call:
## lm(formula = enpp4510 ~ disprop4510, data = lijphart)
##
## Coefficients:
## (Intercept) disprop4510
## 4.0921 -0.1054
Wir sehen hier, dass der Intercept 4.092 beträgt und der Koeffizient mit -0.105 angegeben wird. Steigt der Wert des Gallagher-Index um eine Einheit, wird das Wahlsystem also disproportionaler, d.h. der ENP-Wert verändert sich um -0.105. Wir stellen hier also einen negativen Zusammenhang zwischen der Parteienanzahl und der Wahlsystemdisproportionalität fest, der sich mit den Ergebnissen von Lijphart deckt. Die Regressionsgleichung für unser Beispiel lautet:
\(y_i = 4.092 – 0.150 * x_i\)
Auf Grundlage des Regressionsmodells können wir nun für bestimmte Ausprägungen von x Werte für y vorhersagen. In dieser Sitzung machen wir das noch händisch über die Konsole, ab der nächsten Sitzung mit einem neuen Befehl. Für eine Demokratie mit einem Gallagher-Index von 3.480 wie Deutschland im Jahr 2021 würde unser Modell eine effektive Parteienzahl von 3.57 vorhersagen:
\(\hat{y}_i= 4.092 – 0.150 * 3.480 = 3.570\)
Intercept und Koeffizient allein reichen aber nicht aus, um die
Ergebnisse der linearen Regression vollständig zu beurteilen. Hierfür
benötigen wir zusätzlich Informationen über den Standardfehler, den
p-Wert und weitere Modellstatistiken. Diese Informationen erhalten wir,
wenn wir die summary()
-Funktion auf unser Objekt mit der
linearen Regression (lm_lijphart
) anwenden.
summary(lm_lijphart)
##
## Call:
## lm(formula = enpp4510 ~ disprop4510, data = lijphart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.8840 -0.7336 -0.2241 0.9471 1.7194
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.09206 0.27417 14.925 < 2e-16 ***
## disprop4510 -0.10536 0.02619 -4.023 0.000303 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9503 on 34 degrees of freedom
## Multiple R-squared: 0.3225, Adjusted R-squared: 0.3026
## F-statistic: 16.19 on 1 and 34 DF, p-value: 0.000303
Wir sehen hier, dass die Schätzung für disprop4510
negativ und statistisch signifikant ist. Wir können also davon ausgehen,
dass der Effekt des Gallagher-Index auf die effektive Parteienzahl in
der Grundgesamtheit von Null verschieden ist. Je disproportionaler ein
Wahlsystem ist, desto niedriger ist die effektive Zahl der Parteien.
Weiterhin sehen wir, dass \(R^2\) 0.30
beträgt. Das bedeutet, dass 30 % der Varianz der Parteienzahl durch die
unabhängige Variable erklärt wird.
Mit diesen wenigen Code-Zeilen haben wir eine bivariate lineare
Regression berechnet und uns die Ergebnisse anzeigen lassen. Im Grunde
können wir mit dem oben gezeigten Code alle notwendigen Informationen
für unsere Analyse generieren. Mittels ein paar zusätzlicher Operationen
lassen sich die Modellkomponenten einzeln speichern und für weitere
Analyseschritte wie z.B. eine Visualisierung nutzen. Zuerst nutzen wir
das Paket broom
und die tidy
-Funktion und
konvertieren das Modell in einen Datensatz, in dem wir unsere
Modellschätzungen und Teststatistiken speichern. Die
tidy
-Funktion fasst Informationen über
Regressionsmodellkomponenten zusammen. Wir speichern den neuen Datensatz
in dem Objekt lm_fit_lijphart
:
library(broom)
lm_fit_lijphart <- tidy(lm_lijphart)
lm_fit_lijphart
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | 4.0920607 | 0.2741723 | 14.925143 | 0.000000 |
disprop4510 | -0.1053572 | 0.0261877 | -4.023157 | 0.000303 |
Die Konfidenzintervalle extrahieren wir mit conf.int = TRUE. Konfidenzintervalle geben Auskunft über die Präzision des Modells.
lm_fit_lijphart <- tidy(lm_lijphart, conf.int = TRUE)
lm_fit_lijphart
term | estimate | std.error | statistic | p.value | conf.low | conf.high |
---|---|---|---|---|---|---|
(Intercept) | 4.0920607 | 0.2741723 | 14.925143 | 0.000000 | 3.5348755 | 4.6492458 |
disprop4510 | -0.1053572 | 0.0261877 | -4.023157 | 0.000303 | -0.1585769 | -0.0521374 |
Die Maße zur Interpretation der Modellgüte, wie z.B. \(R^2\), können wir mittels der
glance
-Funktion in ein zusätzliches Objekt speichern.
lm_glance_lijphart <- glance(lm_lijphart)
lm_glance_lijphart
r.squared | adj.r.squared | sigma | statistic | p.value | df | logLik | AIC | BIC | deviance | df.residual | nobs |
---|---|---|---|---|---|---|---|---|---|---|---|
0.3225175 | 0.3025915 | 0.9502519 | 16.18579 | 0.000303 | 1 | -48.21592 | 102.4318 | 107.1824 | 30.70127 | 34 | 36 |
Zusätzlich können wir auch Modellvorhersagen und Residuen speichern.
Diese Metriken helfen uns dabei, die Modellgüte zu beurteilen. Sind die
Residuen eines Regressionsmodells nicht normalverteilt (das können wir
in einem ersten Schritt mit einem Histogramm grafisch prüfen), dann
müssen wir davon ausgehen, dass die Modellergebnisse verzerrt sind. Wir
speichern die Modellvorhersagen und Residuen mit der
augment()
-Funktion und speichern die Informationen in dem
neuen Objekt lm_aug_lijphart
.
lm_aug_lijphart <- augment(lm_lijphart)
lm_aug_lijphart
enpp4510 | disprop4510 | .fitted | .resid | .hat | .sigma | .cooksd | .std.resid |
---|---|---|---|---|---|---|---|
3.15 | 17.98 | 2.197739 | 0.9522611 | 0.0953702 | 0.9486653 | 0.0585161 | 1.0536148 |
2.22 | 9.44 | 3.097489 | -0.8774891 | 0.0283846 | 0.9520121 | 0.0128195 | -0.9368192 |
2.68 | 2.51 | 3.827614 | -1.1476142 | 0.0554492 | 0.9423848 | 0.0453241 | -1.2426377 |
1.69 | 16.48 | 2.355775 | -0.6657746 | 0.0755845 | 0.9569803 | 0.0217093 | -0.7287103 |
1.68 | 17.27 | 2.272543 | -0.5925425 | 0.0855790 | 0.9584917 | 0.0198979 | -0.6520902 |
4.72 | 3.35 | 3.739114 | 0.9808858 | 0.0482834 | 0.9485288 | 0.0283996 | 1.0580980 |
1.38 | 14.61 | 2.552792 | -1.1727925 | 0.0557044 | 0.9413835 | 0.0475783 | -1.2700724 |
2.52 | 11.56 | 2.874132 | -0.3541319 | 0.0346765 | 0.9624993 | 0.0025841 | -0.3793061 |
2.67 | 14.38 | 2.577025 | 0.0929753 | 0.0536261 | 0.9643987 | 0.0002866 | 0.1005767 |
4.57 | 1.71 | 3.911900 | 0.6581001 | 0.0632701 | 0.9572518 | 0.0172920 | 0.7155599 |
5.04 | 2.96 | 3.780203 | 1.2597965 | 0.0514771 | 0.9378902 | 0.0502819 | 1.3612496 |
3.26 | 20.88 | 1.892203 | 1.3677969 | 0.1433136 | 0.9296045 | 0.2022924 | 1.5551488 |
3.09 | 2.67 | 3.810757 | -0.7207571 | 0.0540016 | 0.9558770 | 0.0173579 | -0.7798391 |
2.27 | 7.88 | 3.261846 | -0.9918462 | 0.0281148 | 0.9485085 | 0.0162138 | -1.0587615 |
3.72 | 3.85 | 3.686436 | 0.0335644 | 0.0445270 | 0.9645237 | 0.0000304 | 0.0361352 |
4.80 | 9.60 | 3.080632 | 1.7193681 | 0.0286213 | 0.9154887 | 0.0496527 | 1.8358443 |
2.89 | 3.93 | 3.678007 | -0.7880070 | 0.0439612 | 0.9542848 | 0.0165375 | -0.8481128 |
5.18 | 2.60 | 3.818132 | 1.3618679 | 0.0546302 | 0.9332156 | 0.0627757 | 1.4739929 |
4.84 | 3.61 | 3.711721 | 1.1282787 | 0.0462827 | 0.9433416 | 0.0358678 | 1.2158159 |
1.67 | 15.66 | 2.442168 | -0.7721675 | 0.0662131 | 0.9544593 | 0.0250706 | -0.8409088 |
3.62 | 7.00 | 3.354560 | 0.2654395 | 0.0295933 | 0.9634010 | 0.0012261 | 0.2835632 |
2.85 | 21.97 | 1.777364 | 1.0726362 | 0.1646368 | 0.9426586 | 0.1503050 | 1.2350258 |
3.48 | 3.43 | 3.730686 | -0.2506856 | 0.0476569 | 0.9635050 | 0.0018285 | -0.2703298 |
1.99 | 2.07 | 3.873971 | -1.8839714 | 0.0596304 | 0.9033080 | 0.1325292 | -2.0444960 |
2.85 | 15.61 | 2.447435 | 0.4025646 | 0.0656747 | 0.9618137 | 0.0067510 | 0.4382761 |
4.87 | 1.21 | 3.964579 | 0.9054215 | 0.0686519 | 0.9506147 | 0.0359271 | 0.9873157 |
3.64 | 4.53 | 3.614793 | 0.0252073 | 0.0400276 | 0.9645318 | 0.0000153 | 0.0270743 |
2.28 | 9.25 | 3.117507 | -0.8375069 | 0.0281541 | 0.9531373 | 0.0115775 | -0.8940277 |
3.13 | 4.43 | 3.625329 | -0.4953285 | 0.0406452 | 0.9605164 | 0.0059997 | -0.5321878 |
2.66 | 7.28 | 3.325061 | -0.6650605 | 0.0289953 | 0.9573600 | 0.0075318 | -0.7102509 |
3.47 | 2.04 | 3.877132 | -0.4071321 | 0.0599262 | 0.9617684 | 0.0062238 | -0.4418915 |
5.20 | 2.55 | 3.823400 | 1.3766001 | 0.0550836 | 0.9325068 | 0.0647357 | 1.4902954 |
1.87 | 11.33 | 2.898364 | -1.0283640 | 0.0336638 | 0.9471952 | 0.0211102 | -1.1008902 |
2.16 | 11.70 | 2.859382 | -0.6993819 | 0.0353323 | 0.9565440 | 0.0102834 | -0.7493536 |
4.40 | 6.05 | 3.454650 | 0.9453501 | 0.0325098 | 0.9499212 | 0.0171869 | 1.0114180 |
2.39 | 14.28 | 2.587560 | -0.1975604 | 0.0527476 | 0.9638947 | 0.0012705 | -0.2136133 |
Diesen neuen Datensatz können wir zur Visualisierung der linearen
Regression und der Residuen, die wir mit rot hervorheben, nutzen. Die
Visualisierung realisieren wir mit dem ggplot2
-Paket, das
wir bereits grundlegend kennengelernt haben und auch noch genauer
kennenlernen werden.
library(ggplot2)
ggplot(lm_aug_lijphart, aes(x = disprop4510, y = enpp4510)) +
geom_segment(aes(xend = disprop4510, y = enpp4510, yend = .fitted),
colour = "red") +
geom_point() +
geom_line(aes(x = disprop4510, y = .fitted)) +
xlab("Disproportionalität des Wahlsystems (Gallagher-Index)") + ylab("Effektive Parteienanzahl (ENP)")
Zusammenhänge lassen sich mit vielen unterschiedlichen Graphen
präsentieren. Zwei dieser Möglichkeiten werden wir im Folgenden
besprechen: Streudiagramme und Linienplots. Für die Darstellung von
Zusammenhängen werden wir vor allem die ggplot()
-Funktion
und geom_point()
aus dem Paket ggplot2
verwenden. Zur Erinnerung: Die Grafiken von ggplot2
bestehen aus Schichten, welche mit Visualisierungselementen, den geoms
gestaltet werden. Mit dem ersten Argument wird der Datensatz definiert.
Das zweite Argument mapping
legt mit Hilfe von
aes()
fest, welche Daten genutzt werden. Wie bereits oben
erwähnt, werden wir unsere Visualisierungen mit den Variablen
enpp4510
und disprop4510
durchführen.
Wollen wir den Zusammenhang zwischen der effektiven Parteienanzahl
und der Wahlsystemdisproportionalität darstellen, dann bietet sich ein
Streudiagramm an. Hierfür verwenden wir die Funktion
geom_point()
.
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point()
Wollen wir wissen, welche Länder sich hinter den Punkten verstecken,
dann können wir mittels geom_text()
und der Variable
Country
ganz einfach Beschriftungen hinzufügen:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_text(label = lijphart$Country)
Die Aussagekraft lässt sich noch erweitern, wenn wir eine
Regressionslinie hinzufügen. Zur kurzen Erinnerung: In Sitzung 7 haben
wir eine bivariate Regression zwischen der ENPP und dem Gallagher-Index
gerechnet und herausgefunden, dass beide Variablen signifikant negativ
zusammenhängen. Um das auch grafisch darzustellen, nutzen wir die
Funktion geom_smooth()
und bestimmen mit method = lm, dass
wir eine lineare Regressionsgerade visualisieren wollen.
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'
# Eine alternative Schreibweise bietet das Tilde (~) Zeichen, welches wir bereits aus dem Tutorial zur bivariaten OLS Regression kennen
# ggplot(lijphart, aes(enpp4510 ~ disprop4510)) +
# geom_point() +
# geom_smooth(method = lm)
Wie wir sehen können, werden die Konfidenzintervalle automatisch visualisiert. Wollen wir das nicht, dann können wir das wie folgt bestimmen:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm, se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
In einem letzten Schritt beschriften wir die Punkte mit den
dazugehörigen Ländernamen. Hierfür verwenden wir wieder die Funktion
geom_text()
und die Variable Country
,
zusätzlich passen wir mit hjust und vjust die Platzierung der
Beschriftungen an und garantieren so eine bessere Lesbarkeit:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0)
## `geom_smooth()` using formula 'y ~ x'
Wollen wir das Aussehen unserer Graphen verändern, dann bietet uns
ggplot2
zahlreiche Möglichkeiten. Einige davon werden in
den folgenden Unterkapitels präsentiert, andere finden Sie mittels der
help-Funktion ?
oder aber über die ggplot2-Homepage.
Mit ggplot
können wir die Skalierung der Achsen
anpassen. Für die Skalierung der x-Achse kann die Funktion
xlim()
verwendet werden. Hierbei wird der
Definitionsbereich durch die Benennung des Anfangswertes und des
Endwertes bestimmt. Die Werte werden dabei mit einem Komma getrennt.
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
xlim(0,7)
## `geom_smooth()` using formula 'y ~ x'
Das Prinzip ist analog für die y-Achse anwendbar.
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
ylim(0,30)
## `geom_smooth()` using formula 'y ~ x'
Um die Skalierung der Achsen noch genauer bestimmen zu können, kann
die Funktion scale_x_continuous()
bzw.
scale_y_continuous()
genutzt werden (s. Sitzung 5).
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
ylim(0,30)
## `geom_smooth()` using formula 'y ~ x'
ggplot2
macht die Benennung eines Graphen sehr einfach.
Hierfür verwenden wir die Funktion labs()
und setzen unsere
gewünschte Beschriftung in Anführungszeichen:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index",
x ="Effektive Parteienanzahl", y = "Disproportionalität von Wahlsystemen")
## `geom_smooth()` using formula 'y ~ x'
ggplot2 bietet unterschiedliche Hintergrund-Themes an. Zusätzlich bietet das Paket ggthemes weitere Möglichkeiten. Die folgende Tabelle bietet einen kleinen Überblick über mögliche Themes.
Funktion | Paket | Beschreibung |
---|---|---|
theme_bw() |
ggplot2 |
Schwarze Elemente auf weißem Hintergrund |
theme_minimal() |
ggplot2 |
Minimalistisch |
theme_classic() |
ggplot2 |
Theme ohne grid Linien |
theme_base() |
ggthemes |
Basis Theme |
theme_economist() |
ggthemes |
The Economist Theme |
theme_fivethirtyeight() |
ggthemes |
FiveThirtyEight Theme |
theme_tufte() |
ggthemes |
Tufte (1983) theme |
Die Veränderung des Hintergrunds ist denkbar einfach. Hierfür müssen wir einfach die jeweilige Theme-Funktion verwenden:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index"
, x ="Effektive Parteienanzahl"
, y = "Disproportionalität von Wahlsystemen") +
theme_minimal()
## `geom_smooth()` using formula 'y ~ x'
# The Economist
library(ggthemes) # für dieses Theme brauchen wir ein weiteres Paket
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point() +
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index"
, x ="Effektive Parteienanzahl"
, y = "Disproportionalität von Wahlsystemen") +
theme_economist()
## `geom_smooth()` using formula 'y ~ x'
Wenn wir die Farben der Datenpunkte verändern wollen, dann müssen wir
lediglich das Argument color in die geom_point()
Funktion
einbauen. Gleiches gilt für die Form der Punkte, wobei wir hier das
Argument shape verwenden (die einzelnen Formen können über die Ziffern
1-20 ausgewählt werden):
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point(shape = 18, color = "blue") + # Form und Farbe der Punkte verändern
geom_smooth(method = lm) +
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index"
, x ="Effektive Parteienanzahl"
, y = "Disproportionalität von Wahlsystemen") +
theme_minimal()
## `geom_smooth()` using formula 'y ~ x'
Die Schritte sind ähnlich, wenn wir die Form, Farbe und Füllung unsere Regressionslinie verändern möchten:
ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point(shape = 18, color = "blue") +
geom_smooth(method = lm, linetype = "dashed",
color = "darkred", fill = "blue") + # Form und Aussehen der Regressionslinie und Füllung der Konfidenzintervalle verändern
geom_text(label = lijphart$Country, hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index"
, x ="Effektive Parteienanzahl"
, y = "Disproportionalität von Wahlsystemen") +
theme_minimal()
## `geom_smooth()` using formula 'y ~ x'
Wenn wir einen Plot erstellt haben, den wir speichern möchten, können
wir die Funktion ggsave()
verwenden. Die Benennung der
Datei bestimmen wir, indem wir Anführungszeichen verwenden. Dabei wird
nur die zuletzt erstellte Darstellung gespeichert. Die gespeicherte
Darstellung wird in dem Ordner gespeichert, den wir zuvor mit
setwd()
festgelegt haben.
ggsave("fig1-ENPP_Gallagher.png")
## Saving 7 x 5 in image
## `geom_smooth()` using formula 'y ~ x'
Die Abbildung wird in Ihrem Arbeitsverzeichnis gespeichert. Der Dateityp .png kann durch ein beliebiges Format (z.B. .jpg) ersetzt werden.
Haben wir unsere Abbildungen in einem Objekt gespeichert, können wir die Graphen speichern, indem wir den Objektnamen vor dem Dateinamen angeben. Dieses Vorgehen hat vor allem bei vielen Graphen Vorteile, da wir so effizient einzelne Visualisierungen ansteuern können.
# Graph wird im Objekt "ENPP_Gallagher" gespeichert:
ENPP_Gallagher <- ggplot(lijphart, aes(x = enpp4510, y = disprop4510)) +
geom_point(shape = 18, color = "blue") +
geom_smooth(method = lm, linetype = "dashed",
color = "darkred", fill = "blue") + # Form und Aussehen der Regressionslinie und Füllung der Konfidenzintervalle verändern
geom_text(data = lijphart, aes(label = Country), hjust = 0, vjust = 0) +
labs(title = "Zusammenhang zwischen ENPP und Gallagher-Index"
, x ="Effektive Parteienanzahl"
, y = "Disproportionalität von Wahlsystemen") +
theme_minimal()
# Den Graphen als Datei in unserem Arbeitsverzeichnis speichern
ggsave(plot = ENPP_Gallagher, filename = "fig1-ENPP_Gallagher.png", device = "png")
## Saving 7 x 5 in image
## `geom_smooth()` using formula 'y ~ x'
Sie werden feststellen, dass Sie gelegentlich mit der Größe Ihres Graphs nicht ganz zufrieden sind. Um das zu ändern, können wir die Breite und Höhe der zu speichernden Graphen verändern:
ggsave(plot = ENPP_Gallagher, "fig1-ENPP_Gallagher.png", device = "png", width = 4, height = 4)
## `geom_smooth()` using formula 'y ~ x'
Alternativ kann, ohne dabei aber Anpassungen der Größe o.ä. vornehmen zu können, die Grafik über Plots -> Export gespeichert werden.