1. Einleitung

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.

2. Datensätze laden und umkodieren

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.

3. Lagemaße

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.

3.1 Arithmetisches Mittel

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

3.2 Median

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.

3.3 Modus

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.

3.4 Maximum, Minimum

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

3.5 Quantile

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

3.6 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

4. Streuungsmaße

Streuungsmaße ermöglichen es uns, einzuschätzen, wie sehr sich die Werte einer Variable unterscheiden, also wie sehr sie streuen.

4.1 Spannweite

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

4.2 Quartilsabstand

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

4.3 Varianz

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

4.4 Standardabweichung

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

5. Übungsaufgaben

  1. Lassen Sie sich alle oben genannten Lage- und Streuungsmaße für den Gallagher-Index, den Anteil von Minimal-Gewinnkoalitionen mit einer Partei und der Exekutivdominanz ausgeben. Lassen Sie den Mittelwert jeweils auf die zweite Nachkommastelle runden. Berechnen Sie bei einer Variable Quartile, bei einer Variable 12.5 %-Quantile und bei einer Variable 5 %-Quantile.
  2. Erstellen Sie eine Häufigkeitstabelle des kategorisierten Haushaltseinkommens, in der Sie die absoluten, relativen und kumulativen Häufigkeiten aufführen. Recherchieren Sie den benötigten R-Code.
  3. Erstellen Sie eine Zusammenfassung der wesentliche Lagemaße des numerisch kodierten Haushaltseinkommens und berechnen Sie den Quartilsabstand. Wie hoch ist das Haushaltseinkommen der mittleren 50 % der Befragten?
  4. Ermitteln Sie Varianz und die Standardabweichung der Links-Rechts-Selbsteinstufung und des Gallagher-Indexes.