In der univariaten Analyse werden die Ausprägungen einer einzelnen Variable mittels grafischer oder tabellarischer Darstellungsmethoden oder statistischer Maßzahlen aufbereitet. Dabei werden insbesondere Maßzahlen für die Lage und Verteilung berechnet.
Von nun an müssen wir zu Beginn jedes Skriptes die Datensätze, die
wir verwenden, in das Global Environment laden. Andernfalls stünden sie
nicht zur Bearbeitung zur Verfügung. In dieser Sitzung benötigen wir den
Datensatz der GLES 2017 (gles
) und den Datensatz zu
“Patterns of Democracy” (lijphart
). Wir müssen zunächst das
Verzeichnis prüfen und ggf. den Speicherort festlegen, an dem die
Datensätze abgespeichert sind.
getwd()
setwd("eigener Pfad")
Nun werden die Datensätze geladen. Da die Funktion zum Laden des
Dateiformats .sav
read.spss()
aus dem Paket
foreign
stammt, muss dieses zunächst geladen werden.
read.csv2()
ist eine Funktion aus dem vorgeladenen Paket
base
, sodass kein zusätzliches Paket geladen werden
muss.
library(foreign)
gles <- read.spss(file = "ZA6801_de_v4-0-1.sav", to.data.frame = TRUE)
lijphart <- read.csv2("Lijphart_Data_recode.csv")
# GLES
# Alter
q2c_num <- as.numeric(as.character(gles$q2c))
gles$alter <- 2017 - q2c_num
# Geschlecht
names(gles)[names(gles) == "q1"] <- "geschlecht"
# Einkommen kategorial
gles$einkommen_cat[gles$q192 == "unter 500 Euro" |
gles$q192 == "500 bis unter 750 Euro" |
gles$q192 == "750 bis unter 1000 Euro"] <- "weniger als 1000"
gles$einkommen_cat[gles$q192 == "1000 bis unter 1250 Euro" |
gles$q192 == "1250 bis unter 1500 Euro" |
gles$q192 == "1500 bis unter 2000 Euro"] <- "1000 bis 1999"
gles$einkommen_cat[gles$q192 == "2000 bis unter 2500 Euro" |
gles$q192 == "2500 bis unter 3000 Euro"] <- "2000 bis 2999"
gles$einkommen_cat[gles$q192 == "3000 bis unter 4000 Euro"] <- "3000 bis 3999"
gles$einkommen_cat[gles$q192 == "4000 bis unter 5000 Euro"] <- "4000 bis 4999"
gles$einkommen_cat[gles$q192 == "5000 bis unter 7500 Euro"] <- "5000 bis 7499"
gles$einkommen_cat[gles$q192 == "7500 bis unter 10000 Euro" |
gles$q192 == "10000 Euro und mehr"] <- "7500 und mehr"
gles$einkommen_cat <- factor(gles$einkommen_cat,
levels = c("weniger als 1000",
"1000 bis 1999",
"2000 bis 2999",
"3000 bis 3999",
"4000 bis 4999",
"5000 bis 7499",
"7500 und mehr"))
# Einkommen numerisch
gles$einkommen_num[gles$einkommen_cat == "weniger als 1000"] <- 1
gles$einkommen_num[gles$einkommen_cat == "1000 bis 1999"] <- 2
gles$einkommen_num[gles$einkommen_cat == "2000 bis 2999"] <- 3
gles$einkommen_num[gles$einkommen_cat == "3000 bis 3999"] <- 4
gles$einkommen_num[gles$einkommen_cat == "4000 bis 4999"] <- 5
gles$einkommen_num[gles$einkommen_cat == "5000 bis 7499"] <- 6
gles$einkommen_num[gles$einkommen_cat == "7500 und mehr"] <- 7
# Wohnort
gles$wohnort[gles$q197 == "Grossstadt"] <- "Großstadt"
gles$wohnort[gles$q197 == "kleine oder mittelgrosse Stadt"] <- "Kleinstadt"
gles$wohnort[gles$q197 == "laendliche Gegend oder Dorf"] <- "Land"
gles$wohnort[gles$q197 == "Vorstadt/ Vorort einer Grossstadt"] <- "Vorstadt"
# Links-Rechts-Selbsteinstufung
gles$LiRe <- as.character(gles$q32)
gles$LiRe[gles$LiRe == "1 links"] <- "1"
gles$LiRe[gles$LiRe == "11 rechts"] <- "11"
gles$LiRe <- as.numeric(gles$LiRe)
# Links-Rechts-Selbsteinstufung aggregiert
gles$LiRe_cat[gles$LiRe >= 1 &
gles$LiRe <= 2] <- "links"
gles$LiRe_cat[gles$LiRe >= 3 &
gles$LiRe <= 4] <- "moderat links"
gles$LiRe_cat[gles$LiRe >= 5 &
gles$LiRe <= 7] <- "mittig"
gles$LiRe_cat[gles$LiRe >= 8 &
gles$LiRe <= 9] <- "moderat rechts"
gles$LiRe_cat[gles$LiRe >= 10 &
gles$LiRe <= 11] <- "rechts"
gles$LiRe_cat <- factor(gles$LiRe_cat,
levels = c("links",
"moderat links",
"mittig",
"moderat rechts",
"rechts"))
# AfD-Wahl
gles$AfD.Wahl[gles$q19ba == "AfD"] <- 1
gles$AfD.Wahl[gles$q19ba != "AfD"] <- 0
# 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)
Wenn alles geklappt hat, sehen Sie rechts oben im Global Environment die beiden Datensätze gles mit 2112 Beobachtungen und 602 Variablen und lijphart mit 36 Beobachtungen und 74 Variablen.
Lagemaße vermitteln uns einen Eindruck der zentralen Tendenz einer Variable. Wir behandeln hier das arithmetische Mittel, den Median, den Modus, das Maximum und Minimum, sowie Quantile.
Der arithmetische Mittelwert \(\overline{x}\) summiert alle Merkmalsausprägungen einer metrischen Variable und teilt die Summe durch die Fallzahl. Dabei ist zu beachten, dass der arithmetische Mittelwert stark durch Extremwerte beeinflusst wird.
\(\frac1n\sum_{i=1}^n(x_i)\).
Zur Berechnung des arithmetischen Mittelwertes steht in
R
die Funktion mean()
im
base
-Paket zur Verfügung. Im Folgenden spezifizieren wir
das Argument na.rm = TRUE
(“rm” für “remove”), damit
NAs
bei der Berechnung nicht berücksichtigt werden.
Das mittlere Alter der Befragten liegt bei etwa 50 Jahren. Die
mittlere subjektive politische Position auf der Links-Rechts-Achse liegt
im Sample bei etwa 5.22 und damit leicht links der Skalenmitte (6). Wir
runden hier auf die erste Nachkommastelle mit der Funktion
round(x, digits = 1)
. Wollten wir mehr Nachkommastellen
ausgeben lassen, müssten wir das Argument digits
auf einen
höheren Wert setzen.
mean(gles$alter, na.rm = TRUE)
## [1] 50.15396
round(mean(gles$LiRe, na.rm = TRUE), digits = 1)
## [1] 5.2
Der Median \(\tilde{x}\) ist der
mittlere Wert einer Variable, wenn diese der Größe nach sortiert ist und
teilt die Beobachtungen in gleich große “Hälften”. Bei gerader Fallzahl
wird das arithmetische Mittel der beiden mittleren Werte berechnet. In
R
lässt sich der Median mit median()
berechnen.
median(gles$alter, na.rm = TRUE)
## [1] 51
median(gles$alter[1:100], na.rm = TRUE)
## [1] 52
median(gles$einkommen_num, na.rm = TRUE)
## [1] 3
Der Median des Alters der Befragten liegt bei 51 Jahren und damit leicht über dem arithmetischen Mittel. Betrachtet man nur die ersten 100 Personen des Samples, liegt der Median bei 52 Jahren. Die mittlere befragte Person fällt in Bezug auf das Nettohaushaltseinkommen in die Kategorie 3, ihr Haushaltseinkommen liegt also zwischen 2000 und 2999 Euro.
Der Modus h ist der häufigste Wert einer Variable bzw. die
Merkmalsausprägung, die am häufigsten realisiert wird. Für den Modus
gibt es keine spezielle Funktion in R
, allerdings können
wir uns den Modus bei Variablen mit wenigen Kategorien einfach mit einer
Häufigkeitstabelle ausgeben lassen.
table(gles$LiRe_cat)
links | moderat links | mittig | moderat rechts | rechts |
---|---|---|---|---|
158 | 512 | 1090 | 168 | 36 |
Die häufigste Merkmalsausprägung der Variable LiRe_cat ist “mittig” mit 1090 Beobachtungen. Bei Variablen mit vielen Ausprägungen kommt man mit dieser Methode allerdings an seine Grenzen.
table(gles$alter)[max(table(gles$alter))]
## 65
## 50
Das in den eckigen Klammern stehende
max(table(gles$alter))
gibt aus, wie oft der häufigste Wert
in der Häufigkeitstabelle table(gles$alter)
vorkommt (50
Mal). Die Aussage des Codes ist also: Zeige, welches Element von
table(gles$alter)
50 mal vorkommt. Schicken Sie die Teile
des obigen Codes einzeln ab, um die Logik dahinter nachzuvollziehen.
Auch für das Minimum und das Maximum, stehen in R
entsprechende Funktionen bereit: min()
und
max()
. Diese zeigen, welche die niedrigste und welche die
höchste Ausprägung ist.
min(gles$alter, na.rm = TRUE)
## [1] 16
max(gles$alter, na.rm = TRUE)
## [1] 95
Beide Werte lassen sich auch über range()
(“Spannweite”)
ausgeben.
range(gles$alter, na.rm = TRUE)
## [1] 16 95
Quantile sind bestimmte Anteile einer der Größe nach geordneten
Variable. Das Quantil gibt an, welche Ausprägung eine Variable in
bestimmte Anteile zerteilt. Üblicherweise werden Quantile in Form von
Quartilen bestimmt, welche die Verteilung in vier gleich große Anteile
mit 25 % unterteilen. Die Funktion quantile()
gibt
standardmäßig Quartile aus.
quantile(gles$alter, na.rm = TRUE)
## 0% 25% 50% 75% 100%
## 16 34 51 65 95
Minimum, Maximum und Median werden hier als erste, letzte und mittlere Beobachtung genauso ausgewiesen wie die 25- und 75-%-Quartile. Für das Alter der Befragten liegen diese bei 34 und 65 Jahren. Natürlich können wir Quantile auch anders zuschneiden. Wollten wir die Verteilung in Fünftel teilen, ginge das so:
quantile(gles$alter, probs = seq(0, 1, .2), na.rm = TRUE)
## 0% 20% 40% 60% 80% 100%
## 16 30 45 56 68 95
Für 10%-Schritte so:
quantile(gles$alter, probs = seq(0, 1, .1), na.rm = TRUE)
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 16 23 30 38 45 51 56 62 68 77 95
summary()
Um einen Überblick über eine Variable zu bekommen, ist die
summary()
-Funktion in der Regel ein hilfreiches Werkzeug.
Im Output von summary()
finden sich das Minimum, das
Maximum, das erste und dritte Quartil, der Median, das arithmetisches
Mittel und die Anzahl der fehlenden Werte.
summary(gles$alter)
Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. | NA’s |
---|---|---|---|---|---|---|
16 | 34 | 51 | 50.15396 | 65 | 95 | 1 |
Streuungsmaße ermöglichen es uns, einzuschätzen, wie sehr sich die Werte einer Variable unterscheiden, also wie sehr sie streuen.
Die Spannweite ist die Differenz der kleinsten (Minimum) und größten
Ausprägung einer Variable (Maximum). Sie hat den Nachteil, dass sie nur
auf zwei Werten basiert, die zudem Extremwerte darstellen. In
R
wird die Spannweite berechnet durch:
max(gles$alter, na.rm = TRUE) - min(gles$alter, na.rm = TRUE)
## [1] 79
range(gles$alter, na.rm = TRUE)[2] - range(gles$alter, na.rm = TRUE)[1]
## [1] 79
Der Quartilsabstand (“interquartile range”, IQR) ist die Differenz zwischen dem ersten und dem dritten Quartil einer Variable und ein übliches Streuungsmaß, da sich die Streuung einer Variable gut anhand der Streuung der mittleren 50 % der Werte einschätzen lässt. Auch wenn die IQR dadurch robuster gegen Ausreißer ist, basiert sie weiterhin nur auf zwei Werten.
IQR(gles$alter, na.rm = TRUE)
## [1] 31
Varianz und Standardabweichung sind die wichtigsten Streuungsmaße für metrische Variablen. Sie werden über die Differenzen der einzelnen Werte zum arithmetischen Mittel berechnet. Da einige Differenzen positiv und andere negativ sind, würden sie sich bei der Summierung gegenseitig aufheben. Deshalb werden sie zuvor quadriert:
\(\frac1n\sum_{i=1}^n(x_i-\overline{x})^2\).
Die Varianz ist abhängig von der Messeinheit einer Variable. Direkt
verglichen werden können daher nur die Varianzen von zwei Variablen mit
derselben Messeinheit. Durch die Quadrierung nimmt die Varianz im
Vergleich zu den ursprünglichen Werten meist deutlich größere Werte an.
R
berechnet die Varianz mit dem Befehl var()
.
Für das Alter der Befragten liegt die Varianz bei:
var(gles$alter, na.rm = TRUE)
## [1] 368.4336
Die Varianz des Anteils von Minimal-Gewinnkoalitionen mit einer Partei im Lijphart-Datensatz liegt bei:
var(lijphart$minwin_one_part4510, na.rm = TRUE)
## [1] 979.3046
Zur Berechnung der Standardabweichung wird die Wurzel der Varianz gezogen. So wird der Effekt der Quadrierung ausgeglichen und die Werte bleiben zu den Ursprungswerten vergleichbar. Die Standardabweichung ist dadurch sinnvoll interpretierbar, etwa als “mittlere Abweichung vom Mittel”.
\(\sqrt{\frac1n\sum_{i=1}^n(x_i-\overline{x})^2}\).
R
berechnet die Standardabweichung mit der Funktion
sd()
(“standard deviation”).
sd(gles$alter, na.rm = TRUE)
## [1] 19.19463
R
-Code.