1. Einleitung

Bisher haben wir uns mit unterschiedlichen Objektklassen in R auseinandergesetzt. Nun möchten wir externe Datensätze einladen und aufbereiten. Dabei lernen wir zunächst die Datensätze kennen, mit denen wir im weiteren Kursverlauf arbeiten werden. Anschließend wollen wir die darin enthaltenen Variablen so anpassen, dass wir unsere Analysen durchführen können, d.h. die Variablen umkodieren. Dieser Prozess muss vor jeder Analyse durchgeführt werden. Damit Ihre Veränderungen am Datensatz für Sie und andere nachvollziehbar sind, ist es sinnvoll, die Kommentarfunktion zu nutzen. Wenn eine Zeile mit # beginnt, ignoriert R den Text in der entsprechenden Zeile. Mithilfe von Kommentaren können Sie Ihre Arbeitsschritte beschreiben und Ihre Analyse übersichtlicher gestalten.

2. Externe Datensätze einladen

Bisher haben wir uns mit unterschiedlichen Objektklassen in R auseinandergesetzt. Nun möchten wir externe Datensätze einladen und aufbereiten. Dabei lernen wir zunächst die Datensätze kennen, mit denen wir im weiteren Kursverlauf arbeiten werden. Anschließend wollen wir die darin enthaltenen Variablen so anpassen, dass wir unsere Analysen durchführen können, d.h. die Variablen umkodieren. Dieser Prozess muss vor jeder Analyse durchgeführt werden. Damit Ihre Veränderungen am Datensatz für Sie und andere nachvollziehbar sind, ist es sinnvoll, die Kommentarfunktion zu nutzen. Wenn eine Zeile mit # beginnt, ignoriert R den Text in der entsprechenden Zeile. Mithilfe von Kommentaren können Sie Ihre Arbeitsschritte beschreiben und Ihre Analyse übersichtlicher gestalten.

2.1 GLES 2017

Besuchen Sie die Website des GESIS Leibniz Instituts für Sozialwissenschaften unter https://www.gesis.org/home. Die GESIS bietet einen großen Fundus an sozialwissenschaftlichen Daten. Hier finden Sie eine Reihe relevanter Forschungsdaten wie die Allgemeine Bevölkerungsumfrage der Sozialwissenschaften (ALLBUS) oder das Sozio-ökonomische Panel (SOEP). Suchen Sie in der Suchleiste nach dem “Nachwahl-Querschnitt (GLES 2017)”. Die German Longitudinal Election Study (GLES) ist ein Projekt der GESIS in Kooperation mit der Deutschen Gesellschaft für Wahlforschung (DGfW). Sie vereint Vor- und Nachwahlbefragungen einer repräsentativen Stichprobe der Wählerschaft bei Bundestagswahlen. Für den verwendeten Nachwahl-Querschnitt wurden die Befragten im Nachgang der Bundestagswahl 2017 zu politischen Themen, Einstellungen und Verhaltensweisen, Meinungsbildung im Wahlkampf sowie sozio-demografischen Merkmalen befragt. Damit ist es uns möglich, Einflussfaktoren der Wahl zu bestimmen.

Laden Sie sich unter “Downloads” -> “Datensätze” Version “ZA6801_de_v4-0-1.sav deutsch (Datensatz)” herunter. Dafür müssen Sie ein Konto bei der GESIS erstellen. Laden Sie sich unter “Fragebögen” außerdem den Fragebogen “ZA6801_fb.pdf deutsch” und unter “andere Dokumente” die Studienbeschreibung “ZA6801_sb.pdf” herunter und machen Sie sich mit beiden vertraut. Die Variablennamen sind technisch gehalten und wenig aussagekräftig, weshalb die Begleitdokumentation wesentlich ist, um zu verstehen, welche inhaltliche Bedeutung dahintersteckt. Legen Sie den Datensatz an einer geeigneten Stelle auf ihrem Computer ab. Am besten ist es, wenn Sie sich einen Ordner zu diesem Kurs anlegen, in dem Sie den Datensatz ablegen. Um den Datensatz in R einzuladen, müssen wir zunächst herausfinden, auf welchen Ordner R zugreift. Mit dem Befehl getwd() wird uns das derzeitige Arbeitsverzeichnis (,,wd“ steht für Working Directory) angezeigt.

getwd()

Nun zeigt R an, wo es Daten einliest und wo es sie speichert. Wir wollen nun erreichen, dass R auf den Ordner zugreift, in dem Sie Ihren Datensatz abgelegt haben. Dazu legen wir das Verzeichnis mit setwd() fest. Schreiben Sie dazu den Pfad zu dem Verzeichnis, in dem der Datensatz abgelegt ist, in Anführungszeichen in die Funktion und führen Sie diese aus. Bei Apple weist ein Dateipfad beispielsweise die folgende Struktur auf: “/Users/nutzer/documents/r_selbstlernkurs”. Bei Windows lautet der Pfad: “C:/Users/nutzer/r_selbstlernkurs”. Möchten Sie Ihr Arbeitsverzeichnis woanders anlegen bzw. anders benennen, müssen Sie den Pfad entsprechend anpassen. Nachfolgend müssen Sie also immer, wenn von “Eigener Pfad” die Rede ist, das von Ihnen gewählte Verzeichnis einsetzen. Wenn Sie Windows nutzen und Ihren Pfad kopieren, dann müssen Sie darauf achten, dass Sie die Schrägstriche anpassen. Das heißt, dass Sie \ durch / austauschen müssen.

setwd("eigener Pfad")

Nun können wir den Datensatz von R aus ansteuern und laden. Dazu müssen wir R lediglich anhand des Dateipfades mitteilen, wo der Datensatz abgelegt ist. Der Datensatz liegt im Datenformat .sav vor, dem Format des Statistikprogramms SPSS. Deshalb benötigen wir eine spezielle Funktion, mit der wir den Datensatz laden können. Die Funktion, die wir zum Laden des Datensatzes verwenden, lautet read.spss() aus dem Paket foreign. Wir installieren und laden das Paket:

install.packages("foreign")
library(foreign)

Nun können wir den Datensatz mit der Funktion read.spss() laden. Wir speichern den Datensatz in dem Objekt gles. Außerdem spezifizieren wir das Argument to.data.frame = TRUE, mit dem wir festlegen, dass der Datensatz in Form eines Dataframe gespeichert werden soll.

gles <- read.spss(file = "ZA6801_de_v4-0-1.sav", to.data.frame = TRUE)

Beachten Sie: In dieser Form funktioniert der Code nur, da wir das Verzeichnis mittels setwd() so definiert haben, dass R im gewählten Arbeitsverzeichnis die Datei “ZA6801_de_v4-0-1.sav” findet. Hätten wir das Verzeichnis nicht festgelegt, müssten wir den gesamten Dateienpfad (inklusive der Datei) im Argument file nennen.

2.2 Patterns of Democracy

Um den Datensatz zu “Patterns of Democracy” (Lijphart 2012) zu laden, gehen wir etwas anders vor. Diesen Datensatz können Sie per Mausklick über den Downloadbutton auf dieser Website herunterladen. Die Datei heißt “Lijphart_Data_recode.csv” und wird unter Downloads gespeichert. Achten Sie darauf, dass Sie die Datei in Ihr Arbeitsverzeichnis verschieben.

“Patterns of Democracy” ist ein Klassiker der Demokratieforschung und untersucht zwei Typen von Demokratien, die Mehrheitsdemokratie mit dem klassischen Beispiel Großbritannien und die Konsensdemokratie mit dem klassischen Beispiel Deutschland. Der vorliegende Datensatz beinhaltet alle Variablen, die Lijphart verwendet, um die latenten Konzepte Mehrheits- und Konsensdemokratie zu messen. Die Beobachtungseinheiten sind, anders als beim GLES, nicht Befragte, sondern Demokratien. Ebenfalls anders als der GLES-Datensatz, liegt der Lijphart-Datensatz im CSV-Format vor, d.h. alle Werte stehen in einer Zeile hintereinander, jeweils durch ein Komma oder Semikolon getrennt (CSV steht für comma-separated values).

3. Ein erster Blick in die Datensätze

Nachdem uns nun beide Datensätze zur Verfügung stehen, möchten wir einen Überlick über die darin enthaltenen Variablen bekommen. Eine einfache Möglichkeit dazu ist die Funktion str() (“structure”), die den Objekttyp sowie einen Überblick über die Variablen und enthaltenen Werte zeigt.

str(gles)
## 'data.frame':    2112 obs. of  602 variables:
##  $ study       : Factor w/ 1 level "ZA6801": 1 1 1 1 1 1 1 1 1 1 ...
##  $ version     : chr  "4-0-1 (2019-02-26)" "4-0-1 (2019-02-26)" "4-0-1 (2019-02-26)" "4-0-1 (2019-02-26)" ...
##  $ doi         : chr  "doi:10.4232/1.13235" "doi:10.4232/1.13235" "doi:10.4232/1.13235" "doi:10.4232/1.13235" ...
##  $ year        : Factor w/ 1 level "2017": 1 1 1 1 1 1 1 1 1 1 ...
##  $ field       : chr  "2017-09-25 bis 2017-11-30" "2017-09-25 bis 2017-11-30" "2017-09-25 bis 2017-11-30" "2017-09-25 bis 2017-11-30" ...
##  $ glescomp    : Factor w/ 9 levels "Komponente 1: Vor- und Nachwahl-Querschnitt",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ survey      : Factor w/ 3 levels "Vorwahl-Querschnitt",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ lfdn        : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ intnum      : num  63 63 63 63 63 63 63 63 63 63 ...
##  $ welle       : Factor w/ 2 levels "Basisbearbeitung",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ intdate     : num  1.37e+10 1.37e+10 1.37e+10 1.37e+10 1.37e+10 ...
##  $ beginn      : chr  "2017/11/18 1506:15" "2017/10/04 1652:52" "2017/10/05 1446:27" "2017/10/02 1058:37" ...
##  $ ende        : chr  "2017/11/18 1642:12" "2017/10/04 1820:12" "2017/10/05 1650:28" "2017/10/02 1224:38" ...
##  $ intdauer_ges: num  95.9 87.3 124 86 75.2 ...
##  $ bula        : Factor w/ 16 levels "Schleswig-Holstein",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ ostwest     : Factor w/ 2 levels "Ostdeutschland",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ ostwest2    : Factor w/ 2 levels "Ostdeutschland",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ vpoint      : num  2858 2858 2858 2858 2858 ...
##  $ wahlkreis   : Factor w/ 299 levels "1 Flensburg / Schleswig",..: 9 9 9 9 9 9 9 9 9 9 ...
##  $ w_ow        : num  1.2 1.2 1.2 1.2 1.2 ...
##  $ w_ipfges    : num  0.977 0.655 0.636 0.551 0.931 ...
##  $ w_ipfost    : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ w_ipfwes    : num  0.834 0.55 0.554 0.463 0.806 ...
##  $ q1          : Factor w/ 2 levels "maennlich","weiblich": 1 1 2 1 2 1 2 1 2 2 ...
##  $ q2b         : Factor w/ 12 levels "Januar","Februar",..: 6 4 1 10 5 4 3 1 4 11 ...
##  $ q2c         : Factor w/ 79 levels "1922","1923",..: 38 42 31 17 79 37 29 54 52 76 ...
##  $ q2d         : Factor w/ 2 levels "nicht wahlberechtigt",..: 2 2 2 2 1 2 2 2 2 2 ...
##  $ q3_c1       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: 100 188 59 177 195 144 58 236 195 261 ...
##  $ q3_c2       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA 190 NA NA 193 141 NA NA 196 NA ...
##  $ q3_c3       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA 187 NA NA 107 NA NA NA NA NA ...
##  $ q3_c4       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ q3_c5       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ q4_c1       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: 159 200 54 72 87 261 180 71 170 195 ...
##  $ q4_c2       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: 156 NA NA NA 82 NA NA NA 171 NA ...
##  $ q4_c3       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ q4_c4       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ q4_c5       : Factor w/ 302 levels "POLITISCHE PROZESSE (POLITICS-THEMEN)",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ q5a         : Factor w/ 55 levels "CDU/CSU","CDU",..: 2 4 54 1 1 6 4 5 42 4 ...
##  $ q5b         : Factor w/ 55 levels "CDU/CSU","CDU",..: 2 4 54 1 1 6 4 5 42 4 ...
##  $ q6a         : Factor w/ 55 levels "CDU/CSU","CDU",..: 6 4 53 1 1 54 4 5 NA 2 ...
##  $ q6b         : Factor w/ 55 levels "CDU/CSU","CDU",..: 6 4 53 1 1 54 4 5 NA 2 ...
##  $ q7          : Factor w/ 4 levels "sehr aufmerksam",..: 3 2 1 1 2 1 1 1 3 2 ...
##  $ q8a         : Factor w/ 5 levels "stimme voll und ganz zu",..: 2 3 1 1 3 1 3 3 1 1 ...
##  $ q8b         : Factor w/ 5 levels "stimme voll und ganz zu",..: 3 3 4 3 3 4 5 3 3 4 ...
##  $ q8c         : Factor w/ 5 levels "stimme voll und ganz zu",..: 2 3 1 1 4 3 2 3 4 1 ...
##  $ q8d         : Factor w/ 5 levels "stimme voll und ganz zu",..: 3 5 5 4 4 5 5 5 3 3 ...
##  $ q8e         : Factor w/ 5 levels "stimme voll und ganz zu",..: 3 4 2 2 3 5 2 5 1 3 ...
##  $ q9a         : Factor w/ 4 levels "sehr wichtig",..: 3 4 4 3 1 4 4 4 4 4 ...
##  $ q9b         : Factor w/ 4 levels "sehr wichtig",..: 3 4 4 3 3 4 4 4 4 3 ...
##  $ q9c         : Factor w/ 4 levels "sehr wichtig",..: 1 1 1 2 1 1 2 2 1 1 ...
##  $ q9d         : Factor w/ 4 levels "sehr wichtig",..: 4 4 4 2 3 3 2 4 2 2 ...
##  $ q10         : Factor w/ 4 levels "sehr verbreitet",..: 1 3 2 4 3 3 1 3 1 2 ...
##  $ q11         : Factor w/ 4 levels "sehr gute Arbeit geleistet",..: 2 2 2 2 2 3 2 3 2 2 ...
##  $ q12a        : Factor w/ 5 levels "viel hoeher als heute",..: 2 2 3 2 2 1 2 3 1 2 ...
##  $ q12b        : Factor w/ 5 levels "viel hoeher als heute",..: 1 1 3 2 3 1 1 1 1 1 ...
##  $ q12c        : Factor w/ 5 levels "viel hoeher als heute",..: 3 3 3 1 4 3 3 NA 4 2 ...
##  $ q12d        : Factor w/ 5 levels "viel hoeher als heute",..: 3 5 3 2 2 3 2 2 1 3 ...
##  $ q12e        : Factor w/ 5 levels "viel hoeher als heute",..: 1 1 3 2 1 1 2 3 1 3 ...
##  $ q12f        : Factor w/ 5 levels "viel hoeher als heute",..: 2 4 3 2 3 3 3 4 2 3 ...
##  $ q12g        : Factor w/ 5 levels "viel hoeher als heute",..: 1 2 3 1 2 2 2 2 1 2 ...
##  $ q12h        : Factor w/ 5 levels "viel hoeher als heute",..: 1 2 3 2 2 2 2 NA 4 2 ...
##  $ q13         : Factor w/ 5 levels "sehr gut","gut",..: 2 2 2 1 2 2 2 3 4 2 ...
##  $ q14         : Factor w/ 5 levels "wesentlich besser geworden",..: 4 2 4 2 4 3 2 3 5 3 ...
##  $ q15         : Factor w/ 5 levels "sehr stark","stark",..: 3 2 5 2 3 5 3 3 3 2 ...
##  $ q16         : Factor w/ 5 levels "wesentlich besser",..: 4 3 4 2 4 3 3 4 5 2 ...
##  $ q17         : Factor w/ 2 levels "ja, habe gewaehlt",..: 1 1 1 1 NA 1 1 1 1 2 ...
##  $ q18         : Factor w/ 3 levels "per Briefwahl",..: 3 2 3 3 NA 1 3 3 3 NA ...
##  $ q19aa       : Factor w/ 55 levels "CDU/CSU","CDU",..: 1 4 1 NA NA 4 4 5 NA NA ...
##  $ q19ab       : Factor w/ 55 levels "CDU/CSU","CDU",..: 1 4 1 NA NA 4 4 5 NA NA ...
##  $ q19ba       : Factor w/ 55 levels "CDU/CSU","CDU",..: 1 6 1 NA NA 6 4 5 NA NA ...
##  $ q19bb       : Factor w/ 55 levels "CDU/CSU","CDU",..: 1 6 1 NA NA 6 4 5 NA NA ...
##  $ q20         : Factor w/ 2 levels "ja, ich haette gewaehlt",..: NA NA NA NA 1 NA NA NA NA NA ...
##  $ q21aa       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA NA NA NA 1 NA NA NA NA NA ...
##  $ q21ab       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA NA NA NA 1 NA NA NA NA NA ...
##  $ q21ba       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA NA NA NA 1 NA NA NA NA NA ...
##  $ q21bb       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA NA NA NA 1 NA NA NA NA NA ...
##  $ q22         : Factor w/ 5 levels "stand schon seit langem fest",..: 2 2 3 NA NA 1 1 3 NA NA ...
##  $ q23         : Factor w/ 2 levels "ja","nein": 1 1 1 1 NA 1 1 1 1 NA ...
##  $ q24         : Factor w/ 2 levels "ja, habe gewaehlt",..: 2 1 1 1 NA 1 1 1 1 NA ...
##  $ q25aa       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA 4 4 NA NA 4 4 5 4 NA ...
##  $ q25ab       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA 4 4 NA NA 4 4 5 4 NA ...
##  $ q25ba       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA 4 1 NA NA 6 4 5 4 NA ...
##  $ q25bb       : Factor w/ 55 levels "CDU/CSU","CDU",..: NA 4 1 NA NA 6 4 5 4 NA ...
##  $ q26         : Factor w/ 5 levels "1 Es macht keinen Unterschied, wer an der Regierung ist.",..: 3 2 3 5 4 5 5 4 3 4 ...
##  $ q27         : Factor w/ 5 levels "1 Es macht keinen Unterschied, was man waehlt.",..: 1 5 5 5 5 5 5 4 3 5 ...
##  $ q28a        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 10 8 9 11 11 4 5 3 7 10 ...
##  $ q28b        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 10 6 9 11 11 3 3 4 5 8 ...
##  $ q28c        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 5 9 5 8 10 7 10 3 7 9 ...
##  $ q28d        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 3 6 6 2 8 6 7 4 6 6 ...
##  $ q28e        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 8 9 7 9 9 9 9 2 6 8 ...
##  $ q28f        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 10 6 6 9 11 5 4 7 6 6 ...
##  $ q28g        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von dieser Partei",..: 1 1 1 1 3 1 1 2 8 1 ...
##  $ q29a        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 9 8 10 10 11 4 5 3 3 9 ...
##  $ q29b        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 5 8 6 7 5 9 10 6 6 6 ...
##  $ q29c        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 5 7 7 4 8 5 8 7 5 NA ...
##  $ q29d        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 6 8 6 9 7 10 8 6 6 NA ...
##  $ q29e        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 9 NA 7 10 11 4 5 8 8 NA ...
##  $ q29f        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 8 1 5 4 2 1 1 1 6 NA ...
##  $ q29g        : Factor w/ 11 levels "-5 halte ueberhaupt nichts von diesem Politiker",..: 8 7 7 10 11 3 3 7 6 NA ...
##   [list output truncated]
##  - attr(*, "variable.labels")= Named chr [1:602] "Studiennummer" "GESIS Archiv Version" "Digital Object Identifier" "Erhebungsjahr" ...
##   ..- attr(*, "names")= chr [1:602] "study" "version" "doi" "year" ...
##  - attr(*, "codepage")= int 65001

gles liegt als Dataframe vor und enthält 2112 Beobachtungen (Zeilen) und 602 Variablen (Spalten). Variablen sind study, version, doi, usw., wobei das Dollarzeichen, wie bei Dataframes üblich, Variablen kennzeichnet. Die ersten Variablen enthalten Informationen zur Durchführung des Interviews. Die Bezeichnung der meisten ist recht technisch. Die Variablen liegen als numerische und character-Vektoren sowie als Faktoren vor. Die Objektklassen lassen sich in Dataframes zusammenführen (s. Sitzung 2).

str(lijphart)
## 'data.frame':    36 obs. of  74 variables:
##  $ Country                  : chr  "ARG" "AUL" "AUT" "BAH" ...
##  $ exe_part4510             : chr  "-0.93" "-0.73" "0.43" "-1.50" ...
##  $ exe_part8110             : chr  "-1.01" "-0.65" "0.64" "-1.33" ...
##  $ fed_unit4510             : chr  "1.38" "1.63" "1.07" "-0.15" ...
##  $ fed_unit8110             : chr  "1.34" "1.58" "0.97" "-0.18" ...
##  $ enpp4510                 : chr  "3.15" "2.22" "2.68" "1.69" ...
##  $ enpp8110                 : chr  "3.15" "2.19" "3.23" "1.74" ...
##  $ minwin_one_part4510      : chr  "82.4" "80.7" "43.3" "100.0" ...
##  $ minwin_one_part8110      : chr  "82.4" "86.5" "47.4" "100.0" ...
##  $ exe_dom4510              : chr  "8.00" "9.10" "8.07" "9.44" ...
##  $ exe_dom8110              : chr  "8.00" "7.37" "5.90" "7.37" ...
##  $ disprop4510              : chr  "17.98" "9.44" "2.51" "16.48" ...
##  $ disprop8110              : chr  "17.98" "10.07" "2.02" "15.90" ...
##  $ inter_gr_plural4510      : chr  "2.70" "2.12" "0.38" "3.00" ...
##  $ inter_gr_plural8110      : chr  "2.70" "1.88" "0.38" "3.00" ...
##  $ federal4510              : chr  "4.5" "5.0" "4.5" "1.0" ...
##  $ federal8110              : chr  "4.5" "5.0" "4.5" "1.0" ...
##  $ bicam4510                : chr  "4.0" "4.0" "2.0" "2.0" ...
##  $ bicam8110                : chr  "4.0" "4.0" "2.0" "2.0" ...
##  $ const_rigid4510          : chr  "4.0" "4.0" "3.0" "3.0" ...
##  $ const_rigid8110          : chr  "4.0" "4.0" "3.0" "3.0" ...
##  $ judic_rev4510            : chr  "2.7" "3.0" "3.0" "2.0" ...
##  $ judic_rev8110            : chr  "2.7" "3.0" "3.0" "2.0" ...
##  $ cen_bank_indep4594       : chr  "0.39" "0.42" "0.55" "0.41" ...
##  $ cen_bank_indep8194       : chr  "0.39" "0.42" "0.53" "0.41" ...
##  $ gov_effectiv9609         : chr  "-0.08" "1.76" "1.80" "1.14" ...
##  $ regu_quality9609         : chr  "-0.42" "1.56" "1.51" "1.01" ...
##  $ rule_of_law9609          : chr  "-0.48" "1.72" "1.83" "1.16" ...
##  $ ctrl_corrupt9609         : chr  "-0.38" "1.91" "1.95" "1.28" ...
##  $ corrupt_perc10           : chr  "2.9" "8.7" "7.9" "" ...
##  $ gdp_growth8109           : chr  "" "1.880" "1.732" "" ...
##  $ gdp_growth9109           : chr  "3.210" "1.906" "1.613" "" ...
##  $ consum_price8109         : chr  "" "4.507" "2.623" "" ...
##  $ gdp_deflat8109           : chr  "" "4.607" "2.382" "" ...
##  $ consum_price9109         : chr  "15.849" "2.601" "2.145" "" ...
##  $ gdp_deflat9109           : chr  "13.745" "2.774" "1.692" "" ...
##  $ unempl8109               : chr  "" "7.331" "3.912" "" ...
##  $ unempl9109               : chr  "12.531" "7.155" "4.097" "" ...
##  $ budget_balanc0008        : chr  "" "1.2" "-1.8" "" ...
##  $ budget_balanc0307        : chr  "" "1.2" "-2.2" "-1.8" ...
##  $ heri_free0910            : chr  "51.7" "82.5" "71.9" "68.0" ...
##  $ fras_free08              : chr  "5.99" "7.90" "7.61" "7.21" ...
##  $ pol_stab9609             : chr  "-0.09" "1.01" "1.15" "0.89" ...
##  $ confl_risk9004           : chr  "10.23" "11.36" "11.79" "10.83" ...
##  $ domes_conflict_weight8109: int  NA 62 103 0 17 192 19 155 192 90 ...
##  $ domes_conflict_weight9009: int  934 34 125 0 25 169 22 169 266 84 ...
##  $ deaths_domes_terror8510  : int  5 0 0 2 2 0 3 2 1 0 ...
##  $ voice_account9609        : chr  "0.28" "1.42" "1.37" "1.09" ...
##  $ eiu_democ0610            : chr  "6.70" "9.13" "8.56" "" ...
##  $ elec_plural0610          : chr  "8.75" "10.00" "9.58" "" ...
##  $ gov_funct0610            : chr  "5.24" "8.93" "7.98" "" ...
##  $ pol_part0610             : chr  "5.56" "7.78" "7.78" "" ...
##  $ pol_cult0610             : chr  "5.84" "8.96" "8.34" "" ...
##  $ civ_lib0610              : chr  "8.14" "10.00" "9.12" "" ...
##  $ women_parl_rep90         : chr  "6.3" "6.1" "11.5" "4.1" ...
##  $ women_parl_rep10         : chr  "38.5" "24.7" "27.9" "12.2" ...
##  $ women_cab_rep95          : chr  "0.0" "5.9" "23.5" "27.3" ...
##  $ women_cab_rep08          : int  23 24 38 8 28 23 28 16 29 37 ...
##  $ gender_ineq08            : int  534 296 300 NA 448 236 663 289 501 209 ...
##  $ X10_10_ratio00           : chr  "31.8" "12.5" "6.9" "" ...
##  $ X20_20_ratio00           : chr  "16.3" "7.0" "4.4" "" ...
##  $ gini_ineq00              : chr  "51.3" "35.2" "29.1" "" ...
##  $ turnout8110              : chr  "78.43" "82.87" "78.23" "67.16" ...
##  $ non_mand_turnout8110     : chr  "" "" "78.23" "67.16" ...
##  $ satis_democ9596          : int  35 NA 63 NA NA 54 NA NA NA 83 ...
##  $ satis_democ0507          : chr  "45.1" "51.5" "" "" ...
##  $ soc_expend05             : chr  "" "18.5" "24.9" "" ...
##  $ mand_soc_expend05        : chr  "" "19.5" "25.5" "" ...
##  $ envir_perform10          : chr  "61.0" "65.7" "78.1" "" ...
##  $ incarceration10          : int  151 133 103 376 326 97 267 117 228 71 ...
##  $ death_pen10              : int  0 0 0 2 2 0 2 0 0 0 ...
##  $ foreign_aid90            : chr  "" "0.34" "0.11" "" ...
##  $ foreign_aid05            : chr  "" "0.25" "0.52" "" ...
##  $ aid_vers_def05           : int  NA 14 58 NA NA 48 NA 31 NA 45 ...

Das Objekt lijphart ist ebenfalls ein Dataframe und beinhaltet 36 Beobachtungen und 74 Variablen (Country, exe_part4510, exe_part8110, usw.). Die Variablen sind hauptsächlich character-Vektoren sowie integer-Vektoren (ganze Zahlen). Mit View() können wir die Datensätze als Tabelle ansehen. Dabei ist zu beachten, dass man gerade bei größeren Datensätzen nur langsam durch den Datensatz scrollen kann. Wenn wir stattdessen nur einen Eindruck der Variablen und der ersten enthaltenen Werte bekommen möchten, bieten sich die Funktionen head() und tail() an, die jeweils die ersten und letzten sechs Zeilen des Datensatzes zeigen.

# head(gles)
# tail(gles)

head(lijphart)
Country exe_part4510 exe_part8110 fed_unit4510 fed_unit8110 enpp4510 enpp8110 minwin_one_part4510 minwin_one_part8110 exe_dom4510 exe_dom8110 disprop4510 disprop8110 inter_gr_plural4510 inter_gr_plural8110 federal4510 federal8110 bicam4510 bicam8110 const_rigid4510 const_rigid8110 judic_rev4510 judic_rev8110 cen_bank_indep4594 cen_bank_indep8194 gov_effectiv9609 regu_quality9609 rule_of_law9609 ctrl_corrupt9609 corrupt_perc10 gdp_growth8109 gdp_growth9109 consum_price8109 gdp_deflat8109 consum_price9109 gdp_deflat9109 unempl8109 unempl9109 budget_balanc0008 budget_balanc0307 heri_free0910 fras_free08 pol_stab9609 confl_risk9004 domes_conflict_weight8109 domes_conflict_weight9009 deaths_domes_terror8510 voice_account9609 eiu_democ0610 elec_plural0610 gov_funct0610 pol_part0610 pol_cult0610 civ_lib0610 women_parl_rep90 women_parl_rep10 women_cab_rep95 women_cab_rep08 gender_ineq08 X10_10_ratio00 X20_20_ratio00 gini_ineq00 turnout8110 non_mand_turnout8110 satis_democ9596 satis_democ0507 soc_expend05 mand_soc_expend05 envir_perform10 incarceration10 death_pen10 foreign_aid90 foreign_aid05 aid_vers_def05
ARG -0.93 -1.01 1.38 1.34 3.15 3.15 82.4 82.4 8.00 8.00 17.98 17.98 2.70 2.70 4.5 4.5 4.0 4.0 4.0 4.0 2.7 2.7 0.39 0.39 -0.08 -0.42 -0.48 -0.38 2.9 3.210 15.849 13.745 12.531 51.7 5.99 -0.09 10.23 NA 934 5 0.28 6.70 8.75 5.24 5.56 5.84 8.14 6.3 38.5 0.0 23 534 31.8 16.3 51.3 78.43 35 45.1 61.0 151 0 NA
AUL -0.73 -0.65 1.63 1.58 2.22 2.19 80.7 86.5 9.10 7.37 9.44 10.07 2.12 1.88 5.0 5.0 4.0 4.0 4.0 4.0 3.0 3.0 0.42 0.42 1.76 1.56 1.72 1.91 8.7 1.880 1.906 4.507 4.607 2.601 2.774 7.331 7.155 1.2 1.2 82.5 7.90 1.01 11.36 62 34 0 1.42 9.13 10.00 8.93 7.78 8.96 10.00 6.1 24.7 5.9 24 296 12.5 7.0 35.2 82.87 NA 51.5 18.5 19.5 65.7 133 0 0.34 0.25 14
AUT 0.43 0.64 1.07 0.97 2.68 3.23 43.3 47.4 8.07 5.90 2.51 2.02 0.38 0.38 4.5 4.5 2.0 2.0 3.0 3.0 3.0 3.0 0.55 0.53 1.80 1.51 1.83 1.95 7.9 1.732 1.613 2.623 2.382 2.145 1.692 3.912 4.097 -1.8 -2.2 71.9 7.61 1.15 11.79 103 125 0 1.37 8.56 9.58 7.98 7.78 8.34 9.12 11.5 27.9 23.5 38 300 6.9 4.4 29.1 78.23 78.23 63 24.9 25.5 78.1 103 0 0.11 0.52 58
BAH -1.50 -1.33 -0.15 -0.18 1.69 1.74 100.0 100.0 9.44 7.37 16.48 15.90 3.00 3.00 1.0 1.0 2.0 2.0 3.0 3.0 2.0 2.0 0.41 0.41 1.14 1.01 1.16 1.28 -1.8 68.0 7.21 0.89 10.83 0 0 2 1.09 4.1 12.2 27.3 8 NA 67.16 67.16 NA 376 2 NA
BAR -1.28 -1.20 -0.49 -0.53 1.68 1.62 100.0 100.0 8.87 7.37 17.27 18.72 2.20 2.00 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0 0.38 0.38 1.36 0.98 1.12 1.32 7.8 68.5 6.35 1.05 17 25 2 1.21 3.7 10.0 27.3 28 448 71.35 71.35 NA 326 2 NA
BEL 1.14 1.10 0.10 0.44 4.72 6.13 37.3 36.3 2.57 4.21 3.35 3.75 1.15 1.33 3.5 4.2 2.8 2.5 3.0 3.0 1.8 2.7 0.27 0.30 1.68 1.24 1.31 1.37 7.1 1.552 1.371 2.930 2.756 2.062 1.961 8.744 8.054 -0.5 -0.7 70.2 7.22 0.92 11.59 192 169 0 1.39 8.12 9.58 8.21 6.11 7.29 9.41 8.5 39.3 11.8 23 236 8.2 4.9 33.0 86.32 54 26.2 26.2 58.1 97 0 0.46 0.53 48
tail(lijphart)
Country exe_part4510 exe_part8110 fed_unit4510 fed_unit8110 enpp4510 enpp8110 minwin_one_part4510 minwin_one_part8110 exe_dom4510 exe_dom8110 disprop4510 disprop8110 inter_gr_plural4510 inter_gr_plural8110 federal4510 federal8110 bicam4510 bicam8110 const_rigid4510 const_rigid8110 judic_rev4510 judic_rev8110 cen_bank_indep4594 cen_bank_indep8194 gov_effectiv9609 regu_quality9609 rule_of_law9609 ctrl_corrupt9609 corrupt_perc10 gdp_growth8109 gdp_growth9109 consum_price8109 gdp_deflat8109 consum_price9109 gdp_deflat9109 unempl8109 unempl9109 budget_balanc0008 budget_balanc0307 heri_free0910 fras_free08 pol_stab9609 confl_risk9004 domes_conflict_weight8109 domes_conflict_weight9009 deaths_domes_terror8510 voice_account9609 eiu_democ0610 elec_plural0610 gov_funct0610 pol_part0610 pol_cult0610 civ_lib0610 women_parl_rep90 women_parl_rep10 women_cab_rep95 women_cab_rep08 gender_ineq08 X10_10_ratio00 X20_20_ratio00 gini_ineq00 turnout8110 non_mand_turnout8110 satis_democ9596 satis_democ0507 soc_expend05 mand_soc_expend05 envir_perform10 incarceration10 death_pen10 foreign_aid90 foreign_aid05 aid_vers_def05
31 SWE 0.79 0.87 -1.03 -1.09 3.47 3.82 48.1 42.6 5.61 4.92 2.04 1.95 0.35 0.42 2.0 2.0 1.7 1.0 1.5 2.0 1.0 1.0 0.29 0.29 1.96 1.50 1.81 2.17 9.2 1.640 1.493 3.915 4.061 1.968 2.182 5.618 7.145 71.9 7.28 1.25 11.38 58 50 0 1.55 9.75 9.86 9.88 9.63 9.38 10.00 38.4 45.0 47.6 48 212 6.2 4.0 25.0 82.38 82.38 55 61.5 27.3 27.5 86.0 78 0 0.91 0.94 63
32 SWI 1.72 1.67 1.46 1.59 5.20 5.50 4.0 1.7 1.00 1.00 2.55 3.08 0.88 0.88 5.0 5.0 4.0 4.0 4.0 4.0 1.0 1.0 0.61 0.68 1.97 1.56 1.84 2.06 8.7 910 545 2.125 2.059 1.450 1.274 3.465 0.4 -0.1 81.9 8.08 1.25 12.00 34 25 0 1.52 9.09 9.58 9.29 7.78 9.17 9.61 14.0 29.0 14.3 43 228 9.0 5.5 33.7 38.29 38.29 NA 61.3 89.1 79 0 0.32 0.44 44
33 TRI -1.01 -0.79 -0.24 -0.34 1.87 1.88 94.3 90.7 6.95 4.21 11.33 11.67 3.00 3.00 1.3 1.5 2.0 2.0 3.0 3.0 2.0 2.0 0.35 0.30 0.30 0.68 0.09 0.11 3.6 1.615 4.209 7.752 5.752 6.001 5.523 13.934 12.308 2.5 66.5 7.10 0.04 8.82 136 184 23 0.61 7.18 9.44 6.91 6.11 5.42 8.04 16.7 28.6 15.8 36 473 12.9 7.6 38.9 71.00 71.00 NA 32.1 54.2 276 2 NA
34 UK -1.09 -1.48 -1.06 -1.12 2.16 2.27 97.3 99.8 8.12 9.83 11.70 16.00 3.02 3.08 1.2 1.4 2.5 2.5 1.0 1.0 1.0 1.0 0.31 0.28 1.76 1.69 1.65 1.90 7.6 1.960 1.642 4.119 4.032 2.821 2.743 6.661 -2.1 -3.0 74.5 7.81 0.62 10.00 1998 1303 55 1.33 8.13 9.58 8.33 5.37 8.34 9.02 6.3 22.0 8.7 23 355 13.8 7.2 36.0 67.92 67.92 46 33.3 22.9 23.7 74.2 152 0 0.27 0.47 17
35 URU 0.39 0.31 -0.79 -0.84 4.40 4.40 80.3 80.3 4.00 4.00 6.05 6.05 1.70 1.70 1.0 1.0 3.0 3.0 1.0 1.0 2.5 2.5 0.19 0.19 0.51 0.46 0.57 0.94 6.9 2.732 24.313 23.020 11.198 -2.5 -2.1 70.0 6.93 0.77 8.80 NA 325 0 0.96 8.05 10.00 8.33 4.81 7.29 9.81 6.1 15.2 5.9 29 508 17.9 10.2 44.9 94.51 52 60.9 59.1 261 0 NA
36 US -0.67 -0.63 2.25 2.18 2.39 2.37 80.4 78.9 4.00 4.00 14.28 13.35 3.02 2.88 5.0 5.0 4.0 4.0 4.0 4.0 4.0 4.0 0.56 0.56 1.64 1.51 1.54 1.53 7.1 1.731 1.439 3.370 2.939 2.649 2.249 6.159 5.653 -2.8 77.8 7.96 0.50 10.99 269 288 28 1.25 8.21 8.89 7.86 7.22 8.54 8.53 6.6 16.9 20.0 44 400 15.9 8.4 40.8 51.30 51.30 NA 35.5 18.4 18.8 63.5 743 2 0.21 0.22 5

4. Variablen der gles

Anhand der Wahlforschungsdaten der GLES wollen wir im weiteren Verlauf des Kurses die Wahlentscheidung der Befragten mittels sozio-demografischer Größen und politischer Einstellungen erklären. Dabei interessiert uns insbesondere, wie die Wahlentscheidung zugunsten der AfD erklärt werden kann. Außerdem werden wir versuchen, die Selbsteinstufung der Befragten entlang einer Links-Rechts-Achse zu erklären. Wir benötigen die folgenden Variablen: das Alter der Befragten, deren Geschlecht, Einkommen, Wohnort, subjektive Links-Rechts-Einstufung und die Angabe, ob sie bei der Bundestagswahl 2017 ihre Zweitstimme für die AfD abgegeben haben. Im Folgenden werden wir uns die Variablen jeweils einmal in der Form anschauen, in der sie im Datensatz vorkommen. Danach werden wir sie zu unseren Zwecken verändern, wobei wir lediglich den Datensatz im Arbeitsspeicher verändern und nicht den Datensatz auf der Festplatte. Deshalb ist es hilfreich, alle vorgenommenen Operationen als Skripte zu schreiben, weil man so alle Arbeitsschritte sofort wieder vornehmen kann und immer nachvollziehen kann, woran bereits gearbeitet wurde.

4.1 Alter

Wir beginnen mit den unabhängigen Variablen. Das Alter der Befragten könnte einen Einfluss auf die Wahlentscheidung und die Position entlang einer gedachten Links-Rechts-Achse haben. Tatsächlich wurden die Befragten nicht nach ihrem Alter gefragt, sondern nach ihrem Geburtsdatum (s. Fragebogen, S. 11). Das Geburtsjahr liegt in der Variable q2c als Faktor vor.

class(gles$q2c)
## [1] "factor"
table(gles$q2c)
1922 1923 1924 1925 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
1 2 1 1 2 4 8 4 8 10 7 13 20 22 22 25 29 35 36 19 24 26 17 23 24 31 36 31 24 50 35 36 32 30 22 38 45 44 32 48 41 41 47 34 36 41 37 30 38 31 32 31 29 21 27 35 22 33 24 23 26 32 27 23 33 41 37 22 27 25 19 18 29 25 27 28 32 48 22

Wir berechnen das Alter, indem wir das Geburtsjahr der Befragten von dem Jahr der Befragung subtrahieren. Dazu müssen wir die Variable zunächst in einen numerischen Vektor umwandeln. Wenn man jedoch Faktoren direkt in numerische Vektoren umwandelt, werden die zugrunde liegenden Levels der Faktoren herangezogen und als numerische Werte interpretiert.

head(as.numeric(gles$q2c)) 
## [1] 38 42 31 17 79 37

Deshalb müssen wir den Faktor q2c zunächst zu einem character-Vektor und danach zu einem numerischen Vektor umwandeln. Dazu verwenden wir die Umwandlungsfunktion as.numeric(as.character()). Die numerischen Geburtsjahre speichern wir als q2c_num. Schließlich führen wir die Subtraktion durch. Das so berechnete Alter speichern wir in einer neuen Variable alter, die wir an den Datensatz anfügen.

q2c_num <- as.numeric(as.character(gles$q2c))
gles$alter <- 2017 - q2c_num # Warnung "NA's introduced by coercion" weil eine Person mit "keine Angabe" antwortete und das numerisch nicht interpretierbar ist
class(gles$alter)
## [1] "numeric"
table(gles$alter)
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 95
22 48 32 28 27 25 29 18 19 25 27 22 37 41 33 23 27 32 26 23 24 33 22 35 27 21 29 31 32 31 38 30 37 41 36 34 47 41 41 48 32 44 45 38 22 30 32 36 35 50 24 31 36 31 24 23 17 26 24 19 36 35 29 25 22 22 20 13 7 10 8 4 8 4 2 1 1 2 1
summary(gles$alter)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
16 34 51 50.15396 65 95 1
View(gles$alter)

Wie summary() zeigt, sind Personen zwischen 16 und 95 Jahren befragt worden. Der Median liegt bei 51 Jahren und das arithmetische Mittel bei 50,15 Jahren. Bei einer Person liegt keine Information über das Alter vor (NA), diese Person hat die Angabe verweigert. table() zeigt, wie viele Personen mit einem bestimmten Alter im Datensatz enthalten sind, also z.B. 22 16-Jährige, 48 17-Jährige, usw. Mit View() können wir die Variable inspizieren.

4.2 Geschlecht

Womöglich hat das Geschlecht der Befragten einen Einfluss. Die Variable Geschlecht ist direkt erfasst worden und liegt als Faktor vor. Wir vergeben lediglich einen aussagekräftigen Variablennamen.

names(gles)[names(gles) == "q1"] <- "geschlecht"
table(gles$geschlecht)
maennlich weiblich
1097 1015

Wie die Funktion table() zeigt, sind Männer in unserem Sample leicht überrepräsentiert.

4.3 Haushaltseinkommen

Auch die wirtschaftliche Situation der Befragten könnte eine Rolle spielen. Das Haushaltseinkommen der Befragten ist in Kategorien abgefragt worden (s. Fragebogen, S. 206).

table(gles$q192)
unter 500 Euro 500 bis unter 750 Euro 750 bis unter 1000 Euro 1000 bis unter 1250 Euro 1250 bis unter 1500 Euro 1500 bis unter 2000 Euro 2000 bis unter 2500 Euro 2500 bis unter 3000 Euro 3000 bis unter 4000 Euro 4000 bis unter 5000 Euro 5000 bis unter 7500 Euro 7500 bis unter 10000 Euro 10000 Euro und mehr
19 33 62 85 111 231 262 250 310 189 161 38 18

Da die Kategorien sehr kleinteilig sind, wollen wir sie neu einteilen. Die sieben neuen Kategorien lauten wie folgt: weniger als 1000 Euro, 1000 bis 1999 Euro, 2000 bis 2999 Euro, 3000 bis 3999 Euro, 4000 bis 4999 Euro, 5000 bis 7499 Euro und 7500 Euro und mehr.

Zur Indizierung verwenden wir wieder eckige Klammern, diesmal allerdings in Kombination mit dem logischen Oder |. Der nachfolgende Code sagt folgendes aus: Wenn q192 die Ausprägung “unter 500 Euro” oder “500 bis unter 750 Euro” oder “750 bis unter 1000 Euro” aufweist, dann ordne der Variable einkommen_cat “weniger als 1000 Euro” zu. Für die weiteren Kategorien geschieht dies analog. Machen Sie sich bewusst, dass der Inhalt der eckigen Klammern jeweils einen logischen Vektor mit den Werten TRUE und FALSE ausgibt. Wenn TRUE, dann wird einkommen_cat der Wert rechts von <- zugewiesen.

Führen Sie zu diese Codezeile zunächst einzeln aus und lassen Sie sich View(gles$einkommen_cat) ausgeben:

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"
View(gles$einkommen_cat)

Sie sehen, dass einkommen_cat für die meisten Beobachtungen einen fehlenden Wert, NA (“not available”), enthält. Das sind Personen, deren Haushaltseinkommen 1000 Euro und mehr beträgt. Wenn Sie nun schrittweise die folgenden Codezeilen ausführen, verschwinden die NAs nach und nach.

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"

Wenn Sie alle Zeilen ausgeführt haben, werden immer noch einige NAs übrigbleiben. Das sind die Personen, die die Aussage verweigert haben, die ihr Haushaltseinkommen nicht kannten, oder deren Haushaltseinkommen aus anderen Gründen nicht vorlag. Die Variable sieht folgendermaßen aus:

table(gles$einkommen_cat)
1000 bis 1999 2000 bis 2999 3000 bis 3999 4000 bis 4999 5000 bis 7499 7500 und mehr weniger als 1000
427 512 310 189 161 56 114

Dabei fällt auf, dass die niedrigste Kategorie “weniger als 1000” im Output als letzte erscheint. Um die richtige Ordnung herzustellen, wandeln wir einkommen_cat in einen Faktor um und ordnen die Levels händisch.

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"))

table(gles$einkommen_cat)
weniger als 1000 1000 bis 1999 2000 bis 2999 3000 bis 3999 4000 bis 4999 5000 bis 7499 7500 und mehr
114 427 512 310 189 161 56

Wir können das Haushaltseinkommen auch als kontinuierliche Variable behandeln, da es in der vorliegenden Kodierweise sieben Ausprägungen aufweist. Dazu verändern wir die eben erstellte Variable wie folgt:

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
table(gles$einkommen_num)
1 2 3 4 5 6 7
114 427 512 310 189 161 56

Wie Sie sehen, entsprechen sich die Kategorien von einkommen_cat und einkommen_num in Bezug auf die Fallzahl pro Kategorie.

4.4 Wohnort

Außerdem könnte der Wohnort der Befragten einen Einfluss auf die politische Position oder die Wahlentscheidung haben. In diesem Fall sind die vorliegenden Kategorien ausreichend. Allerdings sind die Labels recht unhandlich, weshalb wir sie umbenennen.

table(gles$q197)
laendliche Gegend oder Dorf kleine oder mittelgrosse Stadt Vorstadt/ Vorort einer Grossstadt Grossstadt
766 762 147 437
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"
table(gles$wohnort)
Großstadt Kleinstadt Land Vorstadt
437 762 766 147

Da lediglich die Kategorienamen und nicht die Datenstruktur angepasst wurden, hat sich am Zuschnitt der Kategorien nichts geändert.

4.6 AfD-Wahl

Schließlich benötigen wir eine Variable, die eine Aussage darüber trifft, ob eine befragte Person die AfD gewählt hat. Bei solchen Variablen, die eine Aussage darüber treffen, ob etwas zutrifft oder nicht, sprechen wir von dichotomen Variablen. Dichotome Variablen enthalten den Wert 1, wenn etwas zutrifft und den Wert 0, wenn etwas nicht zutrifft. Die dichotome abhängige Variable zur AfD-Wahl bilden wir aus der Variable q19ba, welche die berichtete Wahlentscheidung der Befragten enthält.

table(gles$q19ba)
CDU/CSU CDU CSU SPD FDP GRUENE DIE LINKE BP BüSo DDP Die GRAUEN Die PARTEI DIE VIOLETTEN FAMILIE Freie Waehler GRAUE Grundeinkommen - Volksentscheide KPD MLPD NPD NSDAP oedp PBC PIRATEN Pro DM RENTNER REP RRP SED Tierschutzpartei UDP Volksabstimmung ZENTRUM UBP LDPD DBD DNVP GB/BHE NDPD PARTEI DER VERNUNFT Bergpartei AfD DIE RECHTE AD-Demokraten NRW BGE V-Partei3 MG DM DiB Sonstige andere Partei Einzelkandidat keine Partei alle Parteien mit mehreren Parteien
504 0 0 338 200 225 188 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 0 0 0 0 0 0 0 0 73 0 0 0 0
View(gles$q19ba)

Wie zu erkennen ist, sind viele Kategorien nicht besetzt. Uns interessiert nun lediglich, ob eine Person die AfD gewählt hat oder nicht. Entsprechend wird in der neuen Variable AfD.Wahl Personen, welche die AfD gewählt haben, eine 1 zugewiesen, während Personen, die eine andere Partei gewählt haben, eine 0 zugewiesen wird. Wir verwenden == (gleich) und != (ungleich).

gles$AfD.Wahl[gles$q19ba == "AfD"] <- 1
gles$AfD.Wahl[gles$q19ba != "AfD"] <- 0

Die neue Variable beinhaltet jetzt ausschließlich Einsen und Nullen. Wenn in q19ba keine Information über die Wahlentscheidung vorliegt (NA), erhält auch die neue gebildete Variable ein NA.

table(gles$AfD.Wahl)
0 1
1528 162
View(gles$AfD.Wahl)

5. Variablen in Patterns of Democracy

Die Variablen des Datensatzes zu “Patterns of Democracy” werden im weiteren Verlauf des Kurses in der bereits vorliegenden Form verwendet. Allerdings liegen sie als character-Vektoren vor und müssen zu numerischen Vektoren umgewandelt werden. Das sei hier beispielhaft für die Variable enpp4510 dargestellt, welche die Effective Number of Parliamentary Parties in den Jahren 1945 bis 2010 für alle Länder enthält.

class(lijphart$enpp4510)
## [1] "character"
table(lijphart$enpp4510)
1.38 1.67 1.68 1.69 1.87 1.99 2.16 2.22 2.27 2.28 2.39 2.52 2.66 2.67 2.68 2.85 2.89 3.09 3.13 3.15 3.26 3.47 3.48 3.62 3.64 3.72 4.40 4.57 4.72 4.80 4.84 4.87 5.04 5.18 5.20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
summary(lijphart$enpp4510)
Length Class Mode
36 character character

Wie der Output der Funktionen table() und summary() zeigen, ist die Variable in dieser Form nicht sinnvoll zu interpretieren. Wir wandeln sie entsprechend um:

lijphart$enpp4510 <- as.numeric(lijphart$enpp4510)
summary(lijphart$enpp4510)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.38 2.2775 2.99 3.191667 3.89 5.2

Anders als beim GLES überschreiben wir hier die Ursprungsvariable und bilden also keine neue Variable. Das hat damit zu tun, dass die Variable eigentlich numerisch sein müsste, wir sie also “reparieren”, statt sie für unsere Zwecke anzupassen. So gehen wir mit allen Variablen vor, die wir im Kurs verwenden werden. Für den Gallagher-Index zur Messung der Disproportionalität von Wahlsystemen:

lijphart$disprop4510 <- as.numeric(lijphart$disprop4510)
summary(lijphart$disprop4510)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.21 3.2525 7.14 8.546111 14.305 21.97

Für den Bikameralismus-Index:

lijphart$bicam4510 <- as.numeric(lijphart$bicam4510)
summary(lijphart$bicam4510)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 1.075 2 2.213889 3 4

Für den Anteil von Minimal-Winning-Koalition mit einer Partei, der zur Messung des Kabinettstyps herangezogen wird:

lijphart$minwin_one_part4510 <- as.numeric(lijphart$minwin_one_part4510)
summary(lijphart$minwin_one_part4510)
Min. 1st Qu. Median Mean 3rd Qu. Max.
4 37.675 55.05 60.32222 86.6 100

Sowie für die Kabinettsdauer, mithilfe derer die Exekutivdominanz operationalisiert wird:

lijphart$exe_dom4510 <- as.numeric(lijphart$exe_dom4510)
summary(lijphart$exe_dom4510)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 3.2225 4.305 5.348056 8.0775 9.9

6. Umgang mit fehlenden Werten (NAs)

Beim Umkodieren der Variable, die das Haushaltseinkommen der Befragten misst, sind uns bereits Fälle begegnet, für die kein Wert vorlag. Es gibt viele Gründe, warum Daten fehlen können, so z.B. technische Fehler, Befragungsteilnehmende, welche die Antwort auf bestimmte Fragen verweigern, usw. Für R stellen fehlende Werte ein Problem dar, weil dadurch einige Funktionen nicht ausgeführt werden können oder fehlerhafte Werte ausgeben. In seltenen Fällen kann es auch sinnvoll sein, fehlende Werte durch Verfahren wie Imputationen zu schätzen. Für unsere Zwecke genügt es aber, NAs zu löschen. Der einfachste Weg besteht darin, einen Subset des bestehenden Datensatzes zu erstellen, in dem alle NAs entfernt werden. Das definieren wir über die Funktion na.omit(). In unserem Beispiel mit dem Datensatz von gles würden kaum Fälle dadurch verloren gehen.

gles_clean <- na.omit(gles)

In der Forschungspraxis sind fehlende Werte nicht zwingend mit NA gekennzeichnet, sondern teilweise auch mit 99 oder -99 zu. Diese Werte erkennt R aber als zulässig an und sie werden fälschlicherweise für die Analyse verwendet. Um dies zu verhindern, müssen wir die entsprechenden Werte zu NAs transformieren. Für die Variable Einkommen beispielhaft:

gles$einkommen_cat [gles$einkommen_cat == 99] <- NA
gles$einkommen_cat [gles$einkommen_cat == -99] <- NA

Für die inhaltliche Interpretation ist es wichtig, zu bedenken, dass hinter fehlenden Antworten, insbesondere bei bestimmten Fragen, oft relevante Gründe liegen könnten, die bei der Forschung berücksichtigt werden sollten.

7. Übungsaufgaben

  1. Suchen Sie im GLES-Fragebogen nach einer geeigneten Variable zur Messung der schulischen Bildung der Befragten. Diese sollte Information über die Schulabschlüsse der Befragten enthalten.
  2. Bilden Sie eine Variable schulab mit den folgenden Kategorien: Hochschulreife, Fachhochschulreife, Realschule, Hauptschule, kein Abschluss. Stellen Sie sicher, dass bei Befragten, die einen anderen oder noch keinen Schulabschluss haben, ein NA vercodet wurde.
  3. Bilden Sie aus einkommen_num eine Variable einkommen_cat1, die vier Kategorien hat: “weniger als 2000”, “2000 bis unter 4000”, “4000 bis unter 7500”, “7500 und mehr”. Nutzen Sie die Vergleichsoperatoren >, <, >=, <= sowie den logischen Operator &.
  4. Erstellen Sie aus Basis der Variable alter eine neue Variable alter65, bei der Werte über 65 als NA kodiert werden.

8. Datensätze Quellen

GLES (2019). Nachwahl-Querschnitt (GLES 2017). GESIS Datenarchiv, Köln. ZA6801 Datenfile Version 4.0.1, https://doi.org/10.4232/1.13235.

Lijphart, Arend (2012): Patterns of Democracy. Government Forms and Performance in Thirty-Six Countries. 2nd Edition. New Haven/London: Yale University Press.