Buffl

Quantitative Datenanalyse

MG
von Maya G.

R


  • R ist ein Open-Source-Programm und frei (kostenlos) verfügbar. Auf der R-Homepage unter https://www.r-project.org finden sich Informationen zur aktuellen Programmversion und den Downloadmöglichkeiten. R wird weitgehend über eine Befehlssprache gesteuert. Allerdings existieren mittlerweile zahlreiche Ergänzungsprogramme, die den Einstieg in R erleichtern (z.B. RStudio). Durch weitere Programmpakete (Packages) kann der Leistungsumfang von R weit über die Standardverfahren hinaus erweitert werden. Der Verein R Foundation, der das Urheberrecht von R besitzt und verwaltet, ist das „Sprachrohr“ des Open-Source-Programms

  • Dabei sprechen mehrere Gründe für R.

    • Erstens ist R ein Open-Source-Programm und steht für mehrere Plattformen (Windows, Mac und Linux) kostenfrei zur Verfügung. Über frei verfügbare Erweiterungen (Packages) kann der Funktionsumfang von R beträchtlich erweitert werden. Mit Blick auf Aufbereitung, Visualisierung, Analyse von Daten und Ankopplung an Datenbanksysteme fungiert R damit als Programmierumgebung, die für unterschiedlichste Aufgaben genutzt werden kann.

    • Zweitens ist R methoden-agnostisch und kann sowohl in der quantitativen und qualitativen Sozialforschung eingesetzt werden. Es existieren Erweiterungspakete sowohl für die quantitative (z.B. Regression, Faktorenanalyse) als auch für die qualitative Sozialforschung (z.B. Qualitative Comparative Analysis).

    • Drittens gilt R als zukunftssicher. Als Open-Source-Programm wird R ständig weiterentwickelt. R überwindet zudem die Ein-Datensatzlogik und verfügt über Schnittstellen zu webbasierten Datensätzen. R kann daher auch genutzt werden, um unstrukturierte oder strukturierte Daten zu sammeln und damit weiterzuarbeiten

  • R ist ein Open-Source-Programm und kostenlos verfügbar. Informationen zu R finden sich auf der R-Homepage unter www.r-project.org, unter www.cran.r-project.org werden die Installationsdateien zur Verfügung gestellt. Abbildung 2 zeigt die Startseite des Comprehensive R Archive Network (CRAN). Mit CRAN wird das Server-Netzwerk bezeichnet, das in verschiedenen Ländern eine Kopie des Statistikprogramms bereithält. In der Navigation auf der linken Seite findet sich der Eintrag „Manuals“. Dort finden Sie Einführungen in das Statistikprogramm R und ausführliche Informationen zur Installation. In den meisten Fällen sollte der Download der entsprechenden Installationsdatei und die anschließende Installation selbsterklärend sein

  • In R wird mit der sogenannten Console gearbeitet. In diese Console werden Befehle getippt, die dann anschließend von R bearbeitet werden. Die Befehle werden nach dem Prompt-Symbol (>) eingegeben und mit der Eingabetaste (↵) abgeschlossen. Tippen Sie doch einmal 2 + 2. Als Ergebnis wird 4 ausgegeben. Für die Arbeit mit R ist die Benutzeroberfläche RStudio allerdings deutlich angenehmer. Schließen Sie bitte R vor der Installation von RStudio. Klicken Sie mit der Maus auf das rechte, obere Kreuz oder wählen Sie in der oberen Menüzeile „Datei“ und dann „Beenden“. Alternativ können Sie auch q() in die Console eingeben, um R zu beenden.

  • Während bei klassischen Statistikprogrammen wie SPSS oder Stata alle ein oder zwei Jahre neue Versionen veröffentlicht werden, ist der Update-Zyklus bei R bzw. RStudio kürzer. Meist erscheinen innerhalb eines Jahres mehrmals neue Versionen. Häufig sind die Veränderungen überschaubar, sodass eine Aktualisierung nicht unmittelbar erforderlich ist. Dennoch sollte in regelmäßigen Abständen geprüft werden, ob zwischenzeitlich eine aktuellere Version verfügbar ist. Diese Lerneinheit basiert auf der R-Version 4.3. Auch für RStudio und Pakete werden Aktualisierungen veröffentlicht. Bei RStudio kann die aktuelle Version über das Menü „Help“ in der oberen Menüzeile (Check for Updates) geprüft werden


RStudio


  • Posit (früher: RStudio) ist eine amerikanische Firma, die die grafische Benutzeroberfläche RStudio für das Statistikprogramm R entwickelt hat. Die Benutzeroberfläche RStudio steht ebenfalls als Open-Source-Edition zur Verfügung. Die Homepage der Firma Posit ist unter https://posit.co zu erreichen, die Installationsdatei für die Benutzeroberfläche RStudio findet sich unter https://posit.co/downloads Wählen Sie die Open-Source-Version von RStudio, die für Ihr Betriebssystem zur Verfügung steht

  • Beim Start von RStudio teilt sich die Benutzeroberfläche in drei Fenster auf (siehe Abbildung 4). Auf der linken Seite erscheint die Console, die Sie bereits in der Basisversion von R kennengelernt haben. Auf der rechten oberen Seite wird die Umgebung von R (Environment) angezeigt. Dort werden später die Daten aufgelistet, die in R geladen sind. Unten rechts findet sich ein weiterer Bereich, bei dem unter anderem die Ordnerstruktur (Files), Grafiken (Plots), Pakete (Packages) und die Hilfe (Help) angezeigt werden können.

  • Sie können auch in RStudio mit der Console arbeiten. Wenn Sie nach dem Prompt-Symbol (>) eine Aufgabe eingeben und diese mit der Eingabetaste (↵) abschließen, dann wird direkt darunter dasrgebnis dargestellt. Tippen Sie doch einmal 3 + 3 und schließen die Eingabe mit der Eingabetaste ab. Als Ergebnis wird 6 ausgegeben

  • In der Praxis wird allerdings mit Skripten gearbeitet. Ein Skript ist eine Datei, in der die R-Befehle eingegeben und an die Console geschickt werden. Solche Dateien können gespeichert und anderen Personen zur Verfügung gestellt werden. Dadurch können die einzelnen Analyseschritte nachvollzogen und ggf. mögliche Fehler entdeckt werden. Eine neue Skript-Datei kann über die obere Menüzeile geöffnet werden. Wählen Sie dazu File, dann New File und dann R Script. Alternativ kann eine neue Skript-Datei mit dem Tastenkürzel Strg + Shift + N geöffnet werden (Windows).

  • grafische Benutzeroberfläche RStudio jetzt mit vier Fenstern:

    • 1. Links oben: In das Skript-Fenster werden die R-Befehle eingegeben und an die Console weitergegeben.

    • 2. Links unten: In der Console werden die Ergebnisse dargestellt. Sie können in der Console auch Befehle eingeben, die dann aber nicht gespeichert werden.

    • 3. Rechts oben: Im Fenster Environment werden später die verwendeten Daten angezeigt. Über den Reiter „History“ werden zudem die bisher eingegebenen Befehle gespeichert. Über das Fenster werden auch Datensätze geladen und importiert.

    • 4. Rechts unten: In diesem Fenster kann über die Reiter zwischen mehreren Funktionen gewechselt werden. Über den Reiter „Help“ finden Sie die Hilfe.

  • Die Benutzeroberfläche RStudio ist sehr umfangreich und bietet zahlreiche Möglichkeiten, die Arbeit mit R zu erleichtern. In den nächsten Kapiteln werden einige dieser Möglichkeiten vorgestellt. An dieser Stelle beschränke ich mich auf vier Hinweise:

    • Wählen Sie in der oberen Menüzeile den Reiter „Help“. Dort finden Sie eine Übersicht aller verwendeten Tastaturabkürzungen (Keyboard Shortcuts Help).

    • Für RStudio (und viele andere R-Werkzeuge) gibt es sogenannte Cheat Sheets. Dabei handelt es sich um pdf-Dateien, die die wichtigsten Funktionen sehr kompakt darstellen. Sie erreichen das Cheat Sheet zu RStudio über das Menü „Help“ (Cheat Sheets).

    • RStudio kann individuell angepasst werden. Dies ist über den Eintrag Global Options im Menü Tools möglich (Abbildung 6). In der Voreinstellung speichert RStudio den Arbeitsbereich (Workspace) automatisch zwischen den Sitzungen. Dies kann allerdings zu Irritationen führen. Deshalb sollte diese Voreinstellung deaktiviert werden. Statt den Arbeitsbereich zu speichern ist es günstiger, das Skript zu speichern, um den Arbeitsbereich wiederherzustellen.

    • Über die Global Options kann auch das Erscheinungsbild konfiguriert werden. Im Bereich Appearance kann das RStudio theme, Schriftgröße sowie das Editor theme angepasst werden. Falls Sie einen dunklen Hintergrund bevorzugen, dann probieren Sie einmal das Editor theme „Dracula“ oder „Twilight“ aus. Im Pane Layout können die Fenster in RStudio konfiguriert werden.


Pakete


  • Das CRAN ist über https://cran.r-project.org erreichbar. In der linken Navigation finden Sie den Eintrag „Packages“ (unter Software). Im Sommer 2023 waren auf dem CRAN bereits über 19.000 solcher Packages verfügbar. Auf dem CRAN sind die Packages alphabetisch oder nach Veröffentlichungsdatum gelistet. Allerdings ist es nicht effizient, die Packages einzeln anzuschauen. Einen besseren Überblick über nützliche Packages bieten die CRAN Task Views, die über die linke Navigation und den Eintrag „Task Views“ erreichbar sind. Bei den CRAN Task Views handelt es sich um eine kommentierte Auswahl empfohlener R-Packages. Mittlerweile gibt es solche Kommentierungen für 40 verschiedene Bereiche – von Bayesian über Psychometrics bis hin zu WebTechnologies. Die im Rahmen dieser Einführung verwendeten Pakete werden im Abschnitt „Pakete im Überblick“ beschrieben. Die Installation und das Laden der Pakete werden in Abschnitt 3.1 behandelt. Neben dem CRAN werden R-Pakete auch auf der Seite www.bioconductor.org und bei https://github.com veröffentlicht. Insbesondere über github werden R-Packages zur Verfügung gestellt, die noch in Entwicklung sind.

  • Pakete installieren und laden:

    Wie in Abschnitt 2.1.3 beschrieben, kann durch optionale Pakete (Packages) der Funktionsumfang von R erheblich erweitert werden. Diese Pakete werden von einzelnen Personen oder Personengruppen erstellt und stehen der R-Gemeinschaft unter anderem über den CRAN zur Verfügung. Vor der Nutzung eines R-Paketes sind zwei Schritte erforderlich: (1) Die Installation eines Pakets. (2) Das Laden des installierten Pakets. Während die Installation eines Pakets nur einmal erforderlich ist, muss das Paket vor jeder Nutzung aktiviert bzw. geladen werden.

  • Die Installation eines Pakets ist über die Funktion install.packages("Paketname") möglich und setzt eine Internetverbindung voraus. Der Paketname wird dabei in Anführungszeichen gesetzt. Häufig benötigen Pakete für ihre Aufgaben andere Pakete, die dann automatisch mitinstalliert werden (sogenannte dependencies).

  • Nach der Installation muss das Paket noch geladen werden. Dies erfolgt mit der Funktion library(Paketname). Dabei muss der Paketname nicht in Anführungszeichen gesetzt werden. Die Installationszeit der einzelnen Pakete ist unter anderem von der Größe der Pakete abhängig. Die erfolgreiche Installation eines Pakets wird in der Console dokumentiert (z.B. package ‘descr’ successfully unpacked and MD5 sums checked). Nach dem Abschluss einer Installation ist in der Console wieder das Prompt-Zeichen (>) zu sehen.

  • Pakete installieren und laden: install.packages("tidyverse")

    library(tidyverse)

  • Zur Erinnerung: Die Installation eines Pakets ist nur einmalig erforderlich (außer es liegt ein Update vor). Das Laden eines R-Pakets ist dagegen in jeder R-Sitzung notwendig. Nach der Installation eines Pakets kann es sinnvoll sein, vor der install.packages-Funktion ein Raute-Zeichen (#) zu setzen, sodass das Paket beim Ausführen eines Skripts nicht wiederholt installiert wird.

  • Nach der Installation ist die Dokumentation der Pakete direkt in RStudio verfügbar. Klicken Sie mit der Maus im rechten, unteren Fenster auf den Reiter Packages. Dort sind alle installierten Packages aufgeführt (Abbildung 9). Mit einem Mausklick auf den Paketnamen öffnet sich die Dokumentation der Pakete. Das tidyverse ist eine Paketsammlung, deshalb ist in der Liste nicht tidyverse, sondern die einzelnen Pakete des tidyverse aufgeführt (z.B. dplyr).

  • Sie können Pakete auch über diese Übersichtsseite laden. Wenn Sie auf das Kästchen vor dem Paketnamen klicken, dann wird das entsprechende Paket geladen. Endsprechend kann ein geladenes Paket auch deaktiviert werden. Die Deinstallation von Paketen ist ebenfalls über diese Übersichtsseite möglich. Dazu klicken Sie in der jeweiligen Paketzeile auf der rechten Seite auf das x. Schließlich müssen auch Pakete aktualisiert werden. Das Update ist über das Symbol unterhalb des Reiters „Packages“ möglich, alternativ kann auch die update.packages- Funktion genutzt werden


    Funktion

    Beschreibung

    install.packages("paketname")

    Installation eines Pakets, Paketname in Anführungszeichen, einmalig erforderlich

    library(paketname)

    Laden eines Pakets, nach jedem R-Start erforderlich, keine Anführungszeichen erforderlich

    update.packages()

    Aktualisierung der Pakete, ohne Nennung der Paketnamen werden alle installierten Pakete aktualisiert



Console


  • Die Console dient in RStudio als Eingabe- und Ausgabefenster. Wenn Sie RStudio geladen haben, dann steht in der Console ein kurzer Begrüßungstext, der unter anderem über die installierte R-Version informiert. Unter dem Begrüßungstext steht das größer-als-Zeichen (>). In der R-Sprache wird dieses Zeichen als „Prompt“ oder auch als Eingabeaufforderung bezeichnet. Nach diesem Zeichen wartet R auf eine Eingabe. Tippen Sie nach der Eingabeaufforderung einmal die folgende Aufgabe ein: 3 + 4 + 5. Bestätigen Sie diese Eingabe mit der Entertaste. Das Ergebnis sollte unter der Eingabe erscheinen: [1] 12

  • Die Ausgabe beginnt mit einer eckigen Klammer und der Zahl 1, das eigentliche Ergebnis steht dahinter (12). Die eckige Klammer wird verwendet, um bei längeren Ausgaben, die Elemente zu nummerieren. An dieser Stelle können Sie die eckige Klammer ignorieren, die Nützlichkeit der eckigen Klammern wird erst bei komplexeren Aufgaben deutlich

  • Die Console eignet sich, um einfache Berechnungen oder logische Abfragen durchzuführen. Allerdings können die Eingaben in der Console nicht gespeichert werden. Auch für die Übersicht und die Reproduktion der Berechnungen ist es besser, wenn Ein- und Ausgabe getrennt werden. Deshalb werden in der Praxis die Befehle über eine Skriptdatei eingegeben, die auch gespeichert werden kann. Bevor wir eine Skriptdatei erstellen, wird die Console aufgeräumt. Klicken Sie mit der Maus im Consolen-Fenster auf das Besensymbol (rechts oben). Damit wird der Inhalt der Console gelöscht.



Skripte


  • Sie können in RStudio über das Menü „File“, „New File“ und dann „R Script“ oder über die Tastenkombination STRG + Shift + N eine neue Skriptdatei erstellen. In einer Skriptdatei können Sie mehrere Befehle eingeben, die schrittweise oder auch komplett ausgeführt werden. Um einen Befehl auszuführen, klicken Sie auf das „Run“-Symbol im Skript-Fenster oder nutzen in Windows das Tastaturkürzel Strg + Enter. Wichtig ist dabei die Stelle des Cursors. Steht der Cursor am Ende des Befehls, dann wird die jeweilige Befehlszeile ausgeführt. Sie können mit der Maus aber auch mehrere Befehlszeilen markieren, die dann ausgeführt werden.

  • Tastenkürzel in RStudio Die Tastaturkürzel in RStudio unterscheiden sich in Abhängigkeit des Betriebssystems. In dieser Lerneinheit werden die Windows-Tastaturkürzel verwendet. Eine Übersicht der Tastaturbefehle ist über das Menü „Tools“, dann „Keyboards Shortcuts Help“ (in Windows: Alt + Shift + K) verfügbar. Die Tastaturkürzel können auch individuell angepasst werden (Menü „Tools“, dann „Modify Keyboards Shortcuts…“). Die wichtigsten Tastaturkürzel für die Arbeit mit RStudio sind auch im Cheat Sheet zu RStudio dokumentiert (Menü „Help“, dann „Cheat Sheets“).

  • Durch Skripte können Sie Berechnungen wiederholen oder die einzelnen Analyseschritte auch anderen Personen zur Verfügung stellen. Eine Skript-Datei kann gespeichert werden und erhält die Dateiendung „.R“. Um eine Skript-Datei zu speichern, wählen Sie im Menü „File“ und dann „Save as…“ oder das Tastenkürzel Strg + S

  • Sie können in Skripten die einzelnen Arbeitsschritte auch kommentieren und strukturieren. Kommentare werden mit dem Symbol # (Raute) eingeleitet. Ein Kommentar kann in einer eigenen Zeile oder auch direkt hinter einem Befehl stehen. Der Text nach dem Raute-Symbol wird von R ignoriert. Ein R-Skript kann auch in Abschnitte unterteilt werden. Dies ist über das Menü „Code“ und den Eintrag „Insert Section“ möglich (Tastenkombination: STRG+Shift+R). Insbesondere bei längeren Skripten bietet eine solche Gliederung eine bessere Übersicht.


Befehle


  • R wird weitgehend über Befehle gesteuert. Diese Befehle können in die Console oder in ein Skript geschrieben werden. R-Befehle bestehen aus Funktionen, einem oder mehreren Objekten, auf die sich die Funktion bezieht, sowie Argumenten, die die Funktion genauer spezifizieren.

  • Formal lässt sich ein R-Befehl wie folgt darstellen: funktion(objekt, argument) Die Funktion legt fest, was mit dem Objekt passieren soll. Die round-Funktion ermöglicht beispielsweise das Runden eines Objekts. Ohne Angabe von Argumenten werden bei der round-Funktion keine Nachkommastellen eines Objekts ausgegeben.

  • Ein Beispiel: In R ist die Kreiszahl Pi, die das Verhältnis vom Umfang zum Durchmesser eines Kreises beschreibt, im Objekt pi abgelegt. Wenn Sie sich den Wert von pi ausgeben lassen möchten, dann schreiben Sie einmal pi in das Skript und klicken Sie auf das „Run“-Symbol. Als Resultat wird die Zahl 3,141593 in der Console ausgegeben. Wenn Sie round(pi) eingeben, dann werden die Nachkommastellen nicht mehr ausgegeben. Die Rundungsfunktion „round“ wird auf das Objekt „pi“ angewendet. Bei der round-Funktion kann mit dem Argument „digits“ die Anzahl der Nachkommastellen festgelegt werden. Mit dem Argument digits = 3 werden drei Nachkommastellen ausgegeben. Bei vielen Funktionen muss das Argument nicht separat genannt werden, bei der round-Funktion ist beispielsweise die Angabe der Anzahl der Nachkommastellen (z.B. 2) ausreichend

    Bsp.:

    pi

    round(pi)

    round(pi, digits = 3)

    round(pi, 2)

    help(round) # Dokumentation der round-Funktion

    ?round # alternativ zur help-Funktion

  • Bei vielen Funktionen gibt es Argumente, die voreingestellt sind. Bei der round-Funktion ist beim Argument digits beispielsweise die Zahl 0 voreingestellt, sodass keine Nachkommastellen ausgegeben werden, wenn das Argument nicht explizit genannt wird. Mit der Nennung des Arguments wird die Voreinstellung der Funktion „überschrieben“ und der angegebene Wert verwendet. Die einzelnen Argumente werden jeweils mit einem Komma getrennt. Eine Übersicht der Argumente einer Funktion ist über die Dokumentation verfügbar. Die Dokumentation kann über help(round) oder ?round aufgerufen werden

  • Befehle können in R auch verschachtelt werden. Dabei werden die Befehle von innen nach außen ausgeführt, das heißt, beim Befehl round(sqrt(77), digits = 2) wird zunächst die Quadratwurzel von 77 berechnet und dieser Wert wird anschließend gerundet. Mit dem Argument digits wird die Anzahl der Nachkommastellen festgelegt (hier: 2). Das Verschachteln der Befehle stört allerdings den Lesefluss, sodass diese Möglichkeit nur in Maßen genutzt werden sollte. Mit dem Pipe-Operator wird in Abschnitt 4.3 eine alternative Möglichkeit der Verkettung von Befehlen vorgestellt, die deutlich lesefreundlicher ist.

    Befehle verschachteln:

    round(sqrt(77))

    round(sqrt(77), digits = 2)



Objekte


  • R ist eine objektbasierte Befehlssprache. Ein Objekt kann einen einzelnen Wert, mehrere Werte, Variablen, Datensätze oder auch Ergebnisse statistischer Analysen enthalten (Manderscheid 2017, S. 31-33). Die Zuweisung eines Werts zu einem Objekt erfolgt über den sogenannten Zuweisungspfeil <-. Der Zuweisungspfeil besteht aus einem Pfeil (<) und dem Minus-Zeichen (-). Die beiden Zeichen können einzeln eingegeben werden. Etwas schneller ist die Tastenkombination Alt + - (Alt + Minus), die zudem vor und nach dem Zuweisungspfeil ein Leerzeichen einfügt.

  • Ein Objektname muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern, Unterstrich und Punkt enthalten (Wickham und Grolemund 2018, S. 38). Aus Kompatibilitätsgründen sollte auf Umlaute und Sonderzeichen (z.B. ß) verzichtet werden. Außerdem ist es empfehlenswert, Objektbezeichnungen klein zu schreiben, da kleine und große Buchstaben nicht immer klar zu unterscheiden sind. Formal lässt sich eine Zuweisung wie folgt darstellen:

    objektname < - Wert

  • Das klingt abstrakt, deshalb ein Beispiel: Mit dem Befehl x <- 32 wird R aufgefordert, ein Objekt mit dem Namen x und dem Wert 32 zu erstellen. Das Objekt x kann im Folgenden für weitere Berechnungen verwendet werden. Im Kasten wird eine Addition dargestellt (x + 5). Objekte können auch überschrieben werden. Wenn im nächsten Schritt der Befehl x <- 42 ausgeführt wird, dann wird die frühere Zuordnung (x <- 32) überschrieben. Erstellen Sie einmal ein paar Objekte und führen Sie einfache Berechnungen mit diesen Objekten durch. Beachten Sie dabei, dass R „case sensitive“ arbeitet und zwischen Groß- und Kleinschreibung unterscheidet. Ein kleines x ist ein anderes Objekt als ein großes X.

  • Objekte anlegen:

    x < - 32

    x + 5

    x < - 42

    ls() # Objekte in der Console anzeigen

    remove(x) # Objekt x löschen

  • Die erstellten Objekte werden im „Environment“-Fenster (rechts oben) aufgeführt. Außerdem erhalten Sie mit der Funktion ls() auch eine Übersicht der Objekte in der Console. Schließlich kann mit der remove-Funktion ein Objekt auch wieder gelöscht werden. Statt remove ist auch die Abkürzung rm möglich



Vektoren


  • Eine wichtige Datenstruktur in R sind Vektoren. Sie können sich Vektoren als eine Spalte einer Tabelle vorstellen (z.B. das Alter oder die Namen mehrerer Personen). Mit dem Skript im Kasten wird ein Vektor mit fünf Werten erstellt. Das Objekt hat den Namen „alter“ und besteht aus den Werten 18, 27, 38, 47 und 63. Die einzelnen Werte werden in Klammer geschrieben, vor der Klammer steht der Buchstabe c. Das c steht für concatenate und bedeutet verbinden. Mit dem Objektnamen können die fünf Werte in der Console ausgegeben werden.

  • In einem Vektor können aber nicht nur Zahlen, sondern auch Text gespeichert werden. Mit dem Skript im nächsten Kasten wird das Objekt „namen“ erstellt, das aus den Namen Thomas, Julia, Lisa, Christian und Gerrit besteht. Die einzelnen Namen müssen dabei in Anführungszeichen gesetzt werden, da es sich um Textvariablen (character) handelt

  • Vektoren anlegen:

    alter <- c(18, 27, 38, 47, 63)

    alter

    namen <- c("Thomas", "Julia", "Lisa", "Christian", "Gerrit")

    namen

  • Werden die Objektnamen eingegeben, dann werden in der Console jeweils alle Werte dieses Objekts ausgegeben. Sollen nur einzelne Werte bzw. Submengen ausgegeben werden, dann folgt nach dem Objektnamen eine eckige Klammer. In der Klammer wird dann die Position des Werts genannt, der ausgegeben werden soll. Die Ziffer 1 steht für den ersten Wert, die Ziffer 3 für den dritten Wert. Mit einem Doppelpunkt wird ein Wertebereich spezifiziert, zum Beispiel steht 2:4 für die Elemente an zweiter bis vierter Stelle. Eine flexible Reihenfolge wird mit dem Buchstaben c festgelegt, in Klammern werden dann die Werte aufgeführt. Schließlich kann die Ausgabe einzelner Werte ausgeschlossen werden. Dazu wird das Minus-Zeichen vor die Position gesetzt. Im Kasten finden Sie einige Möglichkeiten, um die Ausgabe einzelner Werte der beiden Vektoren alter und namen anzupassen.

  • Submengen auswählen (Indexing):

    alter[1] # Element an erster Stelle

    namen[3] # Element an dritter Stelle

    alter[2:4] # Elemente an zweiter, dritter und vierter Stelle

    namen[1:2] # Elemente an erster und zweiter Stelle

    alter[c(1,4,5,1,1)] # Flexible Reihenfolge namen[c(1,1,5,5)] # Flexible Reihenfolge

    alter[-1] # alle Elemente außer das erste Element

    namen[-(1:3)] # alle Elemente außer die ersten drei Elemente

  • Bei den Vektoren alter und namen wurden die Werte einzeln eingegeben und mit concatenate verknüpft. Falls einmal ein Objekt mit einem festen Zahlenbereich (z.B. 1 bis 100) angelegt werden muss, dann wäre es etwas mühsam, alle Zahlen von 1 bis 100 einzeln einzugeben. Für solche Aufgaben können in R Folgen und Sequenzen erstellt werden. Mit dem Doppelpunkt wird ein Wertebereich definiert, d.h. mit 1:5 werden die Werte 1 bis 5 in der Console ausgegeben. Mit der rep-Funktion und Argumenten kann die Folge noch spezifiziert werden. Das times-Argument bezieht sich auf die Reihe, das each-Argument auf die einzelnen Werte. Mit der seq- Funktion werden Sequenzen angelegt. Mit dem from-Argument wird der Startpunkt, mit dem to-Argument der Endpunkt definiert. Mit dem by-Argument wird die Schrittweite festgelegt. Alternativ kann mit dem Argument length.out auch die Anzahl der Elemente spezifiziert werden.

  • Folgen und Sequenzen:

  • 1:5 # von 1 bis 5

    rep(1:5, times=3) # Reihe dreimal wiederholen

    rep(1:3, each=3, times=2) # Zahlen dreimal wiederholen, Reihe zweimal wiederholen

    seq(from=3, to=9, by=0.5) # Sequenz von 3 bis 9 in 0,5-Schritten

    seq(from=5, to=-5, by=-1) # Absteigende Sequenz

    seq(1.5, 8.2, length.out=9) # Sequenz von 1.5 zu 8.2 mit neun Elementen

  • Nützliche Funktionen:

    sequenz <- seq(from=0, to=100, by=1)

    sequenz

    head(sequenz) # die ersten sechs Elemente tail

    (sequenz, 10) # die letzten zehn Elemente

    length(sequenz) # Länge eines Vektors (Anzahl der Elemente)

  • Im ersten Schritt wird ein Objekt mit dem Namen sequenz erstellt, das Werte von 0 bis 100 enthält. Mit dem Objektnamen sequenz werden die Elemente in der Console ausgegeben. Das Objekt hat insgesamt 101 Elemente. Mit den Funktionen head und tail werden standardmäßig die ersten bzw. letzten sechs Werte eines Objekts ausgegeben. Die Anzahl der ausgegebenen Werte kann aber auch individuell festgelegt werden. Dann folgen nach dem Objektnamen zunächst ein Komma und dann eine Zahl. Die Länge eines Vektors bzw. die Anzahl der Werte eines Vektors kann mit der Funktion length angefordert werden



Tabellen


  • Ein Vektor entspricht einer Spalte einer Tabelle, mehrere Spalten gleicher Länge können zu einer Tabelle zusammengefasst werden. Eine Tabelle wird in R als data.frame bezeichnet.

  • Im Folgenden werden die beiden Vektoren alter und namen zu einer Tabelle zusammengefasst. Die Tabelle erhält den Objektnamen daten1. Nach dem Zuweisungspfeil wird der Objekttyp data.frame genannt, in der Klammer sind die beiden Vektoren aufgeführt. Mit der Funktion remove werden anschließend die existierenden Vektoren alter und namen gelöscht. Die Funktion View(daten1) öffnet eine Ansicht der Tabelle

  • Tabelle aus Vektoren anlegen:

    daten1 <- data.frame(namen, alter) # Tabelle erstellen

    remove(namen, alter) # alter und namen löschen

    View(daten1) # Tabellenansicht öffnen

  • Eine Tabelle kann auch direkt erstellt werden. Dazu werden die Namen der Vektoren und die Werte der Vektoren in Klammern geschrieben. Mit View(daten2) wird die Tabelle angezeigt

  • Tabelle direkt anlegen:

    daten2 <- data.frame(name = c("Oliver", "Julia", "Thomas", "Stefanie", "Daniel"),

    • alter = c(32, 38, 49, 35, 52),

    • punkte = c(12, 18, 6, 14, 9),

    • einkommen = c(1900, 2000, 1800, 2200, 1600))

    View (daten2)

  • Für die Ausgabe der Werte eines Vektors in einer Tabelle müssen Tabelle und Vektor spezifiziert werden. Erst wird die Tabelle genannt, dann der Vektor. Tabelle und Vektor werden durch das Dollarzeichen ($) getrennt. Mit daten1$alter werden die Werte des Vektors alter der Tabelle daten1 in der Console ausgegeben. Mit daten2$name werden die Werte des Vektors name der Tabelle daten2 in der Console ausgegeben.

  • Werte eines Vektors einer Tabelle ausgeben:

    daten1$alter

    daten2$name


Einfache Analysen


  • In diesem Abschnitt nutzen wir die erstellte Tabelle daten2, um einfache Analysen durchzuführen. Mit den Funktionen head und tail werden standardmäßig die ersten sechs oberen bzw. unteren Datenreihen in der Console ausgegeben. Da die Tabelle daten2 nur aus fünf Datenreihen besteht, werden jeweils alle Reihen ausgegeben. In beiden Funktionen kann die Anzahl der Reihen durch Argumente festgelegt werden. Dazu wird nach der Nennung der Tabelle eine Zahl genannt

  • Datensatz kennenlernen:

    head(daten2) # Die oberen sechs Datenreihen werden ausgegeben

    tail(daten2) # Die unteren sechs Datenreihen werden ausgegeben

    head(daten2, 3) # Die oberen drei Datenreihen werden ausgegeben

    tail(daten2, 3) # Die unteren drei Datenreihen werden ausgegeben

  • Mit den Funktionen table bzw. ftable werden einfache Häufigkeitstabellen der Variablen angefordert. Mit den Funktionen min und max können der niedrigste und der höchste Werte einer Variable ausgegeben werden. Der jüngste Befragte ist 32 Jahre, der älteste Befragte ist 52 Jahre alt. Mit der Funktion range werden Minimum und Maximum in einem Schritt ausgegeben. Mit der Funktion mean wird das arithmetische Mittel einer Variable berechnet. Das mittlere Alter der fünf Befragten ist 41,2 Jahre. Die Funktion mean kann nur das arithmetische Mittel der numerischen Variablen alter, punkte und einkommen berechnen. Wenn mit der mean-Funktion das arithmetische Mittel des Objekts name ausgegeben werden soll, dann antwortet R mit einer Fehlermeldung. Beim Objekt name handelt es sich um eine Textvariable (character), statistische Berechnungen sind aber nur bei Zahlen (numeric) möglich. Mit der Funktion summary werden mehrere statistische Angaben ausgegeben

  • Erste Analysen:

    table(daten2$alter)

    table(daten2$punkte)

    min(daten2$alter)

    max(daten2$alter)

    range(daten2$alter)

    mean(daten2$alter)

    mean(daten2$name) # Fehlermeldung, da kein numerisches Objekt

    summary(daten2$alter)

  • Mit R können auch Grafiken erstellt werden (siehe Kapitel 9). Mit der plot-Funktion wird zum Beispiel ein Streudiagramm angefordert. Die erste Variable nach der plot-Funktion bildet die x-Achse, die zweite Variable die y-Achse. Auf der x-Achse wird das Alter und auf der y-Achse das Einkommen dargestellt. Jede Person wird mit einem Punkt symbolisiert. Die Grafik erscheint allerdings nicht in der Console, sondern im Fenster auf der rechten Seite im Reiter „Plots“. Über das Menü kann die Grafik in gängigen Grafikformaten oder als pdf-Dokument abgespeichert werden.

  • Erste Grafiken:

    plot(daten2$alter, daten2$einkommen)

    plot(daten2$alter, daten2$einkommen,

    xlim=c(0,70), #Wertebereich x-Achse

    ylim=c(0, 2500), #Wertebereich y-Achse

    main="Streudiagramm", #Titel des Streudiagramms

    ylab="Einkommen" #y-Achse

    xlab="Alter in Jahren", #x-Achse

    col ="red", #Farbe der Symbole

    pch = 19, #Plotsymbol

    cex = 2) #Größe des Plotsymbols

  • Durch Argumente der plot-Funktion kann das Streudiagramm angepasst werden. Mit xlim und ylim werden die Wertebereiche der x- und y-Achse festgelegt, mit main wird der Titel „Streudiagramm“ vergeben. Die Beschriftung der y-Achse bzw. x-Achse erfolgt über die Argumente ylab bzw. xlab. Mit col wird die Farbe der Symbole festgelegt, mit pch das Plotsymbol und mit cex die Größe des Plotsymbols. Abbildung 8 zeigt das Streudiagramm.


Fehlende Werte


  • Bei den bisherigen Beispieldaten gab es keine fehlenden Werte. Für alle (fiktiven) Personen lagen jeweils gültige Angaben vor. Bei echten Daten ist dies allerdings eher die Ausnahme als die Regel. Insbesondere bei Befragungsdaten können Personen die Angabe verweigern, sodass kein gültiger Wert vorliegt. In der R-Sprache werden fehlende Werte mit der Bezeichnung NA für „not available“ repräsentiert.

  • Im Skript wird ein Vektor mit dem Namen beispiel_na angelegt, der aus fünf Werten besteht: 1900, 2000, 1800, 2200 und NA. Beim letzten Wert handelt es sich um einen fehlenden Wert. Wenn jetzt das arithmetische Mittel des Objekts beispiel_na mit der Funktion mean berechnet werden soll, dann gibt R ein NA aus. Für die Berechnung des arithmetischen Mittels muss die mean-Funktion mit dem Argument na.rm=TRUE ergänzt werden. Statt TRUE wäre auch ein T ausreichend. Mit dem Argument wird R aufgefordert, das arithmetische Mittel der fünf Werte zu berechnen, dabei aber die fehlenden Werte (NA) nicht zu berücksichtigen.

  • Fehlende Werte:

    beispiel_na <- c(1900, 2000, 1800, 2200, NA)

    mean(beispiel_na) # Fehlermeldung, da fehlende Werte

    mean(beispiel_na, na.rm=TRUE) # Erfolgreiche Berechnung

    min(beispiel_na, na.rm = TRUE) # T statt TRUE funktioniert auch

    max(beispiel_na, na.rm = TRUE)

  • Das Argument na.rm=TRUE ist bei vielen Funktionen erforderlich, wenn die Variable fehlende Werte (NA) aufweist. Wenn Sie das Minimum oder das Maximum des Objekts beispiel_na ausgeben möchten, dann muss die jeweilige Funktion jeweils um das Argument „na.rm = TRUE“ ergänzt werden. Anstelle TRUE ist der Buchstabe T ausreichend.




Daten laden


  • In der Regel werden Daten nicht händisch in R eingegeben, sondern können geladen bzw. importiert werden. Wenn es sich um Daten im R-Format handelt, dann werden diese Daten geladen. Wenn die Daten in einem anderen Format vorliegen (z.B. Excel oder SPSS), dann können diese Daten importiert werden (Abschnitt 3.3). In diesem Abschnitt arbeiten wir mit einem Beispieldatensatz, der einige (fiktive) Informationen zu den Figuren der Comicserie „Peanuts“ enthält. Der Datensatz liegt in drei verschiedenen Dateiformaten vor: R (peanuts_r.RData), Excel (peantus_excel.xlsx) und SPSS (peanuts_spss.sav). In diesem Abschnitt wird der R-Datensatz geladen.

  • Der Datensatz peanuts_r umfasst sieben Variablen und 10 Fälle (Tabelle 5). Der Datensatz enthält die Variablen Name, erstes Auftrittsdatum, Typ des Charakters, Lieblingssportart, Informationen zum Taschengeld sowie die Punktzahl in einem Test. Beachten Sie, dass für die Punktzahl bei Lucy Van Pelt keine Informationen vorliegen. Sie hat trotz energischer Nachfrage des Interviewers keine Angaben machen wollen. In der Sprache der empirischen Sozialforschung handelt es sich folglich um ein Item-Nonresponse.

  • Für das Laden eines Datensatzes gibt es in RStudio mehrere Möglichkeiten:

    • – Über das Menü „File“ kann der Eintrag „Open File…“ ausgewählt werden. Es öffnet sich ein Auswahlfenster und mit der Maus können das Verzeichnis und die Datei ausgewählt werden.

    • – Im rechten oberen Fenster (Reiter „Environment“) kann das Datei-Symbol angeklickt werden. Es öffnet sich erneut ein Auswahlfenster.

    • – Mit dem Tastaturkürzel Strg + O wird das Auswahlfenster geöffnet.

    • – Ein Datensatz kann direkt über ein Skript geladen werden

  • Für die Nachvollziehbarkeit bzw. Reproduktion von Analysen ist das Laden eines Datensatzes über ein Skript vorteilhaft. Allerdings muss im Skript dann auch das Arbeitsverzeichnis des Datensatzes angegeben werden. Mit der Funktion getwd() wird das aktuelle Arbeitsverzeichnis in der Console ausgegeben, mit der Funktion setwd() wird das Arbeitsverzeichnis festgelegt. In die Klammer von setwd wird das Laufwerk und das Arbeitsverzeichnis geschrieben.

  • Personen, die das Betriebssystem Windows nutzen, müssen bei der Eingabe der einzelnen Ordnerebenen den vorwärts gerichteten Schrägstrich (/) nutzen (Beispiel: H:/Verzeichnis1/Verzeichnis2). Mit der load()-Funktion wird der Datensatz geladen, innerhalb der Klammer wird der Dateiname spezifiziert. Selbstverständlich kann der Verzeichnisname auch innerhalb der load-Funktion spezifiziert werden. Mit der View-Funktion werden die Daten angezeigt.

  • R-Daten laden:

    getwd() # Ausgabe des aktuellen Arbeitsverzeichnisses in der Console

    setwd("h:/") # Festlegen des Arbeitsverzeichnisses, hier Laufwerk h

    load("peanuts_r.RData") # Datensatz laden

    load("h:/peanuts_r.RData")# alternativ: Verzeichnis und Dateiname in einer Funktion

    View(peanuts_r) # Anzeige des Datensatzes


Daten importieren


  • Häufig liegen Daten nicht im R-Format vor, sondern müssen in R importiert werden. Für den Import von Daten bietet R viele Möglichkeiten. In diesem Abschnitt wird die in RStudio integrierte Importfunktion genutzt, die für die meisten Daten ausreichend sein sollte. Die Import-Funktion ist über das „Environment“-Fenster und die Schaltfläche „Import Dataset“ verfügbar

Excel

  • Bei einer Excel-Datei wird in der Schaltfläche „Import Dataset“ das Feld „From Excel“ ausgewählt. Es öffnet sich ein Auswahlfenster (Abbildung 11). Über das Browse-Feld wird die Excel-Datei ausgewählt (in diesem Beispiel findet sich die Excel-Datei auf dem USB-Laufwerk). Im mittleren Fenster (Data Preview) wird eine Vorschau des Datensatzes gezeigt. Links unten (Import Options) sind Anpassungen für den Import möglich, die in unserem Beispiel aber nicht erforderlich sind (z.B. Tabellenblatt auswählen). Der Import des Datensatzes selbst wird über das Paket readxl umgesetzt. Rechts unten in Abbildung 11 wird der Code bzw. das Skript dokumentiert (Code Preview), um den Datensatz zu importieren. Sie können das Skript in der Zwischenablage ablegen und in ein eigenes Skript kopieren. Alternativ können Sie auch einfach auf die Schaltfläche „Import“ klicken, um den Datensatz zu importieren. Das Importfenster schließt sich und in der Arbeitsumgebung wird der neue Datensatz peanuts_excel aufgeführt

SPSS

  • Der Import des SPSS-Datensatzes (peanuts_spss.sav) ist mit dem Import des Excel-Datensatzes vergleichbar. Statt „From Excel…“ wird der Eintrag „From SPSS…“ ausgewählt. Abbildung 12 zeigt das Importfenster. Der Import des Datensatzes wird über das haven-Paket umgesetzt, das zum tidyverse gehört. In der Datenvoransicht wird der Datensatz gezeigt. Beachten Sie insbesondere die Spalten typ und sport. Dort werden Ziffern statt der Bezeichnungen gezeigt. Beide Variablen werden als Zahlen (double) importiert. In SPSS wird mit Variablen- und Wertelabels gearbeitet, diese Angaben werden in R als Attribute abgelegt. Über die Schaltfläche „Import“ wird der Datensatz importiert. Alternativ wäre der Import auch über das Skript möglich.

CSV

  • Ein gängiges Dateiformat ist auch CSV. CSV steht für Comma-Separated Values. Auf den meisten Computern werden CSV-Dateien automatisch mit Tabellenkalkulationsprogrammen (z.B. Excel) verknüpft und in diesen Programmen auch geöffnet. In der ersten Zeile einer CSV-Datei stehen in der Regel die Variablen, in den folgenden Zeilen die Werte der einzelnen Untersuchungsobjekte. Das Datentrennzeichen kann sich allerdings zwischen CSV-Dateien unterscheiden. Bei den international gängigen Einstellungen wird das Komma als Datenfeldtrennzeichen und der Punkt als Dezimaltrennzeichen verwendet

  • Im deutschsprachigen (und europäischen Raum) wird stattdessen das Semikolon als Datenfeldtrennzeichen und das Komma als Dezimaltrennzeichen verwendet (siehe „Peanuts“-Kasten „Semikolon als Datenfeldtrennzeichen“). Bei der Ansicht einer CSV-Datei in einem Tabellenkalkulationsprogramm ist das Datenfeldtrennzeichen allerdings nicht unmittelbar zu erkennen, für diese Information muss die Datei mit einem Texteditor geöffnet werden

  • Auch CSV-Datensätze können über die Schaltfläche „Import Dataset“, dann „From Text (readr)“ in RStudio importiert werden. Im Menü kann dann das Datenfeldtrennzeichen eingestellt und weitere Optionen angepasst werden. Der Import erfolgt dann über die read_csv-Funktion. Wenn das Semikolon als Datenfeldtrennzeichen genutzt wird, dann kann der Import über die read_csv2- Funktion umgesetzt werden. Die beiden Funktionen read_csv und read_csv2 sind zwei Varianten der allgemeinen Funktion read_delim. Über die Hilfefunktion kann eine ausführliche Beschreibung der Funktionen aufgerufen werden.

  • „Peanuts“-Datensatz im csv-Format importieren:

    peanuts_comma <- read_csv("E:/peanuts_comma.csv")

    peanuts_semicolon <- read_csv2("E:/peanuts_semicolon.csv")


Objekttypen


  • Der Beispieldatensatz peanuts_r enthält sehr unterschiedliche Informationen: Namen, Datumsangaben, kategoriale Informationen (typ und sport) und auch Zahlen (tgeld und punkte). Für die Arbeit mit R spielt der Objekttyp eine wichtige Rolle. Es macht einen Unterschied, ob das arithmetische Mittel der Variablen tgeld oder punkte berechnet wird oder die Funktion auf die Variable name angewendet wird. Versuchen Sie einmal, das arithmetische Mittel der Variable name zu berechnen. Sie sollten eine Fehlermeldung erhalten. Wenn Sie bei einer Funktion eine Fehlermeldung erhalten, dann kann dies am jeweiligen Objekttyp liegen. Deshalb ist die Kenntnis der zentralen Objekttypen in R wichtig. R unterscheidet unter anderem folgende Objekttypen: Zahlen, Text, Faktoren und Datum:

    • Zahlen werden in der R-Sprache als numeric bezeichnet. Dabei werden zwei Arten von Zahlen unterschieden: Ganze Zahlen (integer) und Kommazahlen (double).Kommazahlen (double) sind der Standard, sodass R die Zahl 2 als Kommazahl (2.0) speichert. Wenn die Zahl 2 explizit als ganze Zahl abgespeichert werden soll, dann wäre der Zusatz L (2L) erforderlich. In der Praxis spielt diese Differenzierung aber eine untergeordnete Rolle

    • Variablen, die Text enthalten, werden in R als character bezeichnet. Wenn eine Zahlenfolge als Textvariable abgespeichert werden soll, dann muss diese in einfache oder doppelte Anführungszeichen gesetzt werden (z.B. objektname <- „123“). Es existieren Funktionen und auch eigene Pakete für die Arbeit mit Textvariablen. Das können beispielsweise Namen von Personen, aber auch umfangreichere Texte (z.B. Plenarprotokolle) sein.

    • Faktoren sind ein nützlicher, aber durchaus tückischer Objekttyp. Kategoriale Merkmale, also Merkmale, die eine bekannte und begrenzte Menge an Ausprägungen haben, können in R als Faktor dargestellt werden. Insbesondere bei nominalen Variablen (z.B. Geschlecht) und ordinalen Variablen (z.B. Bildungsniveau) bietet sich dieser Objekttyp an, da er bei der statistischen Datenanalyse einige Vorteile hat. Gelegentlich sind Faktoren als numerische Variablen oder Textvariablen abgelegt, sodass diese konvertiert werden müssen.

    • – Für Datumsangaben ist in R der Objekttyp date reserviert. Dieser Objekttyp ermöglicht beispielsweis

    • e die Berechnung von Zeitspannen.

  • Der Objekttyp einer Variable wird mit der Funktion class ermittelt. Mit dem Skript im Kasten werden die Objekttypen der einzelnen Variablen des Datensatzes peanuts_r angefordert. Mit ?class erhalten Sie einige Informationen zu den Objekttypen in R

  • Objekttyp ermitteln:

    class(peanuts_r$name) # Ausgabe: character

    class(peanuts_r$auftritt) # Ausgabe: Date

    class(peanuts_r$typ) # Ausgabe: factor

    class(peanuts_r$sport) # Ausgabe: factor

    class(peanuts_r$tgeld) # Ausgabe: integer

    class(peanuts_r$punkte) # Ausgabe: numeric

  • Die Variablen tgeld und punkte sind numerische Objekte (Zahlen). Zahlen – sowohl integer als auch double – sind der häufigste Objekttyp und die Arbeit mit Zahlen ist in R in der Regel unproblematisch. Die Variable tgeld wurde im Datensatz explizit als integer festgelegt. Das hat für die statistische Datenanalyse keine Nachteile, der Vorteil ist der geringere Speicherbedarf. Ganze Zahlen benötigen weniger Speicherplatz als Kommazahlen. Ein Speicherproblem dürfte sich aber erst bei sehr großen Datensätzen ergeben. Die Variablen typ und sport sind als Faktoren gespeichert. Bei Faktoren können mit der Funktion levels die einzelnen Ausprägungen eines Faktors ermittelt werden. Bei der Variable typ wird „Mensch“ und „Tier“ ausgegeben. Bei der Variable sport die Ausprägungen „Baseball“, „Eiskunstlauf“ und „Golf“

  • Objekttyp: Faktoren (levels): levels(peanuts_r$typ)

    levels(peanuts_r$sport)

  • Wenn Sie die summary-Funktion auf die beiden Variablen anwenden, dann erhalten Sie jetzt keine deskriptiven Statistiken, sondern eine einfache Häufigkeitstabelle. Die Ausgabe der summary-Funktion hängt vom konkreten Objekttyp ab.

  • Objekttyp: Faktoren (summary): summary(peanuts_r$typ)

    summary(peanuts_r$sport)

  • Die Variable auftritt ist als Datum ablegt. Dieser Objekttyp eignet sich insbesondere, wenn Zeitabstände berechnet werden sollen. Mit Sys.Date wird das aktuelle Datum in der Console ausgegeben, mit date Datum und Uhrzeit. In der letzten Zeile wird eine neue Variable erstellt (peanuts_r$dauer). In dieser Variable wird die Anzahl der Tage vom ersten Auftritt bis zum aktuellen Datum abgelegt.

  • Objekttyp: Datum

    Datum Sys.Date() # Aktuelles Datum

    date() # Aktuelles Datum und Uhrzeit peanuts_r$dauer <- Sys.Date() peanuts_r$auftritt

    View(peanuts_r)

  • Bei der Variable name handelt es sich um eine Textvariable (auch character oder string bezeichnet). Mit Textvariablen werden keine statistischen Berechnungen durchgeführt, aber je nach Inhalt können Textvariablen auch als Datumsvariablen oder als Faktoren gespeichert werden. Auch für Textvariablen gibt es eigene Pakete (z.B. stringr).

  • Objekttypen testen und konvertieren:

    Bei der Arbeit mit R muss gelegentlich der Objekttyp angepasst werden. In Tabelle 6 sind ausgewählte Funktionen zum Testen und Konvertieren von Objekten dokumentiert. Testfunktionen beginnen mit is und Konvertierungsfunktionen mit as


    Testen

    Konvertieren

    is.numeric()

    as.numeric()

    is.integer()

    as.integer()

    is.double()

    as.double()

    is.factor()

    as.factor()

    is.character()

    as.character()

  • Je nach Situation kann es erforderlich sein, die Objekte zu konvertieren. Die character-Variablen typ und sport im Excel-Datensatz können mit der as.factor-Funktion in eine Faktorvariable konvertiert werden. Mit dem Skript im Kasten werden im Excel-Datensatz neue Variablen erstellt (typ2 und sport2), die auf den Ursprungsvariablen basieren und als Faktoren festgelegt werden

  • Objekttyp konvertieren (Excel-Datensatz): peanuts_excel$typ2 <- as.factor(peanuts_excel$typ)

    peanuts_excel$sport2 <- as.factor(peanuts_excel$sport)

  • Im SPSS-Datensatz sind die Variablen typ und sport als numerische Objekte abgelegt. Beide Variablen können zu Faktorvariablen konvertiert werden. Im Skript werden jeweils zwei neue Variablen erstellt, die auf der Ursprungsvariable basieren. Im ersten Argument levels werden die Ausprägungen (1, 2) aufgeführt, im zweiten Argument werden diesen Ausprägungen labels zugewiesen. Anschließend wird die Struktur der neuen Variablen geprüft.

  • Variablen konvertieren (SPSS-Datensatz): peanuts_spss$typ2 <- factor(peanuts_spss$typ,

    levels=c(1, 2),

    labels=c("Mensch", "Tier"))

    class(peanuts_spss$typ2)

    peanuts_spss$sport2 <- factor(peanuts_spss$sport,

    levels=c(1, 2, 3),

    labels=c("Baseball", "Golf", "Eiskunstlauf"))

    class(peanuts_spss$sport2)

  • Eine Konvertierung der importierten Variablen ist nicht in jeder Situation erforderlich. In vielen Fällen kann auch direkt mit den importierten Variablen weitergearbeitet werden.


Datenstrukturen


  • Neben Objekttypen werden in R auch Datenstrukturen unterschieden. Die Datenstruktur beschreibt die Organisation der Daten. Zwei wichtige Datenstrukturen, Vektoren und Tabellen, wurden im zweiten Kapitel bereits vorgestellt. Eine weitere wichtige Datenstruktur sind tibbles.

    • – Vektoren: Bei einem Vektor handelt es sich um eine Menge von Elementen, zum Beispiel die Altersangabe verschiedener Personen. Der Objekttyp eines Vektors ist immer homogen. Ein Vektor kann Zahlen (numeric), Text (character), Faktoren oder auch Datumsangaben enthalten, aber nicht verschiedene Objekttypen (Zahlen und Text).

    • – Tabellen (data frame): Wenn mehrere Vektoren der gleichen Länge zusammengefasst werden, erhält man eine Tabelle (data frame). Die einzelnen Vektoren einer Tabelle können verschiedene Objekttypen haben, also Zahlen (z.B. Altersangabe) oder Text (z.B. Namen).


    • – Tibbles: Eine Weiterentwicklung der klassischen data frames sind tibbles, die unter anderem eine optimierte Ausgabemethode haben. Insbesondere im tidyverse wird nicht mit klassischen data frames, sondern mit tibbles gearbeitet.

  • Neben Vektoren, Tabellen und tibbles lassen sich mit Matrizen (Matrix), Arrays und Listen weitere Datenstrukturen unterscheiden, die aber in dieser Einführung nicht weiter behandelt werden. Mit der class-Funktion kann die Datenstruktur eines Objekts abgefragt werden. Bei peanuts_r handelt es sich um einen klassischen data frame, die Excel- und SPSS-Datei werden beim Import als tibbles importiert. Einige ältere Funktionen arbeiten nicht immer mit tibbles zusammen. In solchen Situationen kann ein tibble mit der Funktion as.data.frame wieder in das klassische Format konvertiert werden.

  • Datenstruktur abfragen:

    class(peanuts_r)

    class(peanuts_excel)

    class(peanuts_spss)



Saubere Skripte erstellen


  • In der Forschungspraxis werden Befehle in RStudio nicht über die Console eingegeben, sondern Skripte erstellt. Bei der Gestaltung eines Skripts haben Sie viele Gestaltungsspielräume, aber für die eigene Nachvollziehbarkeit und die Weitergabe von Skripten an dritte Personen bietet es sich an, einige Konventionen bei der Erstellung von Skripten zu berücksichtigen. In diesem Abschnitt werden einige Grundregeln vorgestellt, die dem tidyverse-Style (https://style.tidyverse.org) entnommen sind. Es handelt sich um Vorschläge, denen Sie nicht zwingend folgen müssen. Allerdings haben sich die Vorschläge in der Praxis durchaus bewährt

  • Dateinamen sollten keine Leerzeichen, keine Sonderzeichen und auch keine Umlaute enthalten. Wenn Sie in einem Ordner mehrere Dateien haben, die auch in einer bestimmten Reihenfolge dargestellt werde sollen, dann bieten sich Zahlen an (z.B. 10_skript_datenaufbereitung.R). Falls sich die Reihenfolge der Dateien ändert, dann können Buchstaben genutzt werden (günstiger ist es vermutlich, die Nummerierung anzupassen)

  • Dateinamen:

    skript_kapitel_3.R # empfohlen

    skript kapitel 3.R # vermeiden

  • Für die Bezeichnung von Objektnamen sollten ebenfalls nur kleine Buchstaben und Zahlen genutzt werden. Bei längeren Objektnamen bietet sich der Unterstrich (_) an, um die Lesbarkeit zu verbessern. Objektnamen sollten möglichst kurz, aber dennoch aussagekräftig sein

  • Objektnamen:

    modell1 # empfohlen

    ErgebnissevonModell1 # vermeiden

  • Zur Strukturierung von Skripten sollten Kommentare und Abschnitte genutzt werden. Kommentare werden mit der Raute (#) eingeleitet. Kommentare können separat in einer Zeile stehen oder auch nach einer Funktion. Bei längeren Skripten sollten für die Strukturierung Abschnitte genutzt werden. Diese können über das Menü („Code“, dann „Insert Section“) oder auch mittels eines Tastaturkürzels (Strg + Shift + R) eingefügt werden.

  • Kommentare:

    # Kommentar vor einem Befehl

    mean(x, na.rm = TRUE) # Kommentar nach einem Befehl

  • Die Lesbarkeit von Skripten wird durch die Verwendung von Leerzeichen verbessert. Setzen Sie vor und nach Operatoren (z.B. Zuweisungspfeil) jeweils ein Komma. Leerzeichen sollten aber nicht vor Kommas gesetzt werden. Auch das Begrenzen der Zeilenlänge kann ein einfaches Mittel sein, um die Lesbarkeit von Skripten zu verbessern. In der Standardeinstellung von RStudio wird nach 80 Zeichen eine vertikale, graue Linie eingezeichnet. Diese kann in den Optionen angepasst werden. Falls eine Skriptzeile mehr als 80 Zeichen enthält, dann sollte das Skript in einer neuen Zeile fortgesetzt werden.

  • Leerzeichen und Kommas:

    alter <- c(15, 25, 30) # empfohlen

    alter<-c(15,25,30) # vermeiden

    mean(x, na.rm = TRUE) # empfohlen

    mean (x ,na.rm=TRUE) # vermeiden

  • Falls für die Ausführung von Skripten zusätzliche Pakete erforderlich sind, dann sollten diese zu Beginn des Skripts geladen werden.

  • Struktur von Skripten:

    # Pakete

    library(tidyverse)

    library(haven)

    library(sjmisc)

    library(sjPlot)


    # Daten laden

    load("ess9de_m1.RData")


Pipe-Operator


  • Der Pipe-Operator ist ein Werkzeug, um mehrere R-Funktionen nacheinander auszuführen und dabei einen leicht oder zumindest leichter verständlichen Code zu schreiben (Wickham und Grolemund 2018, S. 243-249). Der Pipe-Operator besteht aus zwei Prozentzeichen und dem größer-als-Symbol und wird in R wie folgt dargestellt:

    %>%

  • Der Pipe-Operator wurde von Stefan Milton Bache entwickelt und stammt aus dem Paket magrittr. Die Pakete im tidyverse laden den Pipe-Operator automatisch, sodass das Paket nicht separat geladen werden muss. Für den Pipe-Operator gibt es in RStudio ein eigenes Tastaturkürzel: Strg + Shift + M.

  • Die Funktion des Pipe-Operators lässt sich am einfachsten an einem Beispiel illustrieren. Erstellen Sie zunächst ein Objekt mit dem Namen x und den drei Werten 2, 3 und 4 (siehe Kasten). Im nächsten Schritt werden die Werte von x zunächst quadriert, dann die Summe gebildet, die Quadratwurzel gezogen und anschließend das Ergebnis auf zwei Nachkommastellen gerundet. Führen Sie die Berechnung in R einmal aus.

  • Berechnung ohne Pipe-Operator:

    x <- c(2, 3, 4)

    round(sqrt(sum(x^2)), 2)

  • Auf den ersten (und ggf. auch auf den zweiten Blick) sieht das entsprechende R-Skript sehr kompliziert aus, da der Code von innen nach außen gelesen werden muss. Die inneren Klammern werden schrittweise aufgelöst, um das Ergebnis zu berechnen.

  • Mit dem Pipe-Operator werden die Funktionen nicht mehr von innen nach außen gelesen, sondern die einzelnen Anweisungen können von links nach rechts gelesen werden. Der Pipe-Operator kann als „und dann“-Anweisung verstanden werden. Etwa: Zunächst werden die Werte quadriert „und dann“ wird die Summe berechnet „und dann“ wird die Wurzel gezogen „und dann“ wird das Ergebnis auf zwei Nachkommastellen gerundet. Wie im Kasten dargestellt, kann die Befehlskette in einer Zeile stehen (1. Variante) oder die einzelnen Funktionen stehen untereinander (2. Variante).

  • Die primäre Funktion des Pipe-Operator ist es, dass der Code verständlicher ist. Beim Datenmanagement mit dplyr werden wir weitere Beispiele für die Arbeit mit dem Pipe-Operator kennenlernen

  • Berechnung mit Pipe-Operator:

    x^2 %>% sum() %>% sqrt() %>% round(2) # Variante 1

    x^2 %>% # Variante 2

    sum() %>%

    sqrt() %>%

    round(2)


Variablen auswählen


  • Der Beispieldatensatz ess9de_m1 umfasst 76 Variablen. Datensätze mit einer Vielzahl an Variablen sind häufig unübersichtlich. Häufig sind wir nur an einer Handvoll der Variablen interessiert. Mit der select-Funktion kann der Umfang eines Datensatzes auf eine zweckmäßige Auswahl reduziert werden.

  • Im Kasten finden Sie zwei Beispiele für die Anwendung der select-Funktion. Beim ersten Beispiel wird ein neuer Datensatz erstellt (auswahl). Grundlage für den neuen Datensatz ist der Beispieldatensatz ess9de_m1. Mit der select-Funktion werden die Variablen trstprl (Vertrauen in das Parlament), trstplt (Vertrauen in Politiker) und trstprt (Vertrauen in Parteien) ausgewählt. Die anschließende View-Funktion öffnet eine Datenansicht im Skript-Editor. Im zweiten Beispiel wird der Pipe-Operator mit der select-Funktion kombiniert. Der Pipe-Operator kann wie folgt gelesen werden: Nehme den Datensatz ess9de_m1 und dann wähle aus diesem Datensatz die drei Variablen trstprl, trstplt und trstprt aus, die im Objekt auswahl gespeichert werden.

  • select:

    # Beispiel 1

    auswahl <- select(ess9de_m1, trstprl, trstplt, trstprt)

    # Beispiel 2 mit Pipe-Operator

    auswahl <- ess9de_m1 %>% select(trstprl, trstplt, trstprt)

  • Beide Varianten erstellen ein neues Objekt mit dem Namen „auswahl“. Im ersten Beispiel wird der Datensatz direkt nach der select-Funktion genannt, in der zweiten Variante wird erst der Datensatz genannt und dann wird die select-Funktion auf die drei Variablen angewendet.


Variablen verändern


  • Mit der mutate-Funktion im dplyr-Paket können neue Variablen erstellt werden, die auf mathematischen Berechnungen basieren. Fordern Sie zunächst mit der frq-Funktion aus dem sjmisc-Paket eine Häufigkeitstabelle der Variable health (subjektive Gesundheit) an. Innerhalb der Funktion nennen Sie erst den Datensatz (ess9de_m1) und dann die Variable (health). Datensatz und Variable werden mit einem Komma getrennt. Alternativ können Sie auch die klassische Schreibweise mit dem Dollarzeichen verwenden (ess9de_m1$health). Bei der Ansicht der Häufigkeitstabelle werden Sie feststellen, dass höhere Werte mit einem schlechteren Gesundheitszustand einhergehen. Personen, die einen sehr guten Gesundheitszustand berichten, haben den Wert 1, und Befragte, die einen sehr schlechten Gesundheitszustand angeben, haben den Wert 5.

  • Mit dem Skript im Kasten wird die Kodierung umgedreht. Es wird das Objekt „gesundheit“ erstellt. Im Beispieldatensatz wird die Variable health ausgewählt. Mit dieser Variable wird der jeweilige Wert der Variable gesund berechnet. Dieser Variable wird der Wert 5 abzüglich dem jeweiligen Wert der Variable gesund zugeordnet. Bei einer Person mit einem sehr schlechten Gesundheitszustand wird folglich 5 – 5 gerechnet, bei einer Person mit einem sehr guten Gesundheitszustand wird 5 – 1 gerechnet. Mit der frq-Funktion wird abschließend eine Häufigkeitstabelle der ursprünglichen Variable (health) und der neuen Variable (gesund) angefordert, die im Objekt gesundheit enthalten sind.

  • mutate:

    frq(ess9de_m1, health)

    gesundheit <- ess9de_m1 %>%

    select(health) %>%

    mutate(gesund = 5 – health)

    frq(gesundheit, health, gesund)


Variablenwerte ändern


  • Einer der häufigsten Gründe der Datenaufbereitung ist das Ändern – das Rekodieren – der Werte einer Variable. Je nach Situation müssen Werte einer Variable geändert oder zusammengefasst werden. Der Wert 1 einer Variable wird beispielsweise zum Wert 0 rekodiert oder anstatt das Alter in Jahren zu berücksichtigen werden Altersgruppen gebildet. Solche Rekodierungen können mit der rec-Funktion des sjmisc-Pakets umgesetzt werden. Die Vorgehensweise wird an zwei Beispielen illustriert.

  • Beispiel 1: In der Variable sgnptit sind Informationen abgelegt, ob sich eine Person in den vergangenen 12 Monaten an einer Unterschriftenaktion beteiligt hat. Mit der frq-Funktion wird zunächst eine Häufigkeitstabelle der Variable angefordert. Befragte, die sich beteiligt haben, haben den Wert 1 erhalten. Personen, die sich nicht beteiligt haben, haben den Wert 2 erhalten. Für fünf Befragte liegt keine Antwort vor, diese wurden mit NA kodiert. Für die spätere Datenanalyse hat es Vorteile, wenn die Variable mit 0 und 1 kodiert ist. Befragte, die sich nicht beteiligt haben, sollen den Wert 0 erhalten. Personen, die sich beteiligt haben, behalten den Wert 1.

  • Im ersten Schritt wird eine neue Variable erstellt, die den Namen „petition“ erhält. Grundsätzlich sollte bei der Datenaufbereitung eine neue Variable erstellt werden und nicht die Ursprungsvariable (sgnptit) überschrieben werden. Erstens wäre dann die Ursprungsvariable nicht mehr verfügbar, zweitens könnte die durchgeführte Datenaufbereitung nicht kontrolliert werden. Im zweiten Schritt wird die Datenaufbereitung mit dem rec-Argument umgesetzt. In Anführungszeichen wird die Umkodierung spezifiziert.

  • Erst wird der alte Wert genannt, dann folgt ein Gleichheitszeichen (=) und dann der neue Wert. In eckigen Klammern können optional Wertelabels aufgenommen werden. Im Beispiel erhalten die Befragten, die eine 1 angegeben haben, wieder den Wert 1 und das Wertelabel „ja“. Personen, die eine 2 angegeben haben, erhalten den Wert 0 und das Wertelabel „nein“. Befragte, bei denen kein gültiger Wert vorlag, erhalten wieder ein NA. Die einzelnen Kodierungen sind jeweils mit einem Semikolon (;) getrennt. Im dritten Schritt wird der neuen Variable petition mit dem Argument var.label ein Variablenlabel (Teilnahme an Petition) zugeordnet, im vierten Schritt wird festgelegt, dass die Variable als Faktor spezifiziert wird.

  • Datenaufbereitung sgnptit:

    frq(ess9de_m1, sgnptit) ess9de_m1$petition <- rec(ess9de_m1$sgnptit, # 1. Schritt

    rec = "1=1 [ja]; 2=0 [nein]; NA=NA", # 2. Schritt

    var.label = "Teilnahme an Petition", # 3. Schritt

    as.num = FALSE) # 4. Schritt

    frq(ess9de_m1, sgnptit, petition)

  • Bei jeder Datenaufbereitung sollte geprüft werden, ob die Kodierung erfolgreich war. Fehler bei der Rekodierung passieren häufig, deshalb gehört die Kontrolle der Datenaufbereitung zum Pflichtprogramm. Im konkreten Fall werden dazu die Häufigkeitstabellen der Ursprungsvariable (sgnptit) sowie der neu erstellten Variable (petition) angefordert und die Fallzahlen der Kategorien verglichen.

  • Beispiel 2: Im zweiten Beispiel wird die Variable actrolga, die die aktive politische Rolle des Befragten erfasst, umkodiert. Bei der Ursprungsvariable hatten die Befragten fünf gültige Antwortmöglichkeiten (in der deutschen Sprachversion): überhaupt nicht fähig (1), ein bisschen fähig (2), ziemlich fähig (3), sehr fähig (4) und voll und ganz fähig (5). Bei der neuen Variable pol_rolle werden nur drei Gruppen unterschieden: nicht/wenig fähig (0), ziemlich fähig (1) und sehr/voll fähig (2).

  • Die Kodierung der Werte erfolgt wieder durch das rec-Argument. Dabei werden Wertebereiche mit einem Doppelpunkt (:) aufgeführt. Die Werte 1 bis 2 (1:2) erhalten den Wert 0, der Wert 3 wird zu 1 kodiert und die Werte 4 bis 5 werden zu 2 kodiert. Fehlende Werte erhalten wieder den Wert NA. Die Wertelabels könnten jeweils mit eckigen Klammern direkt in die rec-Zeile aufgenommen werden, aber aus Layoutgründen werden die Wertelabels in diesem Beispiel mit dem Argument val.labels aufgenommen. Die einzelnen Beschriftungen werden in der korrekten Reihenfolge aufgenommen. Mit dem Argument var.label wird das Variablenlabel vergeben, mit dem Argument as.num=FALSE wird die Variable als Faktor spezifiziert. Abschließend wird die Kodierung der Variable überprüft. Dazu werden die Häufigkeitstabellen der Ursprungsvariable (actrolga) und der neuen Variable (pol_rolle) mit der frq-Funktion aus dem sjmisc-Paket aufgerufen

  • Datenaufbereitung: actrolga:

    frq(ess9de_m1, actrolga) ess9de_m1$pol_rolle <- rec(ess9de_m1$actrolga,

    rec = "1:2=0; 3=1; 4:5=2; NA=NA",

    val.labels = c("nicht/wenig faehig", "ziemlich faehig", "sehr/voll faehig"),

    var.label = "Aktive politische Rolle",

    as.num = FALSE)

    frq(ess9de_m1, actrolga, pol_rolle)

  • Die rec-Funktion bietet zahlreiche Kodierungsmöglichkeiten, die an dieser Stelle nicht alle vorgestellt werden können. In folgender Tabelle werden einige ausgewählte Möglichkeiten illustriert. Für die praktische Arbeit sei auf die Dokumentation der Funktion verwiesen (?rec).


    Beispiel

    Beschreibung

    1=0; 2=1

    Die Werte werden einzeln umkodiert. Der Wert 1 wird zum Wert 0 umkodiert, der Wert 1 wird zum Wert 1 umkod

    1,2=0; 3,4=1

    Mehrere Werte werden umkodiert. Die Werte 1 und 2 werden zum Wert 0 umkodiert, die Werte 3 und 4 werden zum Wert 1 umkodiert

    1:4=0; 5:8=1

    Wertebereiche werden umkodiert. Die Werte 1 bis 4 werden zum Wert 0 umkodiert, die Werte 5 bis 8 werden zum Wert 1 umkodiert.

    1=0; else=1

    Der Wert 1 wird zum Wert 0 umkodiert, alle anderen Werte (else) erhalten den Wert 1. Das else-Argument sollte das letzte Argument im rec-Argument sein.

    1=0; else=copy

    Der Wert 1 wird zum Wert 0 umkodiert. Alle anderen Werte werden unverändert übernommen (kopiert)


Variablen zusammenfassen


  • Bei den Beispielen in Abschnitt 4.5.1 wurden die Werte einer Variable geändert, in diesem Abschnitt werden Informationen mehrerer Variablen in einer neuen Variable zusammengefasst. Der Beispieldatensatz enthält die Variablen ppltrst, pplfair und pplhlp, die in der empirischen Sozialforschung häufig genutzt werden, um das soziale Vertrauen zu erfassen. Die einzelnen Variablen wurden jeweils auf einer 11-Punkt-Skala (0 bis 10) erhoben, bei denen höhere Werte auf ein größeres soziales Vertrauen hindeuten:

    • ppltrst: Glauben Sie, dass man den meisten Menschen vertrauen kann, oder dass man im Umgang mit anderen Menschen nicht vorsichtig genug sein kann?

    • – pplfair: Glauben Sie, dass die meisten Menschen versuchen, Sie auszunutzen, wenn sie die Gelegenheit dazu haben, oder versuchen die meisten Menschen, sich fair zu verhalten?

    • – pplhlp: Und glauben Sie, dass die Menschen meistens versuchen, hilfsbereit zu sein, oder dass die Menschen meistens auf den eigenen Vorteil bedacht sind?

  • Aus Gründen der besseren Übersicht wird zunächst ein Teildatensatz mit dem Namen „vertrauen“ erstellt, der lediglich die drei Variablen ppltrst, pplfair und pplhlp enthält. Dies ist mit der select-Funktion aus dem dplyr-Paket möglich. Nutzen Sie die View-Funktion um sich das neue Objekt anzuschauen. Mit der row_sums-Funktion aus dem sjmisc-Paket wird anschließend eine Summenvariable erstellt. Dabei werden die Werte der drei Variablen einfach addiert. Im Skript im Kasten finden Sie zwei Beispiele. Bei der Variante 1 wird die Summe der drei Variablen nur berechnet, wenn bei allen drei Variablen auch gültige Werte (also kein NA) vorliegen (n=3). Bei der zweiten Variante wird der Summenwert auch berechnet, wenn nur ein gültiger Wert vorliegt.

  • Variablen zusammenfassen (Summe der Variablenwerte):

    vertrauen <- select(ess9de_m1, ppltrst, pplfair, pplhlp)

    View(vertrauen)

    # Variante 1

    vertrauen <- row_sums(vertrauen, ppltrst, pplfair, pplhlp,

    n = 3,

    var = "vertrauen1",

    append = TRUE)

    # Variante 2

    vertrauen <- row_sums(vertrauen, ppltrst, pplfair, pplhlp,

    n = 1,

    var = "vertrauen2",

    append = TRUE)

    View(vertrauen)

  • Mit dem Argument var wird der Variablennamen vergeben. Mit dem Argument append=TRUE wird R angewiesen, die neue Variable zum Objekt vertrauen hinzuzufügen. Mit View(vertrauen) wird die Datenansicht geöffnet. Im konkreten Beispiel führen die beiden Varianten praktisch zu vergleichbaren Ergebnissen, da die Variablen nur wenige fehlende Werte haben.

  • Die neuen Variablen vertrauen1 und vertrauen2 haben Wertebereiche von 0 bis 30. Befragte, die bei allen drei Variablen den Wert 0 angegeben haben, haben den Wert 0. Personen, die bei allen drei Fragen den Wert 10 angegeben haben, haben den Wert 30. Der Wertebereich der neuen Variable unterscheidet sich damit vom ursprünglichen Wertebereich (0 bis 10). In der empirischen Praxis wird deshalb häufig nicht die Summe, sondern das arithmetische Mittel der Variablen berechnet. Im ersten Schritt werden die Werte zusammengezählt und die Summe dann durch die Anzahl der (gültigen) Werte dividiert. Dieses Vorgehen wird durch die Funktion row_means des sjmisc-Pakets umgesetzt.

  • Im Kasten ist das Skript für zwei Varianten dokumentiert. Die Argumente der row_sums- und der row_means-Funktion sind gleich. Mit n wird die Anzahl der gültigen Werte festgelegt, die erforderlich sind, um das arithmetische Mittel zu berechnen, mit var wird der Variablenname festgelegt und mit append wird R angewiesen, die Variablen an den bestehenden Datensatz anzuhängen. Mit View(vertrauen) wird die Datenansicht geöffnet.

  • Variablen zusammenfassen (Mittelwert der Variablenwerte):

    # Variante 1

    vertrauen <- row_means(vertrauen, ppltrst, pplfair, pplhlp,

    n = 3,

    var = "vertrauen10",

    append = TRUE)

    # Variante 2 vertrauen <- row_means(vertrauen, ppltrst, pplfair, pplhlp,

    n = 1,

    var = "vertrauen20",

    append = TRUE)

    View(vertrauen)

  • Insbesondere die row_means-Funktion bietet sich an, um die Variablen zusammenzufassen. Im konkreten Fall wurden die drei Variablen ppltrst, pplfair und pplhlp zu einer neuen Variablen vertrauen verdichtet. Bei der Darstellung wurde vorausgesetzt, dass die jeweiligen Items auch geeignet sind, das jeweilige Konzept (hier: Soziales Vertrauen) abzubilden. In der empirischen Praxis muss diese Eignung allerdings geprüft werden. Im konkreten Fall wäre die (explorative) Faktorenanalyse ein geeignetes Prüfverfahren. Im Rahmen des Moduls M1 wird die explorative Faktorenanalyse aber nicht behandelt (siehe für eine Einführung Schnaudt 2020; Mayer 2020). In R kann eine explorative Faktorenanalyse mit dem Paket psych durchgeführt werden


Werte zählen


  • Der Beispieldatensatz ess9de_m1 enthält mehrere Items, die die politische Beteiligung der Bürgerinnen und Bürger erfassen. Aus Gründen der besseren Übersicht beschränken wir uns an dieser Stelle auf drei Items: contplt (Politiker kontaktieren), badge (Abzeichen tragen) und sgnptit (Unterschriftenliste unterschreiben). Die drei Items sind einheitlich kodiert. Befragte, die einen Politiker kontaktiert, ein Abzeichen getragen bzw. eine Unterschriftenliste unterschrieben haben, haben den Wert 1 erhalten (ja). Die anderen Befragten haben den Wert 2 erhalten (nein). 37,9 Prozent der Befragten haben sich an einer Unterschriftenaktion beteiligt, 18,8 Prozent der Befragten haben einen Politiker kontaktiert und 5,6 Prozent ein Abzeichen getragen. Eine mögliche Frage könnte sein, wieviel Prozent der Befragten alle drei Beteiligungsformen oder keine Beteiligungsform genutzt haben. Für diesen Zweck müsste die Häufigkeit der Antworten in den drei Variablen gezählt werden. Dies ist mit der Funktion row_count möglich

  • Mit dem Skript im Kasten wird R angewiesen, die Häufigkeit des Werts 1 in den Variablen contplt, badge und sgnptit zu zählen (count). Das Ergebnis wird in der Variable beteiligung_gesamt gespeichert (var) und die Variable wird an das Objekt beteiligung angehängt. Mit der View-Funktion wird das Datenfenster geöffnet, mit der frq-Funktion wird eine Häufigkeitstabelle der neuen Variable beteiligung_gesamt ausgegeben. 53,5 Prozent der Befragten habe keine der drei Beteiligungsmöglichkeiten in den vergangenen zwölf Monaten genutzt, 1,7 Prozent der Personen haben alle drei Partizipationsformen genutzt.

  • Variablenwerte zählen:

    beteiligung <- select(ess9de_m1, contplt, badge, sgnptit)

    View(beteiligung)

    beteiligung <- row_count(beteiligung, contplt, badge, sgnptit,

    count = 1,

    var = "beteiligung_gesamt",

    append = TRUE)

    View(beteiligung)

    frq(beteiligung, beteiligung_gesamt)




Labels konvertieren


  • Bei der Arbeit mit dem sjmisc-Paket wurden drei Informationen einer Variable unterschieden: Variablenname, Variablenlabel und Wertelabels:

    • Der Variablenname ist der Name einer Variable. Ein Variablenname muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern, den Unterstrich und den Punkt enthalten. In der Praxis haben sich kurze, aber aussagekräftige Variablennamen bewährt. Aus Kompatibilitätsgründen sollten Sonderzeichen und Umlaute nicht verwendet werden.

    • Bei einem Variablenlabel handelt es sich um ein Etikett, das an die Variable „geheftet“ wird. Ein Variablenlabel dient der näheren Beschreibung des Inhalts einer Variable.

    • Die Wertelabels verknüpfen die Werte (Zahlen) einer Variablen mit inhaltlichen Informationen. Bei der erstellten Variable petition wurde der Wert 0 mit dem Wertelabel „nein“ und der Wert 1 mit dem Wertelabel „ja“ verknüpft. Wertelabels „übersetzen“ die Werte einer Variable in inhaltliche Angaben

  • Die Funktion frq aus dem sjmisc-Paket gibt die Variablen- und Wertelabels einer Variable aus, aber insbesondere ältere R-Funktionen können Variablen- und Wertelabels nicht ausgeben bzw. darstellen. Zur Illustration ein Beispiel: Mit dem Skript im Kasten wird eine Häufigkeitstabelle der Variable petition einmal mit der frq-Funktion und einmal mit der table-Funktion ausgegeben. Bei der frq-Funktion wird das Variablenlabel (Teilnahme an Petition) und die Wertelabels (0 = nein, 1 = ja) dargestellt, bei der table-Funktion werden lediglich die Werte 0 und 1 ausgewiesen. Die inhaltliche Bedeutung der Zahlen 0 und 1 muss bekannt sein, um die Ausgabe der table-Funktion inhaltlich interpretieren zu können.

  • Häufigkeitstabelle der Variable petition: frq(ess9de_m1$petition)

    table(ess9de_m1$petition)

  • Das Paket sjlabelled stellt Funktionen bereit, die es ermöglichen, die Wertelabels auch bei älteren R-Funktionen zu nutzen. Mit dem Skript im Kasten wird die neue Variable petition.f erstellt, die auf der Ursprungsvariable petition basiert. Mit der Funktion as_label werden die Wertelabels als neue Werte festgelegt. Bei der Anforderung der Häufigkeitstabelle mit der table-Funktion werden anstelle der Werte 0 und 1 jetzt die Wertelabels ausgewiesen (nein und ja).

  • Wertelabels konvertieren:

    ess9de_m1$petition.f <- as_label(ess9de_m1$petition)

    table(ess9de_m1$petition.f)

  • Im folgenden Kasten ist ein zweites Beispiel mit der Variable pol_rolle dokumentiert, die die (subjektive) politische Rolle erfasst. Zur Erinnerung: Bei der aufbereiteten Variable pol_rolle werden drei Gruppen unterschieden (in Klammern die Werte): nicht/wenig fähig (0), ziemlich fähig (1) und sehr/voll fähig (2). Mit der frq-Funktion wird eine Häufigkeitstabelle angefordert, die die Werte und die Wertelabels ausweist. Dagegen weist die table-Funktion nur die Werte 0, 1 und 2 aus.

  • Häufigkeitstabelle der Variable pol_rolle: frq(ess9de_m1$pol_rolle)

    table(ess9de_m1$pol_rolle)

  • Mit der as_label-Funktion können die Wertelabels auch bei dieser Variable konvertiert werden. Mit dem Skript im Kasten wird eine neue Variable pol_rolle.f erstellt, die auf der Ursprungsvariable pol_rolle basiert. Dabei wird die as_label-Funktion auf die Variable angewendet. Beim Aufruf der Häufigkeitstabelle mit der table-Funktion werden anstelle der Werte jetzt die einzelnen Kategorien aufgeführt

  • Wertelabels konvertieren:

    ess9de_m1$pol_rolle.f <- as_label(ess9de_m1$pol_rolle)

    table(ess9de_m1$ pol_rolle.f)

  • Die Konvertierung der Wertelabels ist ein optionaler Schritt der Datenaufbereitung, der nicht in allen Situationen erforderlich ist. Gelegentlich bietet die Konvertierung eine einfachere Interpretation der Daten, aber letztlich ist sie bei der Kenntnis der Bedeutung der Werte auch nicht erforderlich. Ältere Funktionen funktionieren ggf. nur mit ungelabelten Variablen, sodass diese mit der drop_labels- bzw. der remove_all_labels-Funktion entfernt werden müssen.


Häufigkeitstabellen


  • Eine Häufigkeitstabelle gibt eine Übersicht über die Merkmalsausprägungen (Kategorien) einer Variable und zeigt, wie häufig jede einzelne Ausprägung vorkommt. Eine einfache Häufigkeitstabelle kann in R mit der table-Funktion angefordert werden. Im Beispiel wird R aufgefordert, für die Variable polintr (Politisches Interesse) eine einfache Häufigkeitstabelle auszugeben.In der Voreinstellung werden lediglich die gültigen Werte ausgegeben. Für die Berücksichtigung der fehlenden Werte muss die table-Funktion mit dem Argument (useNA="always") ergänzt werden. In unserem Fall liegt lediglich eine fehlende Angabe vor.

  • Häufigkeitstabellen (Base R): table(ess9de_m1$polintr)

    table(ess9de_m1$polintr, useNA="always")

  • Die Häufigkeitstabelle informiert lediglich über die absoluten Häufigkeiten. Es fehlen Angaben zu den relativen, prozentualen und kumulierten Häufigkeiten. Zwar bietet R die Möglichkeit, die Tabellenausgabe sehr individuell zu gestalten, aber dadurch ist die Vorgehensweise etwas aufwändiger. Anhand der Variable polintr wird die Vorgehensweise schrittweise erläutert. Dabei werden mehrere Zwischenobjekte erstellt, die am Ende zu einer neuen Tabelle (tabelle_polintr) zusammengefügt werden.

  • Das Objekt absolut_polintr enthält die einfache Häufigkeitstabelle ohne fehlende Werte, die mit der table-Funktion erstellt wird. Mit der Funktion prop.table wird eine Tabelle mit den relativen Häufigkeiten erstellt, die auf der einfachen Häufigkeitstabelle basiert. Im nächsten Schritt (prozent_polintr) werden die Informationen der Tabelle mit den relativen Häufigkeiten genutzt, um eine Häufigkeitstabelle mit Prozentangaben zu generieren. Auf Grundlage dieser Tabelle wird eine Tabelle mit den kumulierten Prozenten erstellt (kumuliert_polintr). Mit der cbind-Funktion werden die Einzeltabellen (absolut_polintr, prozent_polintr, kumuliert_polintr) zu einem neuen Objekt (tabelle_polintr) verbunden. Anschließend werden mit der Funktion addmargins die Randsummen der Tabelle ergänzt. Ohne weitere Angabe werden die Spalten- als auch die Zeilensummen hinzugefügt. Mit der Ergänzung 1 (Spalten) und 2 (Zeilen) können diese Angaben jedoch auch einzeln angewählt werden. Für unsere Tabelle sind nur die Spaltensummen sinnvoll

  • Häufigkeitstabellen (Base R):

    absolut_polintr <- table(ess9de_m1$polintr)

    relativ_polintr <- prop.table(absolut_polintr)

    prozent_polintr <- round(100*prop.table(relativ_polintr), 2)

    kumuliert_polintr <- cumsum(prozent_polintr)

    tabelle_polintr <- cbind(absolut_polintr, prozent_polintr, kumuliert_polintr)

    addmargins(tabelle_polintr, 1)

  • Die individuell erstellte Häufigkeitstabelle (tabelle_polintr) enthält Angaben zu den absoluten (absolut_polintr), prozentualen (prozent_polintr) und kumulierten (kumuliert_polintr) Häufigkeiten. Die Erstellung individueller Häufigkeitstabellen ist mühsam, fehleranfällig und in vielen Fällen auch nicht erforderlich. Mit dem R-Paket descr und der Funktion freq können Häufigkeitstabellen erstellt werden, die absolute und prozentuale Häufigkeiten enthalten. Außerdem wird in der Voreinstellung auch ein Säulendiagramm ausgegeben. Vor der Nutzung der Funktion muss das Paket aber installiert und geladen sein.

  • Die Ausgabe des Säulendiagramms kann mit dem Argument plot=FALSE unterdrückt werden. In der Voreinstellung werden bei der freq-Funktion bis zu fünf Nachkommastellen ausgegeben. Mit der Funktion round kann die Anzahl der Nachkommastellen individuell angepasst werden. Im Beispiel werden zwei Nachkommastellen angefordert.

  • Häufigkeitstabellen (Paket: descr): freq(ess9de_m1$polintr)

    freq(ess9de_m1$polintr, plot=FALSE)

    round(freq(ess9de_m1$polintr, plot=FALSE), 2)

  • Eine Alternative der freq-Funktion aus dem descr-Paket ist die frq-Funktion im Paket sjmisc. Die Funktion gibt auch die Wertelabels der einzelnen Variablen aus, sodass auch die inhaltliche Interpretation erleichtert wird. 24,1 Prozent der Befragten interessieren sich sehr für Politik (Wert 1), 29,3 Prozent interessieren sich kaum für Politik (Wert 3). Mit dem Argument out kann die Häufigkeitstabelle auch im Viewer dargestellt werden. Dabei wird das sjPlot-Paket genutzt.

  • Häufigkeitstabellen (Paket: sjmisc und sjPlot): frq(ess9de_m1$polintr)

    frq(ess9de_m1$polintr, out = "viewer")

  • Mit dem frq-Befehl aus dem sjmisc-Paket können auch mehrere Häufigkeitstabellen ausgegeben werden. Dafür wird in der Klammer erst der Datensatz genannt (ess9de_m1), anschließend werden die Variablen einzeln aufgeführt und jeweils mit einem Komma getrennt. Mit dem Skript im Kasten werden die Häufigkeitstabellen der Variablen ppltrst, pplfair und pplhlp angefordert, die in der empirischen Sozialforschung genutzt werden, um das „soziale Vertrauen“ einer Person empirisch zu erfassen. Mit dem Argument out werden die Häufigkeitstabellen wieder im Viewer ausgegeben

  • Mehrere Häufigkeitstabellen (Paket: sjmisc und sjPlot):

    frq(ess9de_m1, ppltrst, pplfair, pplhlp)

    frq(ess9de_m1, ppltrst, pplfair, pplhlp, out = "viewer")



Lagemaße


  • Lagemaße beschreiben das Zentrum einer Verteilung. Besonders bekannte Lagemaße sind Modus (auch Modalwert genannt), Median und arithmetisches Mittel. Der Modus ist der in einer Verteilung am häufigsten vorkommende Wert. Der Modus muss nicht berechnet, sondern kann in einer Häufigkeitstabelle abgelesen werden. Der Median (auch Zentralwert genannt) ist der mittlere Wert eines geordneten Datensatzes. 50 Prozent der Werte liegen „vor“ und 50 Prozent liegen „nach“ dem Median. Der Median wird auch 50. Perzentil genannt. Das arithmetische Mittel ist der Durchschnittswert, also die Summe aller (gültigen) Werte dividiert durch die Anzahl dieser Werte.

  • Mit R können Median und arithmetisches Mittel einfach berechnet werden. Im Kasten wird exemplarisch der Median (51 Jahre) und das arithmetische Mittel (49,65 Jahre) des Alters der Befragten berechnet. Wichtig ist das Argument na.rm=TRUE, da sonst aufgrund fehlender Werte keine Berechnung erfolgt (TRUE kann dabei durch T abgekürzt werden). Neben Median und arithmetischem Mittel können mit R auch Minimum, Maximum, Spannweite und Quantile berechnet werden. Der jüngste Befragte ist 15 Jahre alt, der älteste Befragte ist 90 Jahre alt.

  • Univariate Statistiken und Lagemaße: median(ess9de_m1$alter, na.rm=TRUE)

    mean(ess9de_m1$alter, na.rm=TRUE)

    min(ess9de_m1$alter, na.rm=TRUE)

    max(ess9de_m1$alter, na.rm=TRUE)

    range(ess9de_m1$alter, na.rm=TRUE)

    quantile(ess9de_m1$alter, na.rm=TRUE)

  • R bietet keine Möglichkeit, den Modus direkt auszugeben. Dieser kann aber über eine Häufigkeitstabelle abgelesen werden. Beim Alter ist dies allerdings etwas mühsam, da es viele Kategorien gibt. Mit dem Paket DescTools ist auch die Anforderung des Modus möglich. Beim Alter liegt der Modus bei 63. Neben dem Modus werden auch die absoluten Häufigkeiten mitgeteilt. 58 Befragte sind 63 Jahre alt.

  • Modus (Paket: DescTools):

    frq(ess9de_m1$alter) # Funktion aus sjmisc-Paket

    Mode(ess9de_m1$alter, na.rm=TRUE) # Funktion aus DescTools-Paket


Streuungsmaße


  • Trotz gleicher Lagemaße (z.B. gleicher Median und/oder gleiches arithmetisches Mittel) können Verteilungen von Merkmalen völlig unterschiedlich aussehen. Deshalb sind Streuungsmaße erforderlich, die die Variation einer Verteilung beschreiben. Bekannte Streuungsmaße sind Varianz und Standardabweichung. Die Varianz ist die summierte Abweichung der Werte um das auf der Basis der Werte berechnete arithmetische Mittel. Da die Summe der Abweichungen vom arithmetischen Mittel Null ist, werden die Abweichungen der einzelnen Werte quadriert. Dadurch wird die gegenseitige Aufhebung von positiven und negativen Zahlen verhindert. Aus der Varianz lässt sich die Standardabweichung berechnen (Quadratwurzel der Varianz), die die durchschnittliche Streuung um das arithmetische Mittel angibt.

  • Bei Mittag (2017, S. 69-70) findet sich die wichtige Unterscheidung zwischen der empirischen und der korrigierten Varianz bzw. Standardabweichung. Bei der empirischen Varianz (s²) wird die summierte Abweichung der Werte durch die Anzahl der Werte (n) dividiert. Bei der korrigierten Varianz (s*²) wird anstelle von n durch n–1 dividiert

  • Empirische Varianz: s² = ∑n1=1 (xi−x quer)²/ n

  • Korrigierte Varianz: s*² = ∑n1=1 (xi−x quer)² / n−1

  • Die Entscheidung für die Berechnung der empirischen oder der korrigierten Varianz bzw. Standardabweichung ist von der Datengrundlage abhängig. Bei einer Vollerhebung (z.B. alle Schüler einer Schule) wird die empirische Varianz bzw. Standardabweichung berechnet, bei einer Stichprobe (z.B. zufällige Auswahl der Schüler einer Schule) wird die korrigierte Varianz bzw. Standardabweichung berechnet. In den Sozialwissenschaften dominieren Teilerhebungen (Stichproben). Vermutlich deshalb berechnet R auch die korrigierte Varianz bzw. Standardabweichung. Die Unterschiede zwischen der empirischen und der korrigierten Varianz bzw. Standardabweichung sind bei einer großen Fallzahl auch vernachlässigbar. Bei einer kleinen Fallzahl (z.B. n = 10) sind Unterschiede bzw. unterschiedliche Ergebnisse sichtbar

  • Mit den in R implementierten Funktionen var und sd werden die korrigierte Varianz und die korrigierte Standardabweichung des Alters angefordert

  • Korrigierte Varianz und korrigierte Standardabweichung:

    var(ess9de_m1$alter, na.rm=TRUE)

    sd(ess9de_m1$alter, na.rm=TRUE)

  • Die Berechnung der Streuungsmaße ist auch über die Funktionen des DescTools-Pakets möglich. Der Funktionsname ist identisch, nur die Buchstaben werden teilweise großgeschrieben.

  • Korrigierte Varianz und korrigierte Standardabweichung:

    Var(ess9de_m1$alter, na.rm=TRUE)

    SD(ess9de_m1$alter, na.rm=TRUE)


Formmaße


  • Die Form einer Verteilung wird mit der Schiefe (engl. skewness) und der Wölbung (engl. kurtosis) beschrieben. Beide Maße geben die Abweichung einer Verteilung von der Normalverteilung an. Bei der Normalverteilung handelt es sich um eine wichtige Verteilung der Inferenzstatistik, die nach dem Mathematiker Carl Friedrich Gauß häufig auch als Gauß-Verteilung bezeichnet wird. Die Normalverteilung lässt sich wie folgt charakterisieren: Die Verteilung ist symmetrisch. Die Häufigkeiten der Werte nehmen links und rechts gleichermaßen – also wieder symmetrisch – vom arithmetischen Mittel ab (Völkl und Korb 2018, S. 117-120). Durch die symmetrische Form der Normalverteilung sind Modus, Median und arithmetisches Mittel identisch.

  • Empirische Verteilungen können horizontal und/oder vertikal von der Normalverteilung abweichen. Die Schiefe ist ein Maß für die horizontale (waagerechte) Abweichung einer Verteilung von der Normalverteilung. Der höchste Punkt einer Verteilung befindet sich nicht mehr in der Mitte, sondern links oder rechts von der Mitte. Die Wölbung ist ein Maß für die vertikale (senkrechte) Abweichung einer Verteilung von der Normalverteilung. Sie informiert, ob eine Verteilung flach oder hochgipflig ist

  • Die Kenntnis der Schiefe und Wölbung einer Verteilung ist wichtig, da bestimmte statistische Verfahren eine normalverteilte Variable voraussetzen. Bei den meisten Verfahren sind geringe Abweichungen zwar unproblematisch, aber bei starken Abweichungen müssen die Variablen vor der Analyse transformiert werden

  • Für die Berechnung der Schiefe und Wölbung wurden Maßzahlen entwickelt (zur Interpretation siehe Tabelle 11). Sind die Werte jeweils 0, dann ist die Abweichung von der Normalverteilung gleich 0 (Schendera 2015, S. 133). Ein Wert von kleiner 0 deutet auf eine linksschiefe oder auch rechtsgipflige Verteilung hin, ein Wert von größer 0 deutet auf eine rechtsschiefe oder auch linksgipflige Verteilung hin. Je größer der Wert, desto stärker ist die Schiefe ausgeprägt. Nach Schendera (2015, S. 134) werden Schiefe-Werte, deren Beträge größer oder gleich 1 sind, als deutliche Abweichung vom symmetrischen Verlauf der Normalverteilung interpretiert. Bei einem Kurtosis-Wert von 0 entspricht die Verteilung exakt der Wölbung einer Normalverteilung. Werte kleiner als 0 deuten auf einen flacheren Verlauf und Werte größer als 0 auf eine steilere Verteilung hin


    Wert

    Schiefe

    Wölbung

    <0

    linksschief (rechtsgipflig)

    flachgipflig

    0

    symmetrisch

    Normalverteilung

    >0

    rechtsschief (linksgipflig)

    hochgipflig

  • Für die Berechnung von Schiefe und Wölbung sind Zusatzpakete erforderlich. Die Pakete Desc-Tools und psych enthalten Funktionen, um die Schiefe und die Wölbung einer Verteilung zu berechnen. In beiden Fällen müssen zunächst die entsprechenden Pakete installiert und geladen werden, ehe die entsprechenden Funktionen zur Verfügung stehen. Im DescTools-Paket wird die Schiefe mit der Skew-Funktion und die Wölbung mit der Kurt-Funktion angefordert.

  • Formmaße (Paket: DescTools): Skew(ess9de_m1$alter, na.rm=TRUE)

    Kurt(ess9de_m1$alter, na.rm=TRUE)

  • Im Psych-Paket wird die Schiefe mit der skew-Funktion und die Wölbung mit der kurtosi-Funktion berechnet. Bei der Schiefe unterscheiden sich die Funktionsnamen lediglich durch das große S.

  • Formmaße (Paket: psych): skew(ess9de_m1$alter, na.rm=TRUE)

    kurtosi(ess9de_m1$alter, na.rm=TRUE)


Kompakte Übersichten (Univariate Datenanalyse)


  • In den bisherigen Abschnitten wurden die Lage-, Streuungs- und Formmaße für eine Variable einzeln angefordert. In diesem Abschnitt werden Möglichkeiten vorgestellt, um sich mehrere statistische Informationen für eine Variablen ausgeben zu lassen. Mit der summary-Funktion werden gleich mehrere univariate Statistiken (z.B. Median und arithmetisches Mittel) berechnet. Noch umfassender sind die Funktionen Desc aus dem DescTools-Paket und describe aus dem psych-Paket, die die Ausgabe zahlreicher univariater Statistiken in einer Ausgabe ermöglichen. Bei der Desc-Funktion wird zusätzlich noch eine Grafik ausgegeben

  • Univariate Statistiken im Überblick: summary(ess9de_m1$alter)

    Desc(ess9de_m1$alter) # Paket: DescTools

    describe(ess9de_m1$alter) # Paket: psych


    Univariate Statistiken nach Gruppen:

  • Bei der bivariaten Datenanalyse werden häufig deskriptive Informationen nach Gruppen benötigt, zum Beispiel die mittlere Lebenszufriedenheit nach dem Bildungsniveau. Mit der describeBy-Funktion aus dem psych-Paket können solche Angaben einfach berechnet werden. Nach der Funktion wird zunächst die Variable genannt, für die die deskriptiven Statistiken berechnet werden sollen (hier: stflife). Als zweite Variable wird die Gruppenvariable aufgeführt (hier: bildung).

  • Univariate Statistiken nach Gruppen (psych-Paket):

    describeBy(ess9de_m1$stflife, ess9de_m1$bildung)

  • Eine alternative Möglichkeit bietet das sjmisc-Paket in Kombination mit den dplyr-Funktionen. Dabei wird zuerst der Datensatz genannt (ess9de_m1), ehe mit der Funktion group_by die Gruppenvariable (hier: bildung) spezifiziert wird. Im letzten Schritt wird R explizit angewiesen, aus dem sjmisc-Paket die Funktion descr auf die Variable stflife anzuwenden. Die explizite Ansprache des Paketnamens ist an dieser Stelle erforderlich, da die Funktion descr auch im Paket descr enthalten ist. R greift standardmäßig auf die Funktion zurück, die zuletzt geladen wurde. Um explizit die Funktion aus dem sjmisc-Paket anzuwenden wird der Paketname mit zwei Doppelpunkten aufgeführt (sjmisc::). Nach den zwei Doppelpunkten wird die Funktion genannt, in Klammern wird die Variable aufgeführt (stflife). Mit der descr-Funktion aus dem sjmisc-Paket können die Ergebnisse auch im Viewer dargestellt werden. Dazu wird das Argument out aufgenommen.

  • Univariate Statistiken nach Gruppen (Pakete: sjmisc und dplyr):

    ess9de_m1 %>%

    group_by(bildung) %>%

    sjmisc:: descr(stflife)

    ess9de_m1 %>%

    group_by(bildung) %>%

    sjmisc:: descr(stflife, out = "viewer")



Kreuztabellen


  • Kreuztabellen sind eine einfache und anschauliche Möglichkeit, die Beziehung von zwei Merkmalen in den Blick zu nehmen. Neben absoluten Häufigkeiten können auch die Anteile der einzelnen Häufigkeiten (Prozentwerte) berechnet werden. Kreuztabellen können in R mit der table-Funktion berechnet werden. In der Klammer werden dabei die Variablen aufgeführt. Die erste Variable wird in den Zeilen abgetragen, die zweite Variable in den Spalten. Wann immer es sinnvoll ist, von abhängiger Variable und unabhängiger Variable zu sprechen, dann sollte die aV als erste Variable und die uV als zweite Variable genannt werden.

  • Mit dem Skript im Kasten wird eine Kreuztabelle der Wahlbeteiligung (wahl) in Abhängigkeit vom Bildungsniveau (bildung) erstellt. Bei der Variable wahl haben Personen, die sich nicht an der Wahl beteiligen, den Wert 0 erhalten. Befragte, die sich an der Wahl beteiligen, haben den Wert 1 erhalten. Die Wahlbeteiligung stellt dabei die abhängige Variable dar. Die unabhängige Variable ist das Bildungsniveau. Im konkreten Fall werden dabei drei Bildungsgruppen unterschieden: geringe (0), mittlere (1) und hohe Bildung (2).

  • Kreuztabelle (Base R):

    table(ess9de_m1$wahl, ess9de_m1$bildung)

  • Die table-Funktion gibt lediglich absolute Werte aus. 113 Personen, die eine geringe Bildung haben, haben sich nicht an der Wahl beteiligt. 849 Befragte, die eine hohe Bildung haben, haben sich an der Wahl beteiligt

  • Eine informativere Kreuztabelle bietet die Funktion flat_table aus dem sjmisc-Paket. Dabei wird in der Klammer zunächst der Datensatz genannt (ess9de_m1), ehe dann die Variablen aufgeführt werden. Mit dem margin-Argument werden die Prozentangaben angefordert. Mit col werden die Spaltenprozente berechnet. Dabei werden die absoluten Werte einer Zelle durch die Spaltensumme dividiert und anschließend mit 100 multipliziert (Beispiel: (113 / 524) * 100 = 21,56 Prozent).

  • Kreuztabelle (Paket: sjmisc): flat_table(ess9de_m1, wahl, bildung,

    margin = c("col")) # Anforderung der Spaltenprozente

  • Anstelle der Spaltenprozente können auch die Zeilenprozente (row) oder die Gesamtprozente (cell) berechnet werden. Im Beispiel bieten die Spaltenprozente eine angemessene Interpretation. Die Wahlbeteiligung bei Befragten mit geringer Bildung liegt bei 78,4 Prozent, bei mittlerer Bildung bei 86,1 Prozent und bei hoher Bildung bei 94,7 Prozent. Je höher die Bildung, desto wahrscheinlicher der Urnengang. Sehr umfangreiche Kreuztabellen können mit der CrossTable-Funktion aus dem descr-Paket berechnet werden. Dabei werden in der Klammer wieder die Variablen aufgeführt. In der Voreinstellung werden die absoluten Werte, der Chi-Quadrat-Wert für jede Zelle, die Zeilenprozente, die Spaltenprozente und die Gesamtprozente ausgegeben.

  • Kreuztabelle (Paket: descr): CrossTable(ess9de_m1$wahl, ess9de_m1$bildung)

  • Bei den Zeilenprozenten wird die absolute Häufigkeit der Zelle durch die entsprechende Zeilensumme dividiert (Beispiel: 113 / 257 = 0,440). Bei den Gesamtprozenten wird die absolute Häufigkeit der Zelle durch die Gesamtsumme dividiert (113 / 2112 = 0,054). Für die Berechnung der Spaltenprozente wird die absolute Häufigkeit durch die entsprechende Spaltensumme dividiert (113 / 524 = 0,216). Die Berechnung des Chi-Quadrat-Werts wird bei der Berechnung von Cramer’s V illustriert.

  • Die Ausgabe der Kreuztabelle kann durch Argumente angepasst werden. Im zweiten Beispiel wird die Ausgabe der Gesamtprozente (prop.t), der Zeilenprozente (prop.r) und der einzelnen Chi-Quadrat-Anteile (prop.chisq) unterdrückt, sodass nur die absoluten Werte und die Spaltenprozente (prop.c) dargestellt werden. Die Möglichkeiten der CrossTable-Funktion sind sehr umfangreich, eine Übersicht der verschiedenen Argumente ist über ?CrossTable verfügbar.

  • Kreuztabelle (Paket: descr): CrossTable(ess9de_m1$wahl, ess9de_m1$bildung,

    prop.c = TRUE,

    prop.t = FALSE,

    prop.r = FALSE,

    prop.chisq = FALSE)

  • Eine weitere Alternative für die Erstellung von Kreuztabellen bietet die Funktion tab_xtab aus dem sjPlot-Paket. Bei dieser Funktion werden die Kreuztabellen nicht in der Console ausgegeben, sondern im Viewer (rechtes unteres Fenster). Ohne weitere Argumente werden die absoluten Werte sowie die Spalten- und Zeilensummen ausgegeben.

  • Kreuztabelle (Paket: sjPlot):

    tab_xtab(ess9de_m1$wahl, ess9de_m1$bildung)

  • Die Ausgabe der Kreuztabelle mit der Funktion tab_xtab kann ebenfalls durch Argumente angepasst werden. Mit dem Argument show.col.prc werden beispielsweise die Spaltenprozente ausgegeben, mit dem Argument digits die Anzahl der Nachkommastellen festgelegt. Mit dem Skript im Kasten werden zusätzlich zu den absoluten Häufigkeiten auch die Spaltenprozente mit zwei Nachkommastellen bereitgestellt. Mit dem Argument show.exp werden die erwarteten Häufigkeiten bei statistischer Unabhängigkeit berechnet und mit dem Argument statistic können verschiedene Zusammenhangsmaße berechnet werden. In der Voreinstellung werden der Chi-Quadrat-Wert, Cramer’s V und die Signifikanz berechnet. Es können aber auch Spearman’s Rho und Pearson’s r angefordert werden. Eine Übersicht der Argumente ist über ?tab_xtab verfügbar.

  • Kreuztabelle (Paket: sjPlot): tab_xtab(ess9de_m1$wahl, ess9de_m1$bildung,

    show.col.prc = TRUE,

    digits = 2)

  • Kreuztabellen und die Ausgabe der Prozentwerte (in der Regel: Spaltenprozente) bieten die Grundlage für die Berechnung von Prozentsatzdifferenzen. Bei einer Prozentsatzdifferenz handelt es sich um ein leicht verständliches Interpretationsmaß, das auch über die Grenzen der Fachdisziplin hinaus bekannt ist und ein intuitives Verständnis eines Zusammenhangs ermöglicht (Benninghaus 2007, S. 102). Bei der Berechnung der Prozentwerte sollte allerdings auf eine ausreichende Besetzung der einzelnen Zellen (mindestens 15 Fälle) geachtet werden. Kreuztabellen bieten nur bei überschaubarer Kategorienanzahl eine anschauliche Interpretationsmöglichkeit.


Zusammenhangsmaße


  • Die Stärke (und ggf. auch die Richtung) der Beziehung zwischen zwei Merkmalen (z.B. Bildung und Einkommen) kann mit sehr unterschiedlichen Maßzahlen, sogenannten Koeffizienten, charakterisiert werden. Diese Koeffizienten werden auch als Kontingenz-, Assoziations- oder Korrelationskoeffizienten bezeichnet (Benninghaus 2007, S. 67). Bei der Wahl eines Koeffizienten sind insbesondere die jeweiligen Anwendungsvoraussetzungen – insbesondere das Skalenniveau der Variablen – zu berücksichtigen. Liegen nominale Merkmale vor, dann bietet sich beispielsweise Cramer’s V an. Bei ordinalen Variablen kann Spearman’s Rho verwendet und bei metrischen Variablen kann auf Pearson‘s r zurückgegriffen werden (siehe Tabelle 13)

  • Die bekanntesten Zusammenhangsmaße sind sicherlich Cramer’s V, Spearman’s Rho und Pearson’s r. Diese und weitere Zusammenhangsmaße können mit R berechnet werden. Bei der Vorstellung der Zusammenhangsmaße liegt der Fokus auf diesen Koeffizienten.

  • In der empirischen Praxis ist man häufig mit der Situation konfrontiert, dass die beiden betrachteten Merkmale unterschiedliche Skalenniveaus haben (z.B. Zusammenhang zwischen Geschlecht und politischem Interesse). Eine Lösungsmöglichkeit ist die Verwendung eines Koeffizienten, der für die Variable des niedrigeren Skalenniveaus geeignet ist. Ein Beispiel: Weist ein Merkmal ein metrisches Skalenniveau auf, das andere Merkmal liegt allerdings nur ordinalskaliert vor, dann wird ein Zusammenhangsmaß für ordinalskalierte Variablen verwendet (z.B. Spearman’s Rho). Allerdings werden dann nicht alle Informationen der Beobachtungen für die Berechnung des Zusammenhangs genutzt. Deshalb wurden auch Zusammenhangsmaße für Merkmale mit unterschiedlichen Skalenniveaus entwickelt. Eine Maßzahl, die die Beziehung zwischen einer nominalen (uV) und einer metrischen Variable (aV) beschreibt, ist beispielsweise Eta

Zusammenhangsmaße bei der bivariaten Datenanalyse

Skalenniveau

nominal

ordinal

metrisch

nominal

Cramer’s V Lambda C



ordinal


Spearman’s Rho Kendall’s Tau A, B, C gamma


metrisch

Eta-Koeffizient (aV: metrisch)


Pearson’s r


Nominalskalierte Merkmale


  • Ein Zusammenhangsmaß für nominalskalierte Variablen ist Cramer’s V, das Werte zwischen 0 und 1 annehmen kann. 0 deutet auf keinen Zusammenhang, 1 auf vollständige Abhängigkeit der beiden Merkmale hin. Übertragen auf das vorherige Beispiel: Eine 0 würde bedeuten, dass kein Zusammenhang zwischen Bildung und Wahlbeteiligung besteht, bei einer 1 wäre die Wahlbeteiligung völlig von der Bildung abhängig. Die Zahlen zwischen 0 und 1 deuten auf unterschiedliche Beziehungsstärken hin.

  • Mit dem Skript im Kasten wird der Zusammenhang der Variablen wahl und bildung berechnet. Die Variable wahl erfasst die Wahlbeteiligung und ist eine nominalskalierte Variable, die Variable bildung erfasst das Bildungsniveau. Dabei handelt es sich um eine ordinalskalierte Variable, da die Gruppen eine Rangfolge haben (geringe, mittlere und hohe Bildung). Da die beiden Variablen ein unterschiedliches Skalenniveau aufweisen, ist das geringere Skalenniveau der Variable wahl für die Festlegung des Zusammenhangsmaßes entscheidend.

  • Das Paket DescTools enthält zahlreiche Funktionen für die Berechnung von Zusammenhangsmaßen. Cramer’s V wird mit der Funktion CramerV berechnet, in der Klammer werden die Variablen aufgeführt. Cramer’s V für den Zusammenhang von Wahlbeteiligung und Bildung liegt bei 0,20 und deutet damit auf einen mittelstarken Zusammenhang hin

  • Cramer’s V (Paket: DescTools): CramerV(ess9de_m1$wahl, ess9de_m1$bildung)

  • Cramer’s V basiert auf Chi-Quadrat. Für die händische Berechnung von Chi-Quadrat bietet sich eine Arbeitstabelle an (siehe Tabelle 14). Dabei wird zuerst die Differenz der beobachteten Häufigkeit (fb) und der erwarteten Häufigkeit (fe) jeder Zelle berechnet (fb – fe). Die erwartete Häufigkeit ist das Produkt der Randhäufigkeiten, dividiert durch die Gesamthäufigkeit (z.B. 524 * 257 / 2112 = 63,8). Die Differenz der beobachteten und erwarteten Häufigkeit wird anschließend quadriert und durch die erwartete Häufigkeit dividiert. Schließlich wird die Summe über alle Zellen gebildet. Bei dem Beispiel in Tabelle 14 beträgt der Chi-Quadrat-Wert 84,16.

  • Um Cramer’s V zu berechnen, wird der Wert von Chi-Quadrat durch das Produkt aus der Fallzahl und der kleinsten Abmessung der Kreuztabelle minus 1 geteilt. Abschließend wird die Wurzel gezogen, um Cramer’s V zu erhalten. Im Beispiel wird Cramer’s V wie folgt berechnet:

    Cramer’s V = Wurzel aus 84,16/ 2112∗(2−1) = 0,20

  • Die Angaben für die erwarteten Häufigkeiten und den jeweiligen Chi-Quadrat-Anteil sowie den Gesamt-Chi-Quadrat-Wert können mit der CrossTable-Funktion ausgegeben werden. Mit dem Argument expected werden die erwarteten Häufigkeiten angefordert, mit prop.chisq werden die zellenbezogenen Chi-Quadrat-Anteile berechnet. Das Argument chisq gibt den Gesamt-Chi-Quadrat-Wert aus. Mit dem Skript im Kasten werden die absoluten Häufigkeiten, die erwarteten Häufigkeiten und Chi-Quadrat-Werte ausgegeben. Die geringen Unterschiede der Kreuztabelle zur Arbeitstabelle sind auf rundungsbedingte Abweichungen zurückzuführen.

  • Kreuztabelle zur Berechnung von Cramer’s V (Paket: descr):

    CrossTable(ess9de_m1$wahl, ess9de_m1$bildung,

    prop.c = FALSE,

    prop.t = FALSE,

    prop.r = FALSE,

    expected = TRUE,

    prop.chisq = TRUE,

    chisq = TRUE)

  • Die Berechnung von Chi-Quadrat ist auch mit der Funktion chisq.test möglich. Der Wert von Chi-Quadrat erlaubt Rückschlüsse auf die statistische Signifikanz des Befunds. Bei dem Beispiel ist der p-Wert deutlich kleiner als 0,05, sodass der Befund auf ein signifikantes Ergebnis hindeutet. Der in der Stichprobe gefundene Zusammenhang kann auf die Grundgesamtheit übertragen werden. Die statistische Signifikanz erlaubt aber nur eine Aussage darüber, wie groß die Wahrscheinlichkeit dafür ist, dass der beobachtete Unterschied nicht zufällig entstanden ist (hier: der Zusammenhang zwischen Bildung und Wahlbeteiligung). Die Signifikanz trifft keine Aussage zur Effektstärke oder zur Relevanz eines empirischen Befunds.

  • Berechnung des Chi-Quadrat-Werts (Base R): chisq.test(ess9de_m1$wahl, ess9de_m1$bildung)

  • Informationen zur Effektstärke bietet Cramer’s V. Ein Wert von 0,20 wird gewöhnlich als mittelstarker Zusammenhang gewertet. Mit Ausnahme der Extremwerte 0 (kein Zusammenhang) und 1 (perfekter Zusammenhang) finden sich in der Literatur unterschiedliche Einschätzungen zur Interpretation von Cramer’s V (z.B. Kühnel und Krebs 2007, S. 356; Gehring und Weins 2009, S. 152; Weins 2010, S. 81). Deshalb sind die in Tabelle 15 vorgeschlagenen Interpretationen auch als Daumenregel zu verstehen. In der empirischen Praxis sind Werte von Cramer’s V > 0,60 selten


Wert von Cramer’s V

Interpretation

≤ 0,05

kein Zusammenhang

> 0,05 bis ≤ 0,10

sehr schwacher Zusammenhang

> 0,10 bis ≤ 0,20

schwacher Zusammenhang

> 0,20 bis ≤ 0,40

mittelstarker Zusammenhang

> 0,40 bis ≤ 0,60

starker Zusammenhang

> 0,60

sehr starker Zusammenhang


Ordinalskalierte Merkmale


  • Besteht ein Zusammenhang zwischen Bildung und politischem Interesse? Bildung stellt eine zentrale individuelle Ressource dar. Höhere Bildung bedeutet „höhere individuelle Fähigkeiten der Informationsverarbeitung, im Umgang mit Problemstellungen bzw. stärkere Handlungskompetenzen“ (Hadjar und Becker 2006, S. 14) und damit „verbesserte Teilhabe- und Gestaltungsmöglichkeiten in vielen Bereichen des privaten und öffentlichen Lebens“ . Bildung ist aber „nicht nur eine zentrale Ressource für individuelle Lebenschancen, sondern zugleich auch ein Schlüssel-Faktor für die Entwicklung von demokratischen Einstellungen und Verhaltensweisen“ (Greiffenhagen 2002, S. 56). Eine höhere Bildung fördert unter anderem die Wahrnehmung, Verarbeitung und Reflexion von Informationen aus der politischen Sphäre (Hadjar und Becker 2006). Deshalb haben Menschen mit einer höheren Bildung einen „einfacheren Zugang zur Politik“ (Krimmel 2000, S. 628). In der empirischen Sozialforschung konnte der positive Zusammenhang zwischen Bildung und politischem Interesse bereits mehrfach belegt werden (siehe z.B. van Deth 1990, 2004, 2013; Verba et al. 1995; Hadjar und Becker 2006; Bovens und Wille 2010). Auf Grundlage dieser (knappen) theoretischen Argumentation und der vorliegenden empirischen Befunde lässt sich folgende sozialwissenschaftliche Hypothese formulieren: Je höher die Bildung, desto stärker das politische Interesse.

  • Diese Hypothese lässt sich mit unseren Beispieldaten überprüfen. In der Variable bildung finden sich Angaben zum Bildungsniveau, bei der drei Gruppen unterschieden werden: geringe, mittlere und hohe Bildung. In der Variable polint sind Informationen zum politischen Interesse abgelegt, bei der vier Ausprägungen unterschieden werden: kein, kaum, ziemliches und starkes politisches Interesse. Mit der frq-Funktion aus dem sjmisc-Paket können die Häufigkeitstabellen angefordert werden. Beide Variablen weisen ein ordinales Skalenniveau auf und sind als Faktorvariablen spezifiziert.

  • Ein angemessenes Zusammenhangsmaß für ordinalskalierte Variablen stellt Spearman’s Rho dar. Der Wertebereich liegt stets zwischen –1 und +1. Werte um 0 deuten auf keinen Zusammenhang hin. Bei einem negativen Vorzeichen spricht man von einer negativen Beziehung, bei einem positiven Wert von einem positiven Zusammenhang. Das Paket DescTools enthält eine entsprechende Funktion zur Berechnung von Spearman’s Rho, dabei werden in der Klammer die beiden Variablen genannt. Mit dem Argument use wird festgelegt, wie R mit fehlenden Werten umgehen soll. Mit complete.obs wird Sperman’s Rho für alle Fälle berechnet, die bei beiden Variablen einen gültigen Wert haben.

  • Spearman’s Rho (Paket: DescTools): SpearmanRho(ess9de_m1$polint, ess9de_m1$bildung,

    use = "complete.obs")

  • Als Ergebnis gibt R einen Wert von 0,18 aus, der als schwacher Zusammenhang gewertet werden kann. Der empirische Befund bestätigt unsere Hypothese, die einen positiven Zusammenhang zwischen Bildung und politischem Interesse postuliert. Spearman’s Rho kann auch mit der cor-Funktion berechnet werden, die bei R standardmäßig verfügbar ist. Allerdings erwartet die cor-Funktion explizit numerische Variablen, die Variablen polint und bildung sind allerdings als Faktoren spezifiziert (die Vorteile des Objekttyps Faktor werden bei der multivariaten Datenanalyse sichtbar). Wird die cor-Funktion mit den Variablen genutzt und Spearman’s Rho berechnet (über das Argument method), dann gibt R eine entsprechende Fehlermeldung aus. Der Objekttyp kann bei R aber einfach angepasst werden. Dabei lassen sich zwei Möglichkeiten unterscheiden: Zum einen können neue Variablen erstellt werden, die auf den existierenden Variablen basieren, aber als numerischer Objekttyp abgespeichert werden (Beispiel: ess9de_m1$bildung2 <- as.numeric(ess9de_m1$bildung)). Zum anderen kann der Objekttyp auch direkt bei der Berechnung von Spearman’s Rho festgelegt werden.

  • Diese zweite Variante ist weniger aufwändig und im Kasten dokumentiert. In der Klammer wird mit as.numeric der Objekttyp festlegt, sodass die Variablen polint und bildung als numerische Variablen behandelt werden. Mit dem Argument method wird das Zusammenhangsmaß spezifiziert, in unserem Fall wird Spearman’s Rho berechnet (spearman). Alternativ kann auch Kendall‘s Tau (kendall) berechnet werden, der sich auch für ordinalskalierte Variablen eignet. Ohne die Spezifikation der Methode berechnet die cor-Funktion den Korrelationskoeffizienten Pearson’s r, der allerdings metrische Variablen voraussetzt. Im konkreten Anwendungsfall wäre Pearson’s r kein geeignetes Zusammenhangsmaß, allerdings sind die empirischen Ergebnisse durchaus vergleichbar.

  • Spearman’s Rho (Base R):

    cor(ess9de_m1$polint, ess9de_m1$bildung, # Fehlermeldung,

    use = "complete.obs", # da Variablen als Faktoren kodiert

    method = "spearman")

    cor(as.numeric(ess9de_m1$polint), as.numeric(ess9de_m1$bildung),

    use = "complete.obs",

    method = "spearman")

  • In Tabelle 16 sind Daumenregeln zur Interpretation der Stärke von Spearman’s Rho zusammengefasst. Werte bis 0,05 werden nicht interpretiert. Ein Wert zwischen 0,05 und 0,20 deutet auf einen schwachen Zusammenhang hin, Werte zwischen 0,20 und 0,50 auf einen mittelstarken Zusammenhang und bei Werten zwischen 0,50 und 0,70 wird von einem starken Zusammenhang gesprochen. Neben der Stärke kann bei Sperman’s Rho auch die Richtung der Beziehung interpretiert werden. Ein negatives Vorzeichen deutet auf einen negativen Zusammenhang, ein positives Vorzeichen auf eine positive Beziehung hin.

Interpretation von Spearman’s Rho

Wert von r

Interpretation

≤ | 0,05 |

kein Zusammenhang

> | 0,05 | bis ≤ | 0,20 |

schwacher Zusammenhang

> | 0,20 | bis ≤ | 0,50 |

mittelstarker Zusammenhang

> | 0,50 | bis ≤ | 0,70 |

starker Zusammenhang

> | 0,70 |

sehr starker Zusammenhang


Metrische Merkmale


  • Ein geeignetes Zusammenhangsmaß für metrische Merkmale ist der Korrelationskoeffizient nach Pearson. Der Korrelationskoeffizient wird meist mit r abgekürzt und liegt stets zwischen –1 und +1. Werte um 0 deuten auf keinen Zusammenhang hin. Bei einem negativen Vorzeichen spricht man von einer negativen Korrelation (Beispiel: Je größer die Angst, desto geringer die Punktzahl), bei einem positiven Vorzeichen von einer positiven Korrelation (Beispiel: Je höher das Alter, desto größer das Einkommen).

  • Die Berechnung des Korrelationskoeffizienten Pearson’s r mit R wird an einem Beispiel illustriert. Der Beispieldatensatz enthält Informationen zur Lebenszufriedenheit (stflife) und zum subjektiven Gesundheitszustand (health). Die Lebenszufriedenheit wird auf einer Skala von 0 bis 10 erfasst, bei der höhere Werte auf eine größere Lebenszufriedenheit hindeuten. Die Variable kann als pseudometrisch interpretiert werden, da sie erstens mehr als fünf Ausprägungen hat und zweitens die Abstände von den meisten Personen vermutlich als gleich wahrgenommen werden. Bei der Frage nach dem (subjektiven) Gesundheitszustand konnten die Personen zwischen fünf Antwortoptionen auswählen: sehr gut, gut, durchschnittlich, schlecht und sehr schlecht. Die Variable wird in diesem Beispiel auch als pseudometrisch interpretiert, allerdings kann diese Einschätzung durchaus kritisch bewertet werden. Beachten Sie, dass die Variable so kodiert ist, dass höhere Werte mit einer schlechteren Gesundheit korrespondieren.

  • Mit der cor-Funktion kann Pearson’s r berechnet werden. In die Klammer werden die Variablen aufgenommen, mit dem use-Argument wird der Umgang mit fehlenden Werten festgelegt. Ehe Sie die Berechnung in R ausführen, überlegen Sie einmal, welches Vorzeichen des Korrelationskoeffizienten Sie erwarten.

  • Pearson’s r (Base R)

    cor(ess9de_m1$stflife, ess9de_m1$health,

    use = "complete.obs")

  • R gibt einen Korrelationskoeffizienten von –0,32 aus. Es handelt sich um einen mittelstarken Zusammenhang zwischen Lebenszufriedenheit und Gesundheit. Wie kann jetzt aber das negative Vorzeichen interpretiert werden? Bedeutet der Befund etwa, dass bei schlechterer Gesundheit die Lebenszufriedenheit steigt? Nein, das Gegenteil ist der Fall. Bei der Interpretation des empirischen Befunds ist die Kodierung der Variablen zu berücksichtigen. Bei der Lebenszufriedenheit bedeuten höhere Werte eine größere Lebenszufriedenheit, bei der Gesundheit ist die Kodierung aber genau andersherum. Höhere Werte gehen mit einer schlechteren (subjektiven) Gesundheit einher. Deshalb sollte vor bi- und multivariaten Analysen jede Variable deskriptiv betrachtet werden.

  • Für die Interpretation von empirischen Ergebnissen ist es deshalb äußerst hilfreich, wenn hohe Werte einer Variable auch ein hohes Ausmaß des jeweiligen Merkmals anzeigen (siehe auch Hildebrandt 2015, S. 46). Warum? Bei einer Korrelation zeigt das Vorzeichen des Korrelationskoeffizienten die Richtung des Zusammenhangs an. Ein positives Vorzeichen deutet darauf hin, dass höhere Werte einer Variable (z.B. Alter) mit höheren Werten einer anderen Variable (z.B. Einkommen) korrespondieren. Ein negatives Vorzeichen deutet dagegen darauf hin, dass höhere Werte einer Variable (z.B. Angst vor Prüfungen) mit geringeren Werten einer anderen Variable (z.B. Punktzahl in einem Test) einhergehen. Diese einfache Interpretation wird erschwert, wenn hohe Werte einer Variable ein geringes Ausmaß dieses Merkmals (z.B. geringe Gesundheit) anzeigen.

  • Der Datensatz enthält die Variable gesund.num, bei der diese Kodierung bereits angepasst wurde. Höhere Werte deuten bei der Variable auf eine bessere Gesundheit hin. Mit dem Skript im Kasten wird Pearson’s r für die Variablen Lebenszufriedenheit (stflife) und Gesundheit (gesund.num) angefordert. Das Ergebnis ist 0,32. Eine bessere Gesundheit korrespondiert also mit einer größeren Lebenszufriedenheit

  • Pearson’s r (Base R):

    cor(ess9de_m1$stflife, ess9de_m1$gesund.num,

    use = "complete.obs")

  • Eine Alternative zur cor-Funktion ist die cor.test-Funktion, die zusätzlich zum Korrelationskoeffizienten Pearson’s r auch die statistische Signifikanz berechnet. Auf dieser Grundlage kann entschieden werden, ob der empirische Befund von der Stichprobe auf die Grundgesamtheit übertragen werden kann. Der p-Wert ist deutlich kleiner als 0,05, sodass der Befund als statistisch signifikant interpretiert werden kann. Zur Erinnerung: Die Signifikanz trifft keine Aussage zur Stärke oder Bedeutsamkeit eines Befunds

  • Pearson’s r (Base R):

    cor.test(ess9de_m1$stflife, ess9de_m1$gesund.num,

    use = "complete.obs")

  • Bei der Berechnung von Pearson’s r wurde angenommen, dass bei der Gesundheit ein pseudometrisches Skalenniveau unterstellt werden kann. Falls Sie diese Einschätzung nicht teilen, dann darf Pearson’s r nicht berechnet werden. Für die Berechnung des Zusammenhangs einer pseudometrischen und einer ordinalskalierten Variable würde sich Spearman’s Rho anbieten. Das entsprechende Skript ist im Kasten dokumentiert.

  • Spearman’s Rho (Base R): cor(ess9de_m1$stflife, ess9de_m1$gesund.num,

    use = "complete.obs",

    method = "spearman")

  • Spearman’s Rho liegt bei 0,29 und weist damit ebenfalls auf einen mittelstarken positiven Zusammenhang zwischen der subjektiven Gesundheit und der Lebenszufriedenheit hin. Die Wahl des Korrelationskoeffizienten hat also keinen (entscheidenden) Einfluss auf die Interpretation der empirischen Befunde. Die zusätzliche Berechnung von Spearman’s Rho kann das Vertrauen in die empirischen Befunde also stärken. Dieses Vorgehen bietet sich immer dann an, wenn es (berechtigte) Zweifel an der Angemessenheit des gewählten Zusammenhangsmaßes gibt. Anstelle der cor-Funktion kann natürlich auch die SpearmanRho-Funktion aus dem DescTools-Paket verwendet werden.

  • Nach Kühnel und Krebs (2007, S. 404-405) können Korrelationen bis zu 0,05 vernachlässigt werden. Von 0,05 bis 0,2 liegt ein schwacher Zusammenhang, von 0,2 bis 0,5 ein mittelstarker Zusammenhang und ab 0,5 ein starker Zusammenhang vor. In Tabelle 17 sind Daumenregeln zur Interpretation der Stärke einer Beziehung des Korrelationskoeffizienten nach Pearson’s r zusammengefasst.


    Werte von r

    Interpretation

    ≤ | 0,05 |

    kein Zusammenhang

    > | 0,05 | bis ≤ | 0,20 |

    schwacher Zusammenhang

    > | 0,20 | bis ≤ | 0,50 |

    mittelstarker Zusammenhang

    > | 0,50 | bis ≤ | 0,70 |

    starker Zusammenhang

    > | 0,70 |

    sehr starker Zusammenhang


Multivariate Datenanalyse


  • Bei bivariaten Analyseverfahren wird der Zusammenhang von zwei Merkmalen untersucht (z.B. Gesundheit und Lebenszufriedenheit). Gesundheit ist dabei die unabhängige Variable, die Lebenszufriedenheit ist die abhängige Variable. Die Lebenszufriedenheit wird aber nicht nur von der Gesundheit „abhängig“ sein, sondern auch von anderen Merkmalen wie Geschlecht, Familienstand oder Bildung. In diesem Kapitel werden Analyseverfahren vorgestellt, die den Einfluss mehrerer unabhängiger Variablen (z.B. Bildung und Geschlecht) auf eine abhängige Variable (z.B. Lebenszufriedenheit) schätzen können. Die Regressionsanalyse ist dabei das wichtigste und bekannteste Verfahren in den Sozialwissenschaften

  • Die Bezeichnung „Regressionsanalyse“ ist ein Oberbegriff für eine Vielzahl an regressionsanalytischen Verfahren (z.B. Wolf und Best 2010a). Bei einer Regression wird der Effekt einer oder mehrerer unabhängiger Variablen auf eine abhängige Variable geschätzt (für eine Einführung in die Regressionsanalyse siehe auch Urban und Mayerl 2018; Hartmann et al. 2022).

  • Die Entscheidung für ein konkretes Regressionsverfahren ist unter anderem vom Skalenniveau der aV abhängig (Abbildung 14). Bei einer binären bzw. dichotomen aV ist die logistische Regression eine mögliche Analysestrategie. Ein typischer Anwendungsfall ist die Wahlbeteiligung, die nur zwei Ausprägungen hat: „Ja“ versus „Nein“. Bei einer nominalen aV mit mehr als zwei Ausprägungen bieten sich multinomiale logistische Regressionsverfahren an. Ein Beispiel ist die Wahl einer Partei, da das Messniveau der aV (z.B. SPD, CDU, Grüne oder FDP) nominal ist.

  • Bei ordinalen Merkmalen (z.B. politisches Interesse) können ordinale Logitmodelle geschätzt werden, bei metrischen Merkmalen (z.B. Einkommen) bietet die lineare Regression eine geeignete Analysestrategie

  • In den Sozialwissenschaften ist die lineare Regression vermutlich das am häufigsten eingesetzte Analyseverfahren. Dafür gibt es mehrere Gründe: Erstens lassen sich lineare Regressionsmodelle ohne größere Schwierigkeiten schätzen. Zweitens sind die empirischen Ergebnisse – mit etwas Übung – einfacher zu interpretieren als die Resultate logistischer Regressionsmodelle. Angesichts dieser Vorteile wird eine zentrale Voraussetzung der linearen Regression häufig „vergessen“: das metrische Skalenniveau der abhängigen Variable.

  • Pseudometrische Skalen:

    Bei vielen (interessanten) abhängigen Variablen – z.B. Zufriedenheit mit der Demokratie, Lebenszufriedenheit oder auch Einstellungen gegenüber der Europäischen Union – kann ein metrisches Skalenniveau nicht einfach unterstellt werden. Nach Faulbaum et al. können allerdings Ordinalskalen ab etwa fünf Ausprägungen statistisch wie metrische Skalen behandelt werden (siehe zum Ordinalskalenproblem auch Baur 2011). Solche Skalen werden als pseudometrische Skalen bezeichnet. Für die Behandlung einer Ordinalskala als pseudometrische Skala ist allerdings entscheidend, dass die einzelnen Ausprägungen nicht nur in eine Reihenfolge gebracht werden können, sondern die (inhaltlichen) Abstände zwischen den Ausprägungen auch gleich sind (Äquidistanz). Dies wird an zwei Beispielen verdeutlicht:

    • Eine Frage im sozio-ökonomischen Panel (SOEP) erfasst die Häufigkeit einzelner Freizeitaktivitäten. Die Antwortmöglichkeiten umfassen dabei folgende fünf Optionen (in Klammern mögliche Werte): „täglich“ (5), „mindestens einmal pro Woche“ (4), „mindestens einmal im Monat“ (3), „seltener“ (2) und „nie“ (1). Es liegen zwar fünf Ausprägungen vor, aber die Abstände sind nicht gleich (formal: die Äquidistanz ist nicht gegeben). Entsprechend sollte die Skala nicht als pseudometrisch behandelt werden.

    • Im European Social Survey (ESS) wird mit folgender Frage die Zufriedenheit mit der Demokratie erfasst: „Und wie zufrieden sind Sie – alles in allem – mit der Art und Weise, wie die Demokratie in Deutschland funktioniert?“ Als Antwort können die Befragten jeweils eine Zahl zwischen 0 und 10 wählen, bei der 0 „äußerst unzufrieden“ und 10 „äußerst zufrieden“ bedeutet. Diese Antwortskala wird häufig als pseudometrisch interpretiert, da die einzelnen Abstände von den meisten Befragten vermutlich als gleich wahrgenommen werden.

  • Die Entscheidung, ob eine Skala als pseudometrisch behandelt werden kann, ist nicht immer einfach. Bei Zweifeln bietet sich eine empirische Lösung an: Es werden sowohl ordinale Logitmodelle als auch lineare Regressionsmodelle berechnet und die Ergebnisse verglichen. Sind die empirischen Ergebnisse substanziell vergleichbar, dann kann für die einfachere Interpretation der Resultate auf das lineare Regressionsmodell zurückgriffen werden. Allerdings sollte in einer Fußnote auf den Modellvergleich verwiesen werden.

  • Die logistische, nominale, ordinale und lineare Regression sind geeignete Analyseverfahren für Querschnittsdaten (einmalige Datenerhebung). Für Paneldaten wie beim SOEP stehen fortgeschrittene Analyseverfahren zur Verfügung. Bei einer hierarchischen Datenstruktur – etwa Schüler in Schulen oder Personen in Ländern – werden in der Regel Mehrebenanalysen durchgeführt (z.B. Tausendpfund 2020a). Auch bei Panel- und Mehrebenenanalysen handelt es sich um Regressionsanalysen. In dieser Einführung werden diese fortgeschrittenen Analyseverfahren allerdings nicht behandelt.


Lineare Regression


  • Bei einer Regression wird untersucht, ob ein interessierendes Merkmal (aV) auf andere Merkmale (uV) „zurückgeführt“ werden kann. Die Bezeichnung „Regression“ leitet sich aus dem lateinischen regredi (zurückgehen) oder regressio (die Rückkehr) ab. Mit anderen Worten: Bei einer Regression wird der Einfluss einer oder mehrerer unabhängiger Variablen auf eine abhängige Variable analysiert

  • Die Logik der Regression wird zunächst am bivariaten Anwendungsfall illustriert. Bei einer bivariaten Regression wird der Einfluss einer uV auf eine aV untersucht. Bei einer multiplen Regression wird der Einfluss mehrerer uV auf eine aV analysiert. In Tabelle 18 sind Alter und Einkommen von zehn fiktiven Befragten angegeben. Eine typische regressionsanalytische Fragestellung könnte lauten: Wie stark ist der Einfluss des Alters auf das Einkommen?

  • Das Streudiagramm deutet auf einen möglichen Zusammenhang zwischen Alter und Einkommen hin. Wenn die Werte auf der x-Achse steigen, dann steigen in der Tendenz auch die Werte auf der y-Achse. Offensichtlich verdienen ältere Befragte tendenziell mehr Geld als jüngere Personen. Ein geeignetes Zusammenhangsmaß für zwei metrische Merkmale ist der Korrelationskoeffizient nach Pearson, der in Abschnitt 6.4.3 vorgestellt wurde. Mit den Angaben in Tabelle 18 kann der Korrelationskoeffizient r berechnet werden. Das Ergebnis (r=0,796) deutet auf einen starken Zusammenhang zwischen Alter und Einkommen hin. Je älter eine Person, desto höher das Einkommen. Allerdings ist dieser Zusammenhang nicht „perfekt“. Der Befragte mit 60 Jahren verdient beispielsweise weniger als der Befragte mit 55 Jahren. Mit echten Daten ist der Zusammenhang zwischen Alter und Einkommen außerdem deutlich schwächer.

  • Mit dem Korrelationskoeffizienten wird die Stärke eines Zusammenhangs von zwei Merkmalen mit einer Zahl ausgedrückt. Der Korrelationskoeffizient bietet allerdings keine Information darüber, wie hoch etwa das durchschnittliche Einkommen eines 50- jährigen Befragten ist. Zudem kann immer nur eine unabhängige Variable berücksichtigt werden. Beide Einschränkungen überwindet die lineare Regression.

  • Betrachten wir zunächst die Möglichkeit der Regression, das durchschnittliche Einkommen einer Person in Abhängigkeit vom Alter zu schätzen. Für diesen Zweck wird in Abbildung 16 das Streudiagramm um die sogenannte Regressionsgerade ergänzt. Die Regressionsgerade steht im Mittelpunkt der Regressionsanalyse

  • Bei der Regressionsgeraden handelt es sich um eine Gerade, die in die Daten gelegt wird. In unserem Beispiel hat diese Gerade eine positive Steigung und schneidet die y-Achse an einem bestimmten Punkt (dazu muss die Linie gedanklich fortgeführt werden). Formal lässt sich die Regressionsgerade wie folgt beschreiben: ŷ = α + β * uV

  • Dabei wird mit α der Achsenabschnitt und mit β die Steigung der Geraden bezeichnet. Die Abkürzung uV steht für unabhängige Variable (hier: Alter). Anstelle von uV wird häufig auch der Buchstabe x verwendet. Das ŷ steht für das geschätzte Einkommen.

  • Bei der Regression wird die Regressionsgerade nicht beliebig in die Daten bzw. in das Streudiagramm eingezeichnet, sondern nach einem bestimmten Verfahren: dieses Verfahren wird Ordinary-Least-Squares (OLS) oder auch Verfahren der kleinsten Quadrate genannt. Das OLS-Verfahren ist das „Geheimnis“ der linearen Regression.


OLS: Ordinary-Least-Squares


  • Was bedeutet OLS? In Abbildung 16 sind die Angaben der einzelnen Befragten eingetragen. Dabei weichen die Werte der einzelnen Befragten mehr oder weniger von der Regressionsgeraden ab. Bei den Befragten 1, 2, 8 und 10 liegt die Regressionsgerade über den Werten, bei den anderen Befragten liegt die Gerade unter den Werten. Die geringste Abweichung lässt sich für den siebten Befragten feststellen.

  • Die Abstände zwischen den einzelnen Befragten und der Regressionsgerade können Sie mit einem Lineal nachmessen. Die einzelnen Abstände (also die Differenz jedes Befragten zur Regressionsgerade) können Sie im nächsten Schritt einfach zusammenzählen. Allerdings gibt es dabei ein Problem: Bei den Befragten 1, 2, 8 und 10 haben sie negative Werte, bei den anderen Befragten positive Abstände (oder umgekehrt). Negative und positive Abstände können sich allerdings gegenseitig aufheben und in der Summe hätten Sie ggf. gar keinen Abstand. Um dieses Problem zu umgehen, bietet es sich an, die einzelnen Abstände zu quadrieren und die quadrierten Abstände zusammenzuzählen. Die eingezeichnete Regressionsgerade ist dabei die Gerade, bei der die Summe der quadrierten Abstände am geringsten ist. Das OLS-Prinzip bedeutet, dass die Regressionsgerade so in die Daten gelegt wird, dass die Summe der quadrierten Abweichungen am geringsten ist.

  • Die Logik des OLS-Verfahrens wird in Abbildung 17 am Befragten 8 etwas formaler dargestellt. Der empirische Wert des Befragten (roter Punkt) liegt etwas unterhalb der Regressionsgeraden. Der Abstand des Befragten von der Regressionsgeraden lässt sich berechnen. Diese Abweichung wird in der Sprache der empirischen Sozialforschung als Fehlerterm oder auch Residuum (lateinisch: der Rest) bezeichnet (e8).

  • Die Abweichung des Befragten von der Regressionsgeraden kann inhaltlich interpretiert werden: Unser Modell schätzt den Einfluss des Alters auf das Einkommen. Dabei weichen die Werte der Befragten mehr oder weniger von unserer Regressionsgeraden ab. Dafür gibt es mindestens zwei Ursachen: Erstens wird das Einkommen nicht nur vom Alter des Befragten abhängig sein, sondern auch von anderen erklärenden Merkmalen wie Bildung und Geschlecht. Zweitens sind auch Messfehler denkbar. Möglicherweise haben einzelne Befragte falsche Angaben gemacht oder bei der Datenerfassung gab es Übertragungsfehler. Diese Fehlerursachen sind im Fehlerterm (Residuum) gebündelt.

  • In Abbildung 17 wird zwischen y8 und ŷ8 unterschieden. Bei y8 handelt es sich um das tatsächliche Einkommen des achten Befragten, welches aus Tabelle 18 abgelesen werden kann. Es ist der empirische Wert unseres Befragten. Bei ŷ8 handelt es sich um den geschätzten Wert für unseren Befragten (Wert auf der Regressionsgeraden). Mit dem ^ (gesprochen: Dach) wird signalisiert, dass es sich bei dem Wert um eine Schätzung handelt. Die Differenz zwischen dem empirischen Wert (y8) und der Schätzung (ŷ8) ist der Fehlerterm für den Befragten (e8). Formal dargestellt: e8 = y8 – ŷ8

  • In der Regel sind wir nicht an dem Fehlerterm eines bestimmten Befragten interessiert, sondern an den Residuen beliebiger (im Prinzip: aller) Befragten. Deshalb wird das Subskript 8 meist durch den Buchstaben i ersetzt. In vielen Lehrbüchern wird für das Residuum auch nicht der Buchstabe e, sondern das griechische Epsilon (ε) verwendet. εi = yi – ŷi

  • Die Darstellung variiert von Lehrbuch zu Lehrbuch, die Logik des OLS-Verfahrens ist jedoch identisch. Die quadrierten Fehler aller Befragten (die Residuen) werden genutzt, um die Regressionsgerade in die Daten zu legen. Dabei soll die Summe der quadrierten Residuen (Residual Sum of Squares) möglichst minimal sein.

    Residual Sum of Squares (RSS) = ∑ ε𝑖 2 = ∑(𝑦𝑖 − ŷ𝑖)²

  • RSS ist die Summe der quadrierten Fehler (∑ ε𝑖𝑖 2). Der Fehler ist dabei die quadrierte Abweichung vom empirischen Wert yi zum geschätzten Wert ŷi. Zur Erinnerung: Bei ŷ handelt es sich um den geschätzten Wert. Der geschätzte Wert wird durch die Regressionsgerade beschrieben, die über einen Achsenabschnitt (α) und eine Steigung (β) verfügt. Die Regressionsgerade lässt sich dabei wie folgt darstellen: ŷ = α + β*x. Das x in der Gleichung steht dabei für die erklärende Variable. In unserem Beispiel symbolisiert das x das Alter. In der obigen Gleichung kann ŷi durch die Regressionsgleichung ersetzt werden.

    Residual Sum of Squares (RSS) = ∑ ε𝑖 2 = ∑(𝑦𝑖 − ( α + β ∗ 𝑥𝑖))²

  • Ziel des OLS-Verfahrens ist es, den Wert von RSS zu minimieren. Mit anderen Worten: Wir suchen Werte für α und β, bei denen die Summe der quadrierten Fehler (εi²) am geringsten ist. Bei dem OLS-Verfahren handelt es sich folglich um die Suche nach dem Minimum einer Funktion mit zwei Unbekannten. Dieses mathematische Problem lässt sich mit den Regeln der Differentialrechnung lösen. Es wird die erste Ableitung von α und β ermittelt, Null gesetzt und aufgelöst. An dieser Stelle müssen Sie allerdings weder die Ableitung berechnen noch die Gleichung auflösen (für die mathematisch interessierten Leserinnen sei an dieser Stelle auf Wolf und Best (2010b) verwiesen). Die Grundlogik von OLS ist auch ohne Formeln verständlich: Wir legen die Regressionsgerade so in unsere Daten, dass die quadrierte Abweichung der empirischen Werte (yi) von unseren geschätzten Werten (ŷi) möglichst gering ist

  • In der Forschungspraxis übernimmt das Statistikprogramm die Berechnung der Regressionsgerade bzw. die Schätzung der Regressionsparameter α (Achsenabschnitt) und β (Steigung). Tabelle 19 stellt die Ergebnisse der bivariaten Regression mit R auszugsweise dar. Bei der Erläuterung der Ergebnisse berücksichtigen wir an dieser Stelle nur die Spalte „Estimate“, später wird die Ergebnisausgabe mit echten Daten ausführlich besprochen.

  • Die abhängige Variable der bivariaten Regression ist das Einkommen. Mit „(Intercept)“ ist der Achsenabschnitt α, mit „alter“ ist der Wert für die Steigung β gemeint. Was bedeuten diese Werte inhaltlich? Der Achsenabschnitt, auch Konstante genannt, ist der Schnittpunkt der Regressionsgerade mit der y-Achse. Dieser Wert beträgt 707,27. Nach unserem Modell erhält jeder Befragte mit 0 Jahren ein durchschnittliches Einkommen von 707,27 Euro. Diese Angabe ist empirisch nicht sonderlich zugänglich, aber erforderlich, um die Regressionsgerade in die Daten zu legen. Der Intercept bzw. die Konstante ist außerdem notwendig, um für einzelne Befragte konkrete Einkommen schätzen zu können. Der Wert für β (alter) beträgt 27,27. Mit jedem Lebensjahr verdient ein Befragter durchschnittlich 27,27 Euro mehr. Beide Angaben sind erforderlich, um auf Basis dieses Modells das durchschnittliche Einkommen eines Befragten mit 50 Jahren (Befragter 8) schätzen zu können.

    𝑦8 = 707,273 + 27,273 * 50

  • Das Ergebnis ist 2070,92 Euro. Dieser geschätzte Wert liegt 270,92 Euro über dem tatsächlichen Wert (1800). Die Differenz von 270,92 Euro ist der Fehlerterm, das Residuum. Mit den vorliegenden Daten ist allerdings keine bessere Einkommensschätzung möglich. Für eine bessere Schätzung müssen weitere erklärende Merkmale im Regressionsmodell berücksichtigt werden. Dies führt uns zur multiplen Regression.


Multiple Regression


  • Das Kennzeichen der multiplen Regression ist, dass mehrere unabhängige Variablen in einer Regression berücksichtigt werden. So wird das Einkommen nicht nur vom Alter, sondern auch vom Geschlecht, vom Bildungsniveau und von der Erwerbstätigkeit abhängig sein. Deshalb ist es sinnvoll, in einer Regression nicht nur eine, sondern möglichst mehrere – theoretisch relevante – unabhängige Variablen zu berücksichtigen. Dies bietet auch die Möglichkeit, die Effektstärke der einzelnen Variablen in den Blick zu nehmen (d.h. welche uV hat den größten Einfluss auf die aV?). Weitere erklärende Variablen können zwar meist relativ unkompliziert in einer Regression berücksichtigt werden, aber als Sozialwissenschaftlerin sollten Sie die Auswahl der uV stets begründen. Das Ziel ist die Entwicklung eines theoriegeleiteten Regressionsmodells. Auf Basis theoretischer Überlegungen werden plausible Hypothesen entwickelt und mögliche erklärungskräftige Merkmale in der Regressionsanalyse berücksichtigt. Relevante Merkmale lassen sich auf Basis einer intensiven Auseinandersetzung mit dem existierenden Forschungsstand identifizieren. Grundsätzlich gilt folgende Reihenfolge: Erst die relevanten uV identifizieren, dann die Merkmale in der Regression berücksichtigen.

  • Die Logik der multiplen Regression wird in Abbildung 18 dargestellt. Bei zwei unabhängigen Variablen handelt es sich jetzt nicht mehr um eine Regressionsgerade, sondern um eine „Regressionsfläche“. Die Vorgehensweise ist aber weiterhin mit der bivariaten Regression vergleichbar: Die Fläche wird so in die Datenwolke gelegt, dass die Summe der quadrierten Abweichungen minimal ist. Das Ziel ist immer, die Regressionsgerade bzw. die Regressionsfläche so in die Daten zu legen, dass die quadrierte Abweichung der empirischen Werte (yi) von unseren geschätzten Werten (ŷi) möglichst gering ist.

  • Bei mehr als zwei unabhängigen Variablen ist die Logik der linearen Regression allerdings nicht mehr visuell darstellbar, aber mathematisch lässt sich das Minimum einer Funktion mit mehreren Unbekannten meist problemlos berechnen. Die mathematische Berechnung übernimmt das Statistikprogramm, mit der inhaltlichen Interpretation muss sich allerdings der Sozialwissenschaftler auseinandersetzen

  • In Tabelle 21 sind die Ergebnisse der linearen Regression dargestellt. Mit jedem Jahr Berufserfahrung (berfahrung) steigt das durchschnittliche Einkommen um 37,45 Euro, mit jedem Lebensjahr erhöht sich das durchschnittliche Einkommen um 12,43 Euro. Bei Berücksichtigung der Berufserfahrung verringert sich der Alterseffekt von 27,27 auf 12,43 Euro

  • Der Intercept (Achsenabschnitt) gibt den durchschnittlichen Wert eines Befragten an, der bei beiden unabhängigen Variablen den Wert 0 hat. Inhaltlich bedeutet dies, dass ein Befragter im Alter von 0 Jahren und ohne Berufserfahrung ein durchschnittliches Einkommen von etwa 878 Euro hat. Dieser Wert ist formal völlig korrekt, aber inhaltlich nicht intuitiv verständlich. Bei der Interpretation sollte stets berücksichtigt werden, dass es sich bei der Regressionskonstanten um einen eher technischen Wert handelt. Deshalb wird der Wert der Konstante in der Forschungspraxis häufig nicht interpretiert.


Lineare Regression mit R


  • In diesem Abschnitt wird die Durchführung einer linearen Regression mit dem Statistikprogramm R an einem Beispiel illustriert. Mit den Beispieldaten wird untersucht, welche individuellen Merkmale die Lebenszufriedenheit beeinflussen. Im Mittelpunkt stehen die „technische“ Umsetzung einer linearen Regression und die angemessene Interpretation der Ergebnisse. Die Schätzung einer linearen Regression erfolgt mit der lm-Funktion.

    Die allgemeine Funktion ist:

    lm(formula, data)

    Mit formula wird die lineare Regressionsgleichung spezifiziert, data ist die jeweilige Datengrundlage (hier: ess9de_m1). Die formula wird wie folgt angegeben:

    aV ~ uV1 + uV2 + … + uVk

  • Die aV ist in unserem Beispiel die Lebenszufriedenheit (stflife). Die Lebenszufriedenheit wurde auf einer 11-Punkt-Skala erfasst, bei der 0 „äußerst unzufrieden“ und 10 „äußerst zufrieden“ bedeutet. Nach der Tilde (~) werden die unabhängigen Variablen aufgeführt, die jeweils mit einem Plus-Zeichen (+) getrennt werden. In unserem Beispiel sind dies die Variablen frau, verheiratet und alter. Die Variablen frau und verheiratet sind als Dummyvariablen kodiert, die jeweils die Ausprägungen 0 und 1 haben. Bei der Variable frau sind die Männer mit 0 und die Frauen mit 1 kodiert. Der Regressionskoeffizient bezieht sich folglich auf die Frauen. Bei der Variable verheiratet haben Personen, die nicht verheiratetet sind, den Wert 0 erhalten. Die Befragten, die verheiratet sind, haben den Wert 1 erhalten. Die Variable alter erfasst das Alter in Jahren.

  • Mit dem Skript im Kasten werden zunächst Häufigkeitstabellen der einzelnen Variablen angefordert (frq-Funktion aus dem sjmisc-Paket). Dabei wird die Kodierung der Variablen ersichtlich. Die lineare Regression wird anschließend mit der lm-Funktion geschätzt. Erst wird die abhängige Variable genannt (stflife), nach der Tilde werden die unabhängigen Variablen aufgeführt. Der Datensatz wird am Ende spezifiziert

  • Lineare Regression:

    frq(ess9de_m1, stflife, frau, verheiratet, alter)

    lm(stflife ~ frau + verheiratet + alter, ess9de_m1)


  • Die Ergebnisse der linearen Regression werden in der Console ausgegeben, dargestellt werden allerdings nur die Regressionskoeffizienten (Tabelle 22). Der Intercept (Achsenabschnitt) gibt die durchschnittliche Lebenszufriedenheit für die Befragten an, bei denen alle uV den Wert 0 haben. Inhaltlich handelt es sich um unverheiratete Männer im Alter von 0 Jahren. Für diese Personengruppe wird eine durchschnittliche Lebenszufriedenheit von etwa 7,51 Skalenpunkten geschätzt. Bei den Variablen frau und alter haben wir negative Regressionskoeffizienten, beim Familienstand einen positiven Regressionskoeffizienten. Danach hat das weibliche Geschlecht und das Alter einen negativen Effekt auf die Lebenszufriedenheit, verheiratete Personen haben eine höhere Lebenszufriedenheit als unverheiratete Personen.

  • Die Ausgabe der Regressionsergebnisse ist recht sparsam. Für eine umfassendere Darstellung müssen die Ergebnisse der linearen Regression in einem Objekt gespeichert werden. Mit der Funktion summary werden dann die Ergebnisse ausführlicher dargestellt. Mit dem Skript im Kasten werden die Ergebnisse der Regression im Objekt m1a gespeichert, mit der summary-Funktion werden die Ergebnisse dann dargestellt.

  • Lineare Regression:

    m1a <- lm(stflife ~ frau + verheiratet + alter, ess9de_m1)

    summary(m1a)

  • Die zentralen Ergebnisse der Regression finden sich im Abschnitt Coefficients (Tabelle 23). Dort werden die unstandardisierten Regressionskoeffizienten (Estimate), der Standardfehler (Std. Error), der t-Wert (t value) und der p-Wert (Pr (>|t|)) dargestellt

  • Vor der Interpretation der Regressionsergebnisse wird erneut eine lineare Regression geschätzt. Dabei wird lediglich eine Variable geändert. Anstelle der Variable frau wird jetzt die Variable mann genutzt, die ebenfalls 0/1-kodiert ist. Bei dieser Variable haben Frauen den Wert 0, Männer den Wert 1 erhalten. Im Kasten finden Sie das entsprechende Skript. Bevor Sie die Regression schätzen, überlegen Sie, welche Koeffizienten sich in der Tabelle ändern (und warum).

  • Lineare Regression:

    m1b <- lm(stflife ~ mann + verheiratet + alter, ess9de_m1)

    summary(m1b)

  • In Tabelle 24 sind die Ergebnisse der Regression dokumentiert. Bei den Koeffizienten haben sich zwei Werte geändert – die Angabe des Achsenabschnitts (Intercept) und der geschlechtsspezifische Effekt auf die Lebenszufriedenheit (mann). Inhaltlich sind die Ergebnisse aber identisch. Der Intercept beschreibt in Tabelle 24 jetzt unverheiratete Frauen im Alter von 0 Jahren. Dieser Wert liegt bei etwa 7,47. In Tabelle 23 handelt es sich um unverheiratete Männer im Alter von 0 Jahren. Die Differenz des Achsenabschnitts von 0,048507 (7,51822–7,469713) entspricht dem geschlechtsspezifischen Effekt. In Tabelle 23 bezieht sich der Regressionskoeffizient auf Frauen (- 0,048507) und in Tabelle 24 auf Männer (+0,048507).

  • Bei den Modellen unterscheidet sich jeweils nur die Perspektive – im ersten Modell sind Männer in der Regressionskonstante abgebildet, im zweiten Modell werden Frauen durch die Regressionskonstante erfasst. Die beiden anderen Koeffizienten (verheiratet und alter) bleiben unverändert. Personen, die verheiratet sind, haben eine höhere Lebenszufriedenheit als Befragte, die nicht verheiratet sind. Zwischen Alter und Lebenszufriedenheit ist der Zusammenhang – zumindest in diesem Modell – negativ. Je älter der Befragte, desto geringer die Lebenszufriedenheit. Je Lebensjahr sinkt die Lebenszufriedenheit um 0,0029 Skalenpunkte.

  • Wissenschaftliche Notation: Bei sehr kleinen Zahlen verwendet R die wissenschaftliche Notation. Der p-Wert beim Regressionskoeffizienten gesund.num liegt bei 2e-16, was mit 0,2*10-16 übersetzt wird, also ein sehr kleiner Wert. Die wissenschaftliche Notation kann mit der options-Funktion aber unterdrückt werden. Mit dem Argument scipen wird die Anzahl der Nachkommastellen festgelegt. Wenn mit options(scipen=99) die Anzahl der zulässigen Nachkommastellen auf 99 festgelegt wird, dann wird als p-Wert 0,0000000000000002 ausgegeben.



Interpretation der Ergebnisse (lineare Regression)


  • In diesem Abschnitt werden die zentralen Ergebnisse einer linearen Regression besprochen. Dabei werden drei Gruppen von Informationen unterschieden: die (unstandardisierten) Regressionskoeffizienten, Angaben zur Signifikanz und Informationen zur Modellgüte.


    Koeffizienten

  • Die Regressionskoeffizienten sind in der Spalte Estimate unter Coefficients aufgeführt. Es handelt sich um die sogenannten unstandardisierten Regressionskoeffizienten. Der unstandardisierte Regressionskoeffizient zeigt den Wert der aV an, wenn sich die uV um eine Einheit ändert. Einige Beispiele: Steigt das Alter um 15 Jahre, dann sinkt die durchschnittliche Lebenszufriedenheit um -0,04359 Punkte (-0,002906 * 15 = 0,04359). Die Variablen mann und verheiratet sind dummykodiert, sie haben nur die Werte 0 und 1. Als Regressionskoeffizienten sind jeweils die Ausprägungen 1 dargestellt. Männer haben eine um 0,048507 höhere Lebenszufriedenheit als Frauen, verheiratete Personen haben eine um 0,585669 höhere Lebenszufriedenheit als Befragte, die nicht verheiratet sind.

  • Der Intercept (Achsenabschnitt) wird häufig auch als Regressionskonstante bezeichnet. Der Intercept gibt die durchschnittliche Lebenszufriedenheit für die Personen an, bei denen alle uV den Wert 0 haben. Mit Blick auf die Angaben in Tabelle 24 handelt es sich um unverheiratete Frauen im Alter von 0 Jahren. Diese Personen haben eine durchschnittliche Lebenszufriedenheit von etwa 7,47 Skalenpunkten. Mit Hilfe der Konstante kann die durchschnittliche Lebenszufriedenheit für ausgewählte Personengruppen berechnet werden. Zum Beispiel:

    • – Wie hoch ist die Lebenszufriedenheit für verheiratete Frauen im Alter von 50 Jahren? Die geschätzte Lebenszufriedenheit ist rund 7,91. Das Ergebnis setzt sich aus dem Intercept (7,469713), dem Effekt des Familienstands (0,585669) und dem Alterseffekt (-0,1453 = 50 * -0,002906) zusammen.

    • – Wie hoch ist die Lebenszufriedenheit für unverheiratete Männer im Alter von 25 Jahren? Die geschätzte Lebenszufriedenheit ist rund 7,45. Das Ergebnis setzt sich aus dem Intercept (7,469713), dem geschlechtsspezifischen Effekt für Männer (0,048507) und dem Alterseffekt (-0,074015 = 25 * -0,002906) zusammen

    • Die Berechnung ausgewählter Merkmalskombination dient der Illustration. Im konkreten Fall wurde die Signifikanz der Werte nicht berücksichtigt.

    Signifikanz

  • Bei der bisherigen Ergebnisinterpretation wurden die empirischen Befunde so betrachtet, als würde eine Vollerhebung vorliegen. Dies ist in unserem Beispiel – und auch bei der Mehrheit der sozialwissenschaftlichen Daten – allerdings nicht der Fall. Beim European Social Survey handelt es sich um eine Zufallsstichprobe aus einer größeren Grundgesamtheit. Bei unseren Regressionskoeffizienten und dem Intercept handelt es sich um Schätzungen auf Basis unserer Stichprobe für die in der Grundgesamtheit geltenden Zusammenhänge. Wird aus der gleichen Grundgesamtheit eine andere Zufallsstichprobe „gezogen“, dann werden die Ergebnisse „etwas“ anders ausfallen. Dies wird auch als Stichprobenfehler bezeichnet.

  • Allerdings sind Forschende weniger an Regressionskoeffizienten und Konstanten einer Stichprobe interessiert, sondern wollen wissen, ob die Befunde (wahrscheinlich) auf die Grundgesamtheit übertragen werden dürfen. Mit anderen Worten: Auf Basis der Stichprobe stellen wir fest, dass sich die durchschnittliche Lebenszufriedenheit zwischen Frauen und Männern um etwa 0,049 Skalenpunkte unterscheidet. Können wir diesen Befund auf die Grundgesamtheit übertragen?

  • Das grundlegende Konzept, um diese Frage beantworten zu können, ist der Standardfehler (Koschack 2008; Kohler und Kreuter 2017, S. 224-229). R berechnet automatisch die Standardfehler (Std. Error) für die Konstante und die einzelnen Regressionskoeffizienten. Der Wert des unstandardisierten Regressionskoeffizienten und des Standardfehlers wird benötigt, um den tWert zu berechnen. Auf Grundlage des t-Werts wird entschieden, ob der Befund einer Stichprobe (wahrscheinlich) auf die Grundgesamtheit übertragen werden darf. Der t-Wert wird dabei wie folgt berechnet:

    t-Wert = unstandardisierter Regressionskoeffizient/ Standardfehler

  • Entsprechend ist der t-Wert des Geschlechts (0,048507/0,080006) = 0,606. In den Sozialwissenschaften wird in der Regel ein t-Wert größer als ± 1,96 als signifikantes Ergebnis gewertet. Alternativ kann die Signifikanz auch in der Spalte (Pr (>|t|)) abgelesen werden, die den p-Wert enthält. In den Sozialwissenschaften werden häufig drei Signifikanzniveaus unterschieden:

    – p-Wert kleiner als 0,05: signifikant

    – p-Wert kleiner als 0,01: hoch signifikant

    – p-Wert kleiner als 0,001: höchst signifikant

  • Allerdings ist die Differenzierung in der Literatur umstritten, da der t-Wert (eigentlich der Standardfehler) auch von der Fallzahl der Untersuchung abhängt. Mit steigender Fallzahl steigt auch die Wahrscheinlichkeit, ein signifikantes Ergebnis zu erhalten. In der Regel werden Werte kleiner als 0,05 als „signifikant“ gewertet (entspricht einem t-Wert größer als ± 1,96). Auf Grundlage dieser Konvention ist das Geschlecht und das Alter nicht signifikant. Die Zusammenhänge können nicht von der Stichprobe auf die Grundgesamtheit übertragen werden. Lediglich der Zusammenhang zwischen Familienstand und Lebenszufriedenheit lässt sich statistisch absichern.

  • Zur Erinnerung: Signifikanztests werden häufig falsch interpretiert. Auf Basis eines Signifikanztests wird entschieden, ob der Wert der Stichprobe wahrscheinlich auch in der Grundgesamtheit existiert. Ein signifikantes Ergebnis muss nicht inhaltlich bedeutsam sein. Die Entscheidung der inhaltlichen Bedeutsamkeit kann ausschließlich auf Basis theoretischer Überlegungen getroffen werden. Zwar sind bedeutsame Ergebnisse meist auch signifikant, aber signifikante Ergebnisse müssen nicht relevant sein

Modellgüte

  • Die Ergebnisse in Tabelle 24 enthalten auch Angaben zur Modellgüte. Dabei werden das R² (Multiple R-squared) und das korrigierte R² (Adjusted R-squared) unterschieden. Das R² liegt bei unserem Modell bei 0,02, das korrigierte R² bei 0,019. R² ist definiert als der Anteil der erklärten Varianz (MSS) an der Gesamtvarianz (TSS):

    R² = Anteil der erklärten Varianz (MSS)/ Gesamtvarianz (TSS)

  • R² liegt stets zwischen 0 und 1. Bei dem Beispiel liegt das R² bei 0,02, dies entspricht einer erklärten Varianz von 2 Prozent. Dies ist für sozialwissenschaftliche Analysen ein (sehr) geringer Wert. In der Forschungspraxis liegt R² häufig zwischen 0,2 und 0,4.

  • Häufig werden Regressionsmodelle ausschließlich auf Grundlage von R² bewertet. Dabei gilt ein möglichst hohes R² als Gütekriterium für ein Regressionsmodell. Diese Betrachtung von R² ist problematisch und nicht zulässig (Kohler und Kreuter 2017, S. 281). Auch Urban und Mayerl (2018, S. 56-61 und 101-103) warnen ausdrücklich vor einer oberflächlichen Betrachtung des R²- Werts und nennen mehrere Ursachen für einen geringen Wert von R². Ein geringes R² kann unter anderem auf die fehlerhafte Messung von Variablen, die Nicht-Berücksichtigung wichtiger unabhängiger Variablen oder auch eine fehlerhafte Modellspezifikation zurückzuführen sein.

  • Ein Problem von R² ist auch, dass es mit der Anzahl der berücksichtigten unabhängigen Variablen steigt. Je mehr Variablen in einem Regressionsmodell berücksichtigt werden, desto größer das R². Dabei müssen die einzelnen Variablen keine Rolle bei der Erklärung der Varianz spielen. Dieses Problem wird mit dem korrigierten R² (Adjusted R-squared) entschärft, da hier die Anzahl der unabhängigen Variablen berücksichtigt wird. Deshalb ist das korrigierte R² stets etwas kleiner als das R². Bei hoher Fallzahl und vergleichsweise wenigen unabhängigen Variablen sind diese Unterschiede allerdings vernachlässigbar. Bei Veröffentlichungen wird deshalb meist das korrigierte R² ausgewiesen.



Standardisierte Koeffizienten


  • Der Vergleich der Effektstärken beim Alter (alter) und der Gesundheit (gesund.num) wird durch den unterschiedlichen Wertebereich erschwert. Bei der Gesundheit ist der Wertebereich 0 bis 4, beim Alter ist der Wertebereich 15 bis 90. Für einen besseren Vergleich der Effektstärken werden in Veröffentlichungen gelegentlich die standardisierten Koeffizienten – die sogenannten Beta-Koeffizienten – ausgewiesen, die wie folgt berechnet werden:

    Beta-Koeffizient = unstandardisierter Koeffizient * Standardabweichung uV/ Standardabweichung aV

  • In R werden die standardisierten Regressionskoeffizienten zwar nicht direkt ausgewiesen, aber mit dem Paket lm.beta können diese unkompliziert angefordert werden. Dazu wird das Objekt m2a.beta erstellt, das die Ergebnisse enthält. Die Funktion lm.beta wird auf das existierende Regressionsobjekt angewendet. Mit der summary-Funktion werden die Ergebnisse angefordert.

  • Lineare Regression (Standardisierte Koeffizienten):

    m2a.beta <- lm.beta(m2a)

    summary(m2a.beta)

  • In Tabelle 26 werden die Regressionsergebnisse dokumentiert, bei der eine neue Spalte (Standardized) hinzugefügt wurde. Diese Spalte enthält die standardisierten Regressionskoeffizienten und erlaubt eine einfache Interpretation der Effektstärke. Die standardisierten Regressionskoeffizienten werden wie folgt interpretiert: Ändert sich die unabhängige Variable um eine Standardabweichung, dann zeigt der Koeffizient die Veränderung der aV ebenfalls in Standardabweichungen an. Zum Beispiel: Steigt das Alter um eine Standardabweichung, dann steigt die Lebenszufriedenheit um knapp 0,08 Standardabweichungen. Steigt die subjektive Gesundheit um eine Standardabweichung, dann steigt die Lebenszufriedenheit um knapp 0,35 Standardabweichungen. Der Effekt der Gesundheit auf die Lebenszufriedenheit ist deutlich stärker als der Effekt des Alters auf die Lebenszufriedenheit.

  • Die standardisierten Regressionskoeffizienten bieten eine andere Perspektive auf die Regressionsergebnisse, die substanziellen Ergebnisse verändern sich nicht. Das Alter und die subjektive Gesundheit haben jeweils einen positiven Effekt auf die Lebenszufriedenheit. Die standardisierten Koeffizienten bieten lediglich einen direkten Vergleich der Effektstärken, der aufgrund unterschiedlicher Wertebereiche nicht immer direkt abzulesen ist.

  • Die Verwendung bzw. die Interpretation standardisierter Regressionskoeffizienten ist allerdings in bestimmten Situationen problematisch (für einen Überblick siehe z.B. Wolf und Best 2010b, S. 625-628), unter anderem ist die Interpretation bei dichotomen Variablen nicht zulässig (Kohler und Kreuter 2017, S. 288). Streng genommen dürften die standardisierten Regressionskoeffizienten beim Geschlecht (frau) und Familienstand (verheiratet) nicht interpretiert werden, da es sich um dichotome Variablen handelt.


Faktoren in Regressionen


  • Bei den bisherigen Modellen wurde die subjektive Gesundheit (gesund.num) als pseudometrische Variable interpretiert, da sie fünf Ausprägungen hat (sehr schlecht, schlecht, ok, gut und sehr gut). Allerdings ist es eine empirische Frage, ob die Abstände zwischen den Ausprägungen von den Befragten als gleich wahrgenommen werden. Die Variable könnte auch als kategoriale Variable mit mehreren Ausprägungen interpretiert werden, die ordinalskaliert sind. Eine solche Variable sollte in R den Objekttyp Faktor haben. Bei einer Regression werden dann automatisch Dummyvariablen für die einzelnen Ausprägungen erstellt (zum Vergleich: in SPSS müssten separat einzelne Variablen erstellt werden).

  • Mit dem Skript im Kasten werden Häufigkeitstabellen der Variablen gesund.num und gesund angefordert. Die beiden Variablen sind inhaltlich identisch, aber die Variable gesund.num ist als numerischer Objekttyp und die Variable gesund als Faktor angelegt. Der Objekttyp wird mit der class-Funktion abgefragt. In der folgenden Regression wird die Variable gesund anstelle der Variable gesund.num aufgenommen. Die Ergebnisse werden im Modell m2b gespeichert und anschließend mit der summary-Funktion in der Console dargestellt.

  • Lineare Regression (mit Faktorvariable):

    frq(ess9de_m1, gesund.num, gesund)

    class(ess9de_m1$gesund.num)

    class(ess9de_m1$gesund)

    m2b <- lm(stflife ~ frau + verheiratet + alter + gesund, ess9de_m1)

    summary(m2b)

  • In Tabelle 27 werden die Regressionsergebnisse dokumentiert. Für die subjektive Gesundheit wird jetzt nicht mehr ein Regressionskoeffizient ausgewiesen, sondern vier Regressionskoeffizienten. Der Regressionskoeffizient für die Gruppe „sehr schlecht“ ist in der Regressionskonstante enthalten. Der Koeffizient gesund1 bezieht sich auf die Personen mit schlechter Gesundheit, der Koeffizient gesund2 auf die Befragten, die Ihre Gesundheit als „ok“ bewerten, der Koeffizient gesund3 umfasst die Befragten mit guter Gesundheit und der Koeffizient gesund4 bezieht sich auf alle Personen, die ihre Gesundheit als „sehr gut“ bewerten. Die einzelnen Regressionskoeffizienten sind immer in Bezug zur Referenzkategorie (sehr schlechte Gesundheit) zu interpretieren. Die Befragten mit sehr guter Gesundheit (gesund4) haben eine um etwa 3,78 Punkte höhere Lebenszufriedenheit als Personen mit sehr schlechter Gesundheit (Referenzgruppe) bei Berücksichtigung des Familienstands, des Alters und des Geschlechts.

  • Die Koeffizienten sind für alle Gesundheitsgruppen positiv und signifikant. Je besser die subjektive Gesundheit, desto besser die Lebenszufriedenheit. Der Effekt ist aber nicht linear, sondern schwächt sich über die einzelnen Gruppen ab. Von gesund2 (ok) zu gesund3 (gut) ist der Unterschied rund 0,79 Punkte, der Unterschied von gesund3 (gut) zu gesund4 (sehr gut) beträgt rund 0,46 Punkte. Dies deutet darauf hin, dass der Zusammenhang von Gesundheit und Lebenszufriedenheit nicht streng linear ist und die Betrachtung als ordinale Variable angemessener ist. Auch das (korrigierte) R² ist mit 13,65 Prozent etwas besser als im Modell mit der numerischen Gesundheitsvariable (13,08 Prozent). Die substanziellen Ergebnisse sind aber vergleichbar. Je besser die Gesundheit, desto zufriedener die Befragten.

  • Für das Beispiel wurde die Variable gesund genutzt, die als Faktorvariable spezifiziert war. Grundsätzlich kann auch die numerische Variable gesund.num genutzt werden. Dann wird in der Regressionsgleichung zusätzlich die as.factor-Funktion auf die Variable angewendet. Die numerische Variable wird dann als Faktor betrachtet und R erstellt im Hintergrund Dummyvariablen für die einzelnen Gruppen. Die Ergebnisse sind identisch (tabellarisch nicht ausgewiesen).

  • Lineare Regression (mit Faktorvariable):

    m2c <- lm(stflife ~ frau + verheiratet + alter + as.factor(gesund.num), ess9de_m1)

    summary(m2c)



Ausgabe der Regressionstabelle


  • Die Ausgaben der Regressionstabelle in der Console sind zweckmäßig, aber sie sollten in dieser Form nicht in wissenschaftlichen Arbeiten verwendet werden. Mittlerweile gibt es zahlreiche Zusatzpakete, um die Ausgabe der Tabellen ansprechender zu gestalten. Mit der Funktion tab_model aus dem sjPlot-Paket lassen sich deutlich „schönere“ Regressionstabellen erstellen.

  • In der Klammer der Funktion tab_model wird das Regressionsmodell genannt (m2b). Beim ersten Beispiel wird auf Argumente verzichtet. Die Ausgabe der Regressionstabelle erfolgt im Viewer im rechten, unteren Fenster. Beim zweiten Beispiel wird die Ausgabe der Tabelle mit Argumenten angepasst. Mit den show-Argumenten wird festgelegt, welche Koeffizienten ausgegeben werden. Es werden die unstandardisierten Regressionskoeffizienten, die t-Werte (show.stat), die Standardfehler (show.se) und die p-Werte (show.p) explizit angefordert, die Ausgabe der Konfidenzintervalle (show.ci) wird deaktiviert. Mit dem Argument p.style wird das Layout der signifikanten Koeffizienten festgelegt, mit col.order wird die Reihenfolge der Spalten spezifiziert. Das Skript enthält nur einige ausgewählte Spezifikationen, die für die meisten Darstellungen ausreichend sein sollten. Eine Übersicht aller Argumente bietet die Dokumentation (?tab_model)

  • Lineare Regression (Regressionstabellen):

    tab_model(m2b)

    tab_model(m2b,

    show.stat = TRUE,

    show.se = TRUE,

    show.p = TRUE,

    show.ci = FALSE,

    p.style = c("numeric_stars"),

    col.order = c("est", "se", "stat", "p"))

  • In Tabelle 28 ist mit der Funktion tab_model erstellte Regressionstabelle dokumentiert. Die Tabelle enthält auch Informationen zur Fallzahl (Observations) sowie zum R² und zum korrigierten R². Auch die Ausgabe der Variablennamen ist besser interpretierbar als die klassische R-Ausgabe in der Console.


  • Informationen zu einer linearen Regression:


    Funktion

    Beschreibung

    summary(m2a)

    Zusammenfassung des Regressionsmodells

    coefficients(m2a)

    Ausgabe der unstandardisierten Regressionskoeffizienten

    confint(m2a)

    Ausgabe der Konfidenzintervalle der Regressionskoeffizienten

    nrow(m2a$model)

    Ausgabe der Fallzahl des Regressionsmodells

    fitted(m2a)

    Ausgabe der geschätzten Werte für jeden Befragten (lange Liste)

    resid(m2a)

    Ausgabe der Fehler für jeden Befragten (lange Liste)

    plot(m2a)

    Grafiken zur Regressionsdiagnostik


Anwendungsvoraussetzungen (für lineare Regression)


  • Lineare Regressionsmodelle lassen sich mit moderner Statistiksoftware unkompliziert schätzen. Die Ergebnisse einer linearen Regression sollten allerdings nur dann interpretiert werden, wenn eine Reihe von Annahmen erfüllt sind (siehe ausführlich z.B. Berry 1993; Wolf und Best 2015; Kohler und Kreuter 2017, S. 290-323). Urban und Mayerl (2018, S. 116) nennen vier zentrale Annahmen der linearen Regression:

    • 1. Die Residuen haben den Erwartungswert Null (Lineare Beziehung) 2. Die Residuen haben die gleiche Varianz (Homoskedastizität)

      3. Die Residuen sind voneinander unabhängig (keine Autokorrelation)

      4. Die Residuen sind von den Werten der uV unabhängig (keine Korrelation mit den uV)

  • Diese Annahmen beruhen auf dem sogenannten Gauß-Markov-Theorem. Wenn sie erfüllt sind, dann liefert das OLS-Verfahren bestmögliche Schätzungen. Es handelt sich dann um sogenannte BLUE-Schätzer. BLUE ist die Abkürzung für best linear unbiased estimator. Solche BLUE-Schätzer haben zwei besonders wünschenswerte Eigenschaften: Sie sind erwartungstreu (unverzerrt) und effizient. Mit erwartungstreu ist gemeint, dass keine systematischen Unter- oder Überschätzungen zu befürchten sind (etwas formaler: bei vielen Schätzungen entspricht der Mittelwert der Schätzungen dem „wahren“ Wert). Effizienz bezieht sich auf die Präzision, die Schätzung ist möglichst genau.

  • Diese vier Voraussetzungen – je nach Lehrbuch werden auch drei (Kohler und Kreuter 2017, S. 291-310), fünf (Hartmann et al. 2022, S. 117), sechs (Meuleman et al. 2015), sieben (Backhaus et al. 2018, S. 90), acht (Berry 1993, S. 12) oder auch elf Bedingungen (Ohr 2010) genannt – werden im Folgenden knapp vorgestellt. Auf die Darstellung der mathematisch-statistischen Grundlagen wird an dieser Stelle verzichtet (siehe hierzu z.B. Berry 1993; Ohr 2010; Kohler und Kreuter 2017; Urban und Mayerl 2018). Die Ausführungen sollen in erster Linie zur Sensibilisierung beitragen, Ergebnissen von Regressionsmodellen nicht einfach „blind“ zu vertrauen.

  • Lineare Beziehung: Eine zentrale Annahme für die Angemessenheit einer linearen Regression ist, dass es sich bei dem postulierten Zusammenhang auch wirklich um einen linearen Zusammenhang handelt. Das mag zunächst trivial klingen, aber bereits bei der Hypothese „Je älter eine Person, desto höher das Einkommen“ ist die Linearitätsannahme kritisch zu hinterfragen. Spätestens mit dem Rentenbeginn wird das Einkommen bei den meisten Personen nicht mehr linear zunehmen bzw. unterscheidet sich die Steigung vor und nach dem Rentenbeginn. Die lineare Beziehung von zwei Merkmalen kann allerdings auch durch einflussreiche Beobachtungen (z.B. Personen mit einem extrem hohen Einkommen) oder nicht-berücksichtigte Prädiktoren beeinflusst werden.

  • Homoskedastizität: Die zweite Annahme des Gauß-Markov-Theorems ist, dass die Varianz der Fehler für alle Werte der unabhängigen Variablen gleich sein soll. Zur Erinnerung: Fehler (Residuen) sind die Differenzen zwischen den geschätzten (ŷi) und den empirischen (yi) Werten. Die Varianz dieser Fehler soll möglichst für alle Werte der unabhängigen Variablen konstant sein. Dies wird als Homoskedastizität bezeichnet. Die Verletzung dieser Annahme wird als Heteroskedastizität bezeichnet

  • Keine Autokorrelation: Mit Autokorrelation ist gemeint, dass die Fehlerterme voneinander abhängig sind. Ein Fehlerterm darf nicht deshalb hoch oder gering sein, weil der benachbarte Fehlerterm ebenfalls hoch oder gering ist. Das Problem der Autokorrelation ist insbesondere bei Regressionsanalysen mit Zeitreihendaten festzustellen, „da zeitlich aufeinanderfolgende Beobachtungen einander ähnlicher sind als zeitlich weit auseinanderliegende Beobachtungen“ (Kohler und Kreuter 2017, S. 310). Allerdings sind auch räumliche Abhängigkeiten denkbar. So werden Befragte, die in einer Region leben, meist vom gleichen Interviewer befragt. Dieser Interviewer zeichnet sich möglicherweise durch besondere Betonungen beim Vorlesen der Fragetexte aus, sodass es Fehlerterme gibt, die für alle Befragten in dieser Region identisch sind.

  • Keine Korrelation mit den uV: Die Fehlerterme sollen nicht mit den unabhängigen Variablen korrelieren. Eine Korrelation zwischen den unabhängigen Variablen und dem Fehlerterm könnte darauf hindeuten, dass bei der Spezifikation des Regressionsmodells wichtige Erklärungsfaktoren nicht berücksichtigt wurden, die aber mit den berücksichtigten uV korrelieren. Die Konsequenz wären verzerrte Regressionskoeffizienten.

  • Für die Überprüfung dieser Annahmen stehen zahlreiche Verfahren zur Verfügung, die unter dem Begriff „Regressionsdiagnostik“ zusammengefasst werden (Meuleman et al. 2015; Kohler und Kreuter 2017; Urban und Mayerl 2018; Fox und Weisberg 2019). „Kleinere“ Modellverstöße sind in der Regel unproblematisch. Vor der Durchführung eigener empirischer Analysen ist aber ein Blick in die einschlägigen Lehrbücher zu empfehlen.



Praktische Hinweise (zur linearen Regression)


  • Erforderliche Fallzahl: Bei der Regression handelt es sich um ein quantitatives Analyseverfahren, das eine ausreichend große Fallzahl voraussetzt. Tabachnik und Fidell (2014, S. 159) nennen einige Daumenregeln. Für die Prüfung einzelner Beziehungen empfehlen sie eine Fallzahl von N ≥ 104 + Anzahl der uV. Bei der Analyse mit sechs unabhängigen Variablen ergibt sich damit eine Mindestfallzahl von 110. Bei der Untersuchung von multiplen Korrelationen sollte die Fallzahl mindestens N ≥ 50 + 8*Anzahl der uV sein. Bei sechs unabhängigen Variablen ergibt sich damit eine Mindestanzahl von 98 Beobachtungen. Backhaus et al. (2018, S. 118) verzichten auf die Nennung einer Mindestanzahl an Beobachtungen und empfehlen, dass die Zahl der Beobachtungen mindestens doppelt so groß sein sollte wie die Anzahl der Variablen

  • Konstante Fallzahl: Bei der Prüfung von Hypothesen werden Regressionsmodelle häufig schrittweise aufgebaut. Ein Beispiel: Die Determinanten des politischen Wissens lassen sich drei Erklärungsgruppen zuordnen: Fähigkeiten, Motivation und Gelegenheit (z.B. Tausendpfund 2020b, S. 91). In einem ersten Schritt werden Merkmale berücksichtigt, die die individuellen Fähigkeiten der Personen abbilden (z.B. Bildung). In einem zweiten Schritt werden Eigenschaften in das Modell aufgenommen, die die Motivation der Befragten abbilden (z.B. politisches Interesse). In einem dritten Schritt werden schließlich Merkmale berücksichtigt, die den Aspekt der „Gelegenheit“ (z.B. Medienkonsum) erfassen. Bei einem solchen schrittweisen Aufbau von Regressionsmodellen ist auf eine konstante Fallzahl zu achten. Je mehr Merkmale in einem Regressionsmodell aufgenommen werden, desto geringer ist häufig – bedingt durch Item-Nonresponse – die Fallzahl. Damit unterschiedliche Ergebnisse auf spezifische Merkmale und nicht auf eine geänderte Fallzahl zurückgeführt werden können, muss die Fallzahl jeweils identisch sein (d.h. die Fallzahl sollte sich nicht durch die Aufnahme weiterer Merkmale verringern).

  • Verschiedene Kodierungen testen: Für viele Konzepte (z.B. Bildung) sind unterschiedliche Operationalisierungen und Kodierungen denkbar. Für die Bildung kann beispielsweise der allgemeine Schulabschluss oder auch die Anzahl der Bildungsjahre genutzt werden. Darüber hinaus kann sich auch die Kodierung einer Variable unterscheiden (z.B. Umgang mit „weiß nicht“ und/oder „Angabe verweigert“). In vielen Fällen bietet es sich an, verschiedene Operationalisierungen und/oder Kodierungen zu testen. Wenn verschiedene Operationalisierungen/Kodierungen zu vergleichbaren Ergebnissen führen, dann stärkt dies das Vertrauen in die empirischen Befunde.

  • Erst Theorie, dann Empirie: Bei der Regression handelt es sich um ein hypothesentestendes Verfahren. Auf Grundlage theoretischer Überlegungen und existierender Befunde sind gehaltvolle Hypothesen zu entwickeln, die empirisch geprüft werden. Grundsätzlich sollten in Regressionsmodelle nur Variablen (Merkmale) aufgenommen werden, für die plausible Hypothesen formuliert werden können. Bis zu einem gewissen Grad ist die Modellbildung sicherlich ein „iterativer Prozess“ (Backhaus et al. 2018, S. 119), bei dem neue Variablen aufgenommen und insignifikante Regressionskoeffizienten entfernt werden. Allerdings sollte dieser Prozess stets theoriegeleitet ablaufen

  • Multikollinearität berücksichtigen: Multikollinearität liegt vor, wenn zwei oder mehr erklärende Variablen (uV) eine starke Korrelation aufweisen (Backhaus et al. 2018, S. 98-102). Ein Beispiel: Sie wollen die Determinanten der Lebenszufriedenheit (aV) identifizieren und berücksichtigen dafür die unabhängigen Variablen Bildung und Einkommen. Selbstverständlich werden die Merkmale Bildung und Einkommen korrelieren. Bei einer (sehr) starken Korrelation der uV können allerdings die Regressionskoeffizienten nicht mehr zuverlässig geschätzt werden. Deshalb deuten Korrelationen größer als 0,9 zwischen den unabhängigen Variablen auf ein ernsthaftes Multikollinearitätsproblem hin. In diesem Fall sollte eine entsprechende Variable nicht im Modell berücksichtigt werden. Mit Toleranz und dem Variance Inflation Factor (VIF) gibt es zwei Maßzahlen, die genutzt werden, um Multikollinearität festzustellen. Geringe Toleranzwerte (< 0,01) und hohe VIF-Werte (10) deuten auf starke Multikollinearität hin

  • Darstellung der Ergebnisse: Die Ergebnisse einer Regression sind angemessen zu präsentieren. Grundsätzlich verbietet es sich, den R-Output – so wie in dieser Lerneinheit – einfach zu kopieren. Kryptische Variablennamen sind zu vermeiden. Stattdessen sind aussagekräftige Namen zu verwenden (also Bildung statt educ). Dies erlaubt eine schnelle Interpretation der berichteten Ergebnisse. Unterhalb einer Tabelle sind Angaben zum Verfahren, zu den dargestellten Regressionskoeffizienten sowie zum Signifikanzniveau erforderlich. Neben einschlägigen Fachzeitschriften bietet Miller (2005, 2015) zahlreiche Hinweise zur angemessenen Gestaltung von wissenschaftlichen Tabellen.


Logistische Regression


  • In den Sozialwissenschaften werden viele Fragestellungen untersucht, bei denen die zu erklärende Variable nur zwei Ausprägungen annehmen kann (sogenannte dichotome oder binäre Variablen). Typische Variablen sind etwa die Wahlbeteiligung, der Kauf eines bestimmten Produkts oder auch der Tabakkonsum. Diese Fragestellungen sind dadurch gekennzeichnet, dass die abhängige Variable nur zwei Werte annehmen kann: Ja oder Nein. Dabei wird Ja mit 1 und Nein mit 0 kodiert. In Tabelle 30 sind die Angaben von zehn fiktiven Befragten zum Tabakkonsum und Alter dokumentiert. Die Variable „Rauchen“ ist dabei so kodiert, dass ein Nichtraucher den Wert 0 und ein Raucher den Wert 1 erhält. Die Befragten mit den Identifikationsnummern 1, 3, 4 und 5 sind Raucher, die anderen Personen sind Nichtraucher. Die unabhängige Variable ist das Alter der Befragten in Jahren

  • In Abbildung 19 sind die Angaben der zehn Befragten in einem Streudiagramm (engl. scatter plot) eingetragen. Die Werte der Personen werden dabei nur auf zwei horizontalen Linien eingetragen: auf der Linie 0 (Nichtraucher) und auf der Linie 1 (Raucher). Eine einfache Möglichkeit, den Zusammenhang zwischen Alter (metrische Variable) und Tabakkonsum (dichotome Variable) zu untersuchen, bietet die lineare Regression (OLS). Dazu wird in das Streudiagramm in Abbildung 19 eine Regressionsgerade eingezeichnet. Die geschätzte abhängige Variable ŷ ist dann allerdings nicht mehr dichotom (Nichtraucher versus Raucher), sondern metrisch. Eine Person mit 40 Jahren hat einen geschätzten ŷ-Wert von ungefähr 0,35. Wie kann dieser Wert jetzt sinnvoll interpretiert werden, wenn ein Befragter entweder Nichtraucher (0) oder Raucher (1) ist?

  • Der vorhergesagte Wert einer dichotomen Variable mit den Ausprägungen 0 und 1 kann als Wahrscheinlichkeit interpretiert werden. Ein geschätzter ŷ-Wert von 0,35 entspricht dann einer Wahrscheinlichkeit von 0,35 oder 35 Prozent. Entsprechend können alle Werte auf der Regressionsgeraden als Wahrscheinlichkeiten interpretiert werden. Aufgrund dieser Interpretationsmöglichkeit und der linearen Modellierung wird dieses Verfahren auch als lineares Wahrscheinlichkeitsmodell (linear probability model) bezeichnet

  • Mit Blick auf die Regressionsgerade in Abbildung 19 werden für Befragte ab 56 Jahren negative Wahrscheinlichkeiten geschätzt. Wie können diese Werte interpretiert werden? Eigentlich gar nicht, da Wahrscheinlichkeiten per Definition nur zwischen 0 und 1 liegen können. Das lineare Wahrscheinlichkeitsmodell schätzt also Werte, die es logisch nicht geben kann. Dies ist ein Problem der Anwendung der linearen Regression bei dichotomen aVs. In der Literatur wird unter anderem auf folgende Probleme der linearen Regression bei dichotomen aVs hingewiesen:

    • – Für kleine und große Werte der unabhängigen Variablen werden Wahrscheinlichkeiten größer 1 bzw. kleiner 0 geschätzt.


    • – Eine Voraussetzung der linearen Regression ist die Homoskedastizität. Damit ist gemeint, dass die Varianz der Residuen möglichst für alle Werte der unabhängigen Variable konstant ist. Die Varianz der Residuen im linearen Wahrscheinlichkeitsmodell ist aber umso größer, je näher sich die vorhergesagten Werte an 0,5 annähern. Die Residuen des linearen Wahrscheinlichkeitsmodells sind damit per Definition heteroskedastisch (Kohler und Kreuter 2017, S. 354-355). Die Konsequenz sind verzerrte Standardfehler, Konfidenzintervalle und Signifikanztests.

    • Die lineare Regressionsgerade ist vermutlich für viele Fragestellungen nicht angemessen. Es wird argumentiert, dass sich die Wahrscheinlichkeiten in den Extrembereichen 0 und 1 nicht linear, sondern allmählich annähern (Best und Wolf 2010, S. 829)

  • Aus diesen Gründen eignet sich die OLS-Regression nicht für dichotome abhängige Variablen. Mit der logistischen Regression wurde ein Modell entwickelt, welches einerseits Wahrscheinlichkeiten zwischen 0 und 1 schätzt und andererseits die theoretischen Annahmen erfüllt. Die logistische Regression unterscheidet sich in zwei zentralen Punkten von der linearen Regression. Erstens wird statt einer linearen Regressionsgerade eine nicht-lineare Regressionskurve geschätzt. Zweitens wird bei der Schätzung der Regressionsparameter nicht auf das Kleinste-Quadrate-Verfahren (OLS), sondern auf das Maximum-Likelihood-Prinzip zurückgegriffen. Beide Unterschiede werden im Folgenden knapp vorgestellt (für eine ausführlichere Darstellung siehe z.B. Best und Wolf 2010; Behnke 2015; Kohler und Kreuter 2017, S. 355-364).

Nichtlineare Regressionskurve

  • Abbildung 20 zeigt eine allgemeine logistische Regressionsfunktion, die einen typischen s-förmigen Verlauf hat. Die Abbildung zeigt, dass die Regressionskurve immer innerhalb der Grenzen von 0 und 1 bleibt. Sie nähert sich zwar asymptotisch den Werten 0 und 1 an, überschreitet diese Grenzen aber niemals (Kohler und Kreuter 2017, S. 359). Zudem erlaubt dieser nicht-lineare Verlauf häufig eine bessere Anpassung an die Daten, da eine Veränderung der unabhängigen Variable um eine Einheit (z.B. ein Anstieg des Alters um ein Jahr) nicht an allen Stellen der Funktion die gleiche Wirkung auf die abhängige Variable hat (z.B. Raucher oder Nichtraucher). Im Bereich sehr kleiner und sehr großer x-Werte (also bei sehr jungen bzw. sehr alten Befragten) sind die Veränderungen nur sehr gering; starke Effekte der unabhängigen Variable auf die abhängige Variable finden sich im mittleren Bereich der unabhängigen Variable

  • Die allgemeine Logit-Funktion in Abbildung 20 lässt sich mathematisch wie folgt beschreiben: P (y=1) = eβ0+β1x1+β2x2+...+βkxk / 1+eβ0+β1x1+β2x2+...+βkxk = eLogit/ 1+eLogit

  • In der Gleichung ist neben der Eulerschen Zahl (e~2,718) mit Logit die Regressionsgleichung gemeint. Die Regressionsgleichung lautet:

    Logit (Li) = β0 + β1x1 + β2x2+. . . +βkxk

  • Die Struktur der logistischen Regressionsgleichung bzw. der Logit-Funktion ist der linearen Regressionsgleichung sehr ähnlich. Mit β0 (alternativ: α) wird der Achsenabschnitt bezeichnet, mit β1, β2, usw. die Steigungskoeffizienten. Die Basisgleichung der logistischen Regression ist zwar linear, aber eben nicht linear in Bezug auf die geschätzten Wahrscheinlichkeiten.

    P (y=1) = eLogit/ 1+eLogit

  • Deshalb ist die logistische Regressionsfunktion auf den ersten Blick sehr unpraktisch, aber der s-förmige Verlauf ist – wie oben dargestellt – erforderlich, um geschätzte Wahrscheinlichkeiten kleiner als 0 bzw. größer als 1 zu vermeiden. Die Transformation der linearen Regressionsgleichung in eine Logit-Funktion hat allerdings auch Konsequenzen für die Interpretation der Ergebnisse. Logistische Regressionskoeffizienten sind deutlich weniger anschaulich als die unstandardisierten Regressionskoeffizienten der linearen Regression.

Schätzverfahren

  • Bei der linearen Regression wird zur Schätzung der Regressionskoeffizienten – also zur Schätzung des Achsenabschnitts (α) und der Steigungskoeffizienten (β) – das OLS-Prinzip verwendet. Aus verschiedenen Gründen wird bei der logistischen Regression ein anderes Verfahren verwendet: das Maximum-Likelihood-Verfahren (Gautschi 2010). Dabei handelt es sich um ein iteratives Vorgehen. Es werden schrittweise verschiedene Werte für die Regressionsgewichte (also Achsenabschnitt und Steigungskoeffizienten) geschätzt. Kohler und Kreuter (2017, S. 363) umschreiben dieses Vorgehen als „raffiniertes Ausprobieren“. Gautschi (2010, S. 207) beschreibt das Maximum-Likelihood-Prinzip wie folgt: „Bestimme die unbekannten Schätzparameter so, dass die Wahrscheinlichkeit der Beobachtung der gegebenen Werte der abhängigen Variable so hoch wie möglich ist.“

  • Beim Maximum-Likelihood-Verfahren wird diejenige Kombination von Regressionskoeffizienten gesucht, mit denen sich die empirischen Werte der aV möglichst gut reproduzieren lassen. Mit anderen Worten: Die Regressionskurve soll möglichst gut auf die Daten passen. Das iterative Vorgehen bei der Maximum-Likelihood-Schätzung wird erleichtert, wenn die logarithmierte Likelihood-Funktion (LL) verwendet wird (Kohler und Kreuter 2017, S. 363; siehe für die mathematische Umformung: Best und Wolf 2010, S. 837; Gautschi 2010). Die logarithmierte Likelihood-Funktion kann Werte zwischen -∞ und 0 annehmen. Dieser Wert bildet die Grundlage für die Bewertung der Modellgüte.


Logistische Regression mit R


  • Die nicht-lineare Funktion (Logit-Funktion) und das iterative Maximum-Likelihood-Verfahren erschweren zwar das Verständnis der logistischen Regression, aber die Schätzung einer logistischen Regression mit R ist vergleichsweise einfach. Im Kasten ist das R-Skript für die Schätzung einer logistischen Regression mit den Beispieldaten dokumentiert. Zur Erinnerung: Die abhängige Variable ist rauchen, die unabhängige Variable das Alter in Jahren (alter)

  • Logistische Regression mit R:

    rauchen1 <- glm(rauchen ~ alter, family=binomial(link=logit), data=rauchen)

    summary(rauchen1)

  • In Tabelle 31 sind die Regressionskoeffizienten der logistischen Regression dokumentiert. Die Ergebnistabelle weist starke Ähnlichkeiten mit der Ergebnistabelle aus der linearen Regression auf. Allerdings werden die Regressionskoeffizienten (Estimate) anders interpretiert.

  • Der Alterseffekt kann an dieser Stelle wie folgt interpretiert werden: Steigt das Alter des Befragten um ein Jahr, dann sinkt die logarithmierte Chance, ein Raucher zu sein, um 0,132. Diese Interpretation ist nicht sehr zugänglich, da die meisten Menschen vermutlich keine Vorstellung von logarithmierten Chancen haben. Deshalb werden bei logistischen Regressionen häufig nur die Vorzeichen interpretiert. Entsprechend deutet ein negatives Vorzeichen auf eine geringere logarithmierte Chance hin, ein Raucher zu sein. Ein positives Vorzeichen würde auf eine höhere logarithmierte Chance hindeuten, ein Raucher zu sein.

  • Die Ergebnisse in Tabelle 31 enthalten die Angaben für die Logit-Funktion: Logit (Li) = 4,251+(−0,132 ∗ alter)

  • Die Wahrscheinlichkeit ein Raucher zu sein, lässt sich mit folgender Funktion darstellen. P (y=1) = e4,251+(−0,132∗alter)/ 1+e4,251+(−0,132∗alter)

  • In Abbildung 21 wird die logistische Regression mit den Beispieldaten dargestellt. Charakteristisch für eine logistische Regression ist der s-förmige Verlauf der Funktion. Insgesamt bietet dieser Funktionsverlauf eine bessere Anpassung an die Daten als das lineare Wahrscheinlichkeitsmodell (siehe Abbildung 19). Zudem werden keine Werte geschätzt, die es per Definition nicht geben kann.

  • Bei der logistischen Regression handelt es sich um eine Form des allgemeinen linearen Modells (generalized linear model). Solche Modelle werden in R mit der glm-Funktion geschätzt. Diese Funktion weist einige Ähnlichkeiten zur lm-Funktion auf, aber beinhaltet auch einige zusätzliche Argumente. Die allgemeine Funktion ist:

    glm(formula, family=family(link=function), data)

  • Mit formula wird die Regressionsgleichung spezifiziert. Analog zur linearen Regression wird zunächst die abhängige Variable aufgenommen, die 0/1 kodiert ist. Nach der Tilde (~) werden die unabhängigen Variablen aufgeführt, die mit einem Plus-Zeichen getrennt werden. Mit der glm-Funktion kann eine Vielzahl verschiedener Regressionsmodelle spezifiziert werden. Eine logistische Regression wird mit den Argumenten binomial (family) und logit (link) festgelegt. Am Ende der Funktion wird der Datensatz genannt.

  • Mit dem Skript im Kasten werden zunächst Häufigkeitstabellen der Variablen ausgegeben. Die Variable wahl erfasst die Wahlbeteiligung. Personen, die gewählt haben, haben den Wert 1. Nichtwählende haben den Wert 0. Die Variable alter erfasst das Alter der Befragten in Jahren. Die Variable polint informiert über das politische Interesse. Dabei werden vier Gruppen unterschieden: kein, kaum, ziemliches und starkes politisches Interesse. Die Variable bildung erfasst das individuelle Bildungsniveau. Dabei werden drei Gruppen unterschieden: geringe, mittlere und hohe Bildung. Bei den Variablen polint und bildung handelt es sich um kategoriale Variablen, die als Faktoren spezifiziert sind. Bei der Schätzung der logistischen Regression wird R automatisch Dummyvariablen für die einzelnen Gruppen bilden. Beim politischen Interesse bildet kein Interesse und bei der Bildung das geringe Bildungsniveau die Referenzgruppe. Die Regressionskoeffizienten sind immer mit Blick auf die entsprechende Referenzgruppe zu interpretieren.

  • Logistische Regression:

    frq(ess9de_m1, wahl, alter, polint, bildung)

    m_wahl1 <- glm(wahl ~ alter + polint + bildung, family=binomial(link=logit), ess9de_m1)

    summary(m_wahl1)

  • Die Ergebnisse der logistischen Regression werden im Objekt m_wahl1 gespeichert. Ohne das Anlegen eines Objekts werden in der Console – analog zur linearen Regression – lediglich die Regressionskoeffizienten ausgegeben. Mit der summary-Funktion werden die zentralen Regressionsergebnisse ausgegeben, die in Tabelle 32 dokumentiert sind. Die zentralen Ergebnisse einer logistischen Regression finden sich im Abschnitt Coefficients. Dort werden die logistischen Regressionskoeffizienten (Estimate) und Informationen zur Signifikanz aufgeführt.


Interpretation der Ergebnisse (logistische Regression)


Koeffizienten

  • Die logistischen Regressionskoeffizienten sind in der Spalte Estimate unter Coefficients aufgeführt. Die Koeffizienten informieren, wie sich die abhängige Variable (Wahlbeteiligung) bei einem Anstieg der entsprechenden unabhängigen Variable verändert. Dies entspricht formal der Interpretation bei einer linearen Regression. Allerdings sind die geschätzten Werte bei der logistischen Regression keine Skalenwerte der abhängigen Variable, sondern logarithmierte Chancen für „Erfolg“ (hier: Chance, sich bei der Wahl zu beteiligen).

  • Für den Regressionskoeffizienten alter lautet die Interpretation wie folgt: Steigt das Alter um ein Jahr, dann steigt die logarithmierte Chance der Wahlbeteiligung um 0,03. Die Koeffizienten beim politischen Interesse (polint) und der Bildung (bildung) sind jeweils zur Referenzkategorie „kein politisches Interesse“ bzw. „geringe Bildung“ zu interpretieren. Bei einer Person mit starkem politischen Interesse (polint3) steigt die logarithmierte Chance der Wahlbeteiligung um 2,04 im Vergleich zu einem Befragten mit keinem politischen Interesse (Referenzgruppe). Eine Person mit mittlerer Bildung (bildung1) hat eine um 0,85 höhere logarithmierte Chance sich an der Wahl zu beteiligen als eine Person mit geringer Bildung (Referenzgruppe).

  • Der Achsenabschnitt (Intercept) der logistischen Regression beschreibt – analog zur linearen Regression – Befragte, die bei allen unabhängigen Variablen den Wert 0 haben. Bei dem Beispiel handelt es sich um Personen im Alter von 0 Jahren mit keinem politischen Interesse und geringer Bildung. Bei dieser Merkmalskonstellation liegt die vorhergesagte logarithmierte Chance, sich bei der Wahl zu beteiligen, bei –1,99. Die Konstante sollte nicht überinterpretiert werden. Es handelt sich – wie auch bei der linearen Regression – um einen eher technischen Wert. Für die Prüfung von Hypothesen sind die (inhaltlichen) Regressionskoeffizienten wichtiger. Die Konstante ist in erster Linie erforderlich, um bestimmte Merkmalskombinationen zu berechnen.

  • Die Beispiele zeigen: Insgesamt ist die Interpretation der logarithmierten Chancen nicht sehr zugänglich. Deshalb werden bei einer logistischen Regression häufig nur die Vorzeichen der Regressionskoeffizienten interpretiert. Allgemein liegt der Wertebereich der logistischen Regressionskoeffizienten zwischen -unendlich und +unendlich. Ein positives Vorzeichen bedeutet, dass die logarithmierte Chance (und somit auch die Wahrscheinlichkeit) der Wahlteilnahme steigt. Ein negatives Vorzeichen bedeutet, dass die logarithmierte Chance (und somit auch die Wahrscheinlichkeit) der Wahlteilnahme sinkt. Die Betragshöhe des Regressionskoeffizienten gibt einen Hinweis auf die Effektstärke, allerdings können (ohne mathematische Umrechnungen) keine Aussagen über das genaue Ausmaß der Veränderung der Wahrscheinlichkeit gemacht werden. Ein Regressionskoeffizient von 0 entspricht keiner Veränderung

  • Die Kenntnis des Wertebereichs der logistischen Regressionskoeffizienten ist wichtig, da bei logistischen Regressionen häufig auch Chancenverhältnisse (Odds-Ratios) interpretiert werden. Diese Form der Interpretation wird an späterer Stelle noch vorgestellt.

Signifkanz

  • Neben den Regressionskoeffizienten (Estimate) werden die Standardfehler (Std. Error), z-Werte (z value) und die p-Werte (Pr(>|z|)) ausgegeben. Die Standardfehler informieren analog zur linearen Regression über die Präzision der Schätzung der Regressionskoeffizienten. Je größer der Standardfehler, desto ungenauer ist die Schätzung. Wird der Regressionskoeffzient (Estimate) durch den Standardfehler (Std. Error) dividiert, dann erhält man den z-Wert. Dabei handelt es sich um eine Prüfgröße für einen statistischen Test, der sich an der Normalverteilung orientiert. Die Signifikanz des Regressionskoeffizienten kann direkt am p-Wert abgelesen werden. Der p-Wert informiert, wie wahrscheinlich es ist, den Regressionskoeffizienten zu erhalten, wenn in der Grundgesamtheit kein Zusammenhang zwischen abhängiger und unabhängiger Variable besteht. In den Sozialwissenschaften lassen sich traditionell drei Signifikanzniveaus unterscheiden:

    • p-Wert kleiner als 0,05: signifikant

    • p-Wert kleiner als 0,01: hoch signifikant

    • p-Wert kleiner als 0,001: höchst signifikant

  • In Soziologie und Politikwissenschaft wird auf diese Differenzierung häufig verzichtet. Ein p-Wert kleiner als 0,05 wird als signifikantes Ergebnis gewertet. Der in einer Stichprobe nachgewiesene Zusammenhang zwischen zwei Merkmalen existiert (wahrscheinlich) auch in der Grundgesamtheit. In Tabelle 32 sind alle Regressionskoeffizienten statistisch höchst signifikant (p-Wert kleiner als 0,001). Zur Erinnerung: Bei sehr kleinen Zahlen verwendet R standardmäßig die wissenschaftliche Notation. Mit der Funktion options und dem Argument scipen kann die Anzahl der Nachkommastellen angepasst werden (siehe Abschnitt 7.2.4). Eine Orientierung der Signifikanz bieten auch die Sternchen (Asterisk) neben den p-Werten (Tabelle 33).

  • Die Signifikanz der Regressionskoeffizienten wird häufig falsch interpretiert. Die Signifikanz informiert, ob der Befund einer Zufallsstichprobe auf die Grundgesamtheit übertragen werden kann. Er trifft keine Aussage zur Effektstärke bzw. Bedeutung des Befunds.


    Asterisk

    Beschreibung

    *

    Der p-Wert liegt unter 0,05, ist aber größer als oder gleich 0,01. Das Ergebnis ist auf dem 5-Prozent-Niveau signifikant.

    **

    Der p-Wert liegt unter 0,01, ist aber größer als oder gleich 0,001. Das Ergebnis ist auf dem 1-Prozent-Niveau signifikant.

    ***

    Der p-Wert liegt unter 0,001. Das Ergebnis ist auf dem 0,1-Prozent-Niveau signifikant.

Modellgüte

  • In der unteren Tabellenhälfte werden Angaben zur Devianz ausgewiesen, die auf der Maximum-Likelihood-Schätzung basieren. Je kleiner der Wert der Devianz, desto besser passt das Regressionsmodell auf die Daten. Die Null deviance bezieht sich auf die Devianz des sogenannten Nullmodells, einem Modell bei dem keine unabhängigen Variablen berücksichtigt wurden. Die Residual deviance ist die Devianz des geschätzten Modells. Diese Devianz sollte (deutlich) kleiner als die Devianz des Nullmodells sein. Die Höhe der Devianz ist allerdings von der Fallzahl abhängig, sodass die Devianz unterschiedlicher Modelle nicht verglichen werden sollte

  • In der linearen Regression existiert mit dem R² ein anschauliches Maß der Modellgüte. R² entspricht dabei dem Anteil erklärter Varianz an der Gesamtvarianz und liegt stets zwischen 0 und 1. Bedauerlicherweise existiert ein solches anschauliches Maß nicht für die logistische Regression. Als Ersatz haben Statistiker sogenannte Pseudo-R²-Maßzahlen entwickelt, die R² insofern ähneln, da sie erstens auch nur Werte zwischen 0 und 1 annehmen können und zweitens ein höherer Wert auch auf ein „besseres“ Modell hindeutet (Behnke 2015, S. 99-105; Urban und Mayerl 2018, S. 416-418; Backhaus et al. 2018, S. 298-299). Pseudo-R²-Maßzahlen informieren aber nicht über den Anteil erklärter Varianz an der Gesamtvarianz.

  • Über die Funktion PseudoR2 des Pakets DescTools können verschiedene Pseudo-R²-Maßzahlen des Regressionsmodells angefordert werden. In der Klammer wird das Regressionsmodell aufgenommen, danach wird die gewünschte Maßzahl genannt. Mit dem Skript im Kasten wird das Pseudo-R² nach Nagelkerke und nach McFadden angefordert, die bei 0,21 (Nagelkerke) und 0,16 (McFadden) liegen. Beide Maßzahlen sind in den Sozialwissenschaften verbreitet, da sie bei den Statistikprogrammen SPSS (Nagelkerke) und Stata (McFadden) standardmäßig ausgegeben werden. Allerdings gibt es noch weitere Pseudo-R²-Maßzahlen. Mit der Funktion PseudoR² und dem Argument all können insgesamt neun (!) verschiedene Pseudo-R²-Maßzahlen angefordert werden.

  • Für das geschätzte Regressionsmodell ist das Pseudo-R² nach Aldrich und Nelson mit 0,11 am geringsten und das Pseudo-R² nach McKelvey and Zavoina mit 0,26 am höchsten. Aufgrund dieser beachtlichen Spannweite ist es wichtig, das gewählte Gütemaß explizit auszuweisen. Eine knappe Beschreibung der verschiedenen Pseudo-R²-Maßzahlen mit entsprechenden Literaturangaben bietet die Dokumentation der Funktion, die mit ?PseudoR2 aufgerufen werden kann.

  • Bei einem Vergleich der verschiedenen Pseudo-R²-Maßzahlen kommen Veall und Zimmermann (1994) zu dem Schluss, dass das Pseudo-R² nach McKelvey und Zavoina am ehesten mit dem klassischen R² der linearen Regression verglichen werden kann. Bei Nagelkerke und McFadden werde das „wahre“ R² eher unterschätzt. In sozialwissenschaftlichen Publikationen dominieren allerdings die Gütemaße nach Nagelkerke und McFadden. Letztlich haben die verschiedenen Gütemaße zwei Gemeinsamkeiten. Der Wertebereich liegt stets zwischen 0 und 1 und höhere Werte deuten auf eine bessere Modellanpassung hin.

  • Logistische Regression (Pseudo-R²-Maßzahlen):

    PseudoR2(m_wahl1, c("Nagelkerke", "McFadden"))

    PseudoR2(m_wahl1, c("all"))

    ?PseudoR2



Odds Ratio


  • Anstelle der logistischen Regressionskoeffizienten werden in Publikationen gelegentlich Odds Ratio ausgewiesen. Bei den Odds Ratio handelt es sich um Chancenverhältnisse und sie geben die vorhergesagte Veränderung an, wenn sich die unabhängige Variable um eine Einheit ändert. Der Wertebereich der Odds Ratio unterscheidet sich vom Wertebereich der logistischen Regressionskoeffizienten. Während der Wertebereich der oben besprochenen Regressionskoeffizienten zwischen -unendlich und +unendlich liegt, liegt der Wertebereich der Odds Ratio zwischen 0 und +unendlich. Ein Odds Ratio kleiner 1 deutet auf eine geringere Chance, ein Odds Ratio Koeffizient größer 1 auf eine höhere Chance hin. Bei einem Odds Ratio von 1 bleibt die Chance gleich.

    • Odds Ratio < 1: Chance sinkt

    • Odds Ratio = 1: Chance bleibt gleich

    • Odds Ratio > 1: Chance steigt

  • Für die Berechnung der Odds Ratio werden die logistischen Regressionskoeffizienten an der Eulerischen Zahl e (2,718282) exponiert. Der Regressionskoeffizient des Alters war 0,03, da entsprechende Chancenverhältnis ist mit e0,03 bei ungefähr 1,03. Durch das Exponieren wird die abhängige Variable nicht mehr als Logit, sondern als Chancenverhältnis dargestellt. Mit der Funktion coef werden die logistischen Regressionskoeffizienten ausgegeben. In die Klammer wird lediglich das Regressionsobjekt aufgenommen (m_wahl1). Für die Ausgabe der Odds Ratio wird vor der coef-Funktion noch die exp-Funktion gesetzt, die die mathematische Transformation umsetzt.

  • Logistische Regression (Odds Ratio): coef(m_wahl1) # Ausgabe der logistischen Regressionskoeffizienten

    exp(coef(m_wahl1)) # Ausgabe der Odds Ratio

  • In Tabelle 34 sind die Regressionskoeffizienten und die entsprechenden Odds Ratio dokumentiert. Zur Illustration zwei Beispiele: Das Odds Ratio von 1,03 beim Alter bedeutet, dass das Chancenverhältnis für eine Wahlteilnahme steigt, wenn das Alter um ein Jahr zunimmt. Personen mit mittlerer Bildung (bildung1) haben ein um 2,34 höheres Chancenverhältnis, sich an Wahlen zu beteiligen, als Personen mit geringer Bildung (Referenzgruppe)

  • Die Odds Ratio bieten nur eine andere Form der Interpretation, die substanziellen Ergebnisse bleiben identisch. Ein positiver Regressionskoeffizient wird ein Odds Ratio größer als 1 haben, ein negativer Regressionskoeffizient wird ein Odds Ratio kleiner als 1 haben (aber niemals kleiner als 0).

  • Die Kenntnis der unterschiedlichen Wertebereiche ist wichtig, da in Veröffentlichungen entweder die Regressionskoeffizienten oder die Odds Ratio ausgewiesen werden. Bei den Regressionskoeffizienten deuten negative Werte auf eine geringere Chance, bei den Odds Ratio sind dies Werte zwischen 0 und 1. Bei den Regressionskoeffizienten deuten positive Werte auf eine höhere Chance hin, bei den Odds Ratio sind dies Werte größer als 1.

  • Nach Best und Wolf (2010, S. 832; 2012; siehe auch Behnke 2015, S. 73-76) bieten die Odds Ratio nur eine scheinbar einfachere und anschaulichere Interpretation als die Logit-Koeffizienten. Bei Odds Ratio handelt es sich um Wahrscheinlichkeitsverhältnisse. Zwar werden die Effekte in ihrer Richtung korrekt bewertet, aber die Stärke der Effekte meist überschätzt. Ein Odds Ratio von 2,34 bedeutet nicht, dass Personen mit mittlerer Bildung eine um 2,34-mal höhere Wahrscheinlichkeit haben, sich an der Wahl zu beteiligen. Vielmehr ist – abhängig von der Basiswahrscheinlichkeit – jedes relative Risiko möglich. Best und Wolf (2010, S. 832) argumentieren:

    „Wir raten daher von der Verwendung von e β -Koeffizienten bzw. Odds-Ratios ab. Eine über die Effekt-Richtung hinausgehende Interpretation ist allein auf der Basis des Koeffizienten nicht möglich.“

  • Dieser Empfehlung wird an dieser Stelle gefolgt. Bei der Interpretation logistischer Regressionskoeffizienten wird dringend geraten, sich bei den Regressionskoeffizienten auf die Interpretation der Vorzeichen zu beschränken. Die absoluten Beträge der Regressionskoeffizienten sollten nicht interpretiert werden.


Ausgabe als Grafik (logistische Regression)


  • In aktuellen Veröffentlichungen wird für die Interpretation logistischer Regressionen immer häufiger auf grafische Darstellungen zurückgegriffen, die eine intuitivere Interpretation der Ergebnisse ermöglichen. Dazu werden meist die Wahrscheinlichkeitswerte bestimmter Kombinationen berechnet, die dann in Grafiken dargestellt werden. Dies ist mit der Funktion plot_model aus dem sjPlot-Paket einfach umzusetzen

  • Mit der Funktion theme_set wird das Layout der Grafik festgelegt. Für das Beispiel wird das Layout theme_classic genutzt, in R bzw. über Zusatzpakete sind aber auch alternative Layouts möglich. Bei der Eingabe des Begriffs theme in das Skript werden einige alternative Layoutoptionen direkt angezeigt. Die Grafik selbst wird mit der Funktion plot_model erstellt. In der Klammer wird zunächst das Regressionsobjekt genannt, anschließend der Typ der Regressionsgrafik spezifiziert. Mit pred werden die geschätzten Wahrscheinlichkeitswerte bei einer logistischen Regression berechnet. Nach dem Argument terms werden die Regressionskoeffizienten aufgeführt, nach dem Argument title wird der Titel der Grafik genannt.

  • Logistische Regression (Regressiongrafik I):

    theme_set(theme_classic())

    plot_model(m_wahl1, type="pred",

    terms = c("alter", "bildung", "polint"),

    title = "Determinanten der Wahlbeteiligung")

  • In Abbildung 22 ist die erstellte Grafik dokumentiert, die die geschätzten Wahrscheinlichkeiten der Wahlbeteiligung in Abhängigkeit bestimmter Variablenkombinationen enthält. Auf der x-Achse ist jeweils das Alter der Befragten abgetragen, jede Bildungsgruppe hat automatisch eine unterschiedliche Farbe erhalten. Deutlich ist zu erkennen, dass mit dem Alter und einem höheren Bildungsniveau die Wahrscheinlichkeit der Wahlteilnahme steigt. Jede Teilgrafik bezieht sich auf ein bestimmtes Interesse an Politik. Links oben werden die Grafiken bei keinem politischen Interesse dargestellt (pi_kein), rechts unten findet sich die Grafik für die Befragten mit starkem politischem Interesse (pi_stark)

  • Die plot_model-Funktion bietet zahlreiche Möglichkeiten die Grafik anzupassen. Mit dem Skript im Kasten werden beispielsweise die Farben der Regressionskurven festgelegt (colors), das Argument ci.lvl bezieht sich auf die eingezeichneten Konfidenzintervalle. Diese werden mit der Anweisung deaktiviert. Die mit dem Skript erstellte Grafik wird in Abbildung 23 dargestellt.

  • Logistische Regression (Regressionsgrafik II): plot_model(m_wahl1, type="pred",

    terms = c("alter", "bildung", "polint"),

    title = "Determinanten der Wahlbeteiligung",

    colors = c("black", "blue", "red"),

    ci.lvl = NA,

    line.size = 2)

  • Die Dokumentation der Funktion ist mit ?plot_model verfügbar. Auf der Internetseite werden die Möglichkeiten des sjPlot-Pakets illustriert (https://strengejacke.github.io/sjPlot).


Praktische Hinweise (zur logistischen Regression)


  • Für viele sozialwissenschaftliche Fragestellungen sind logistische Regressionsmodelle erforderlich. Mit gängiger Statistiksoftware ist die Schätzung entsprechender Modelle auch problemlos möglich. Allerdings ist die Interpretation logistischer Regressionsmodelle deutlich anspruchsvoller als bei linearen Regressionsmodellen. Dieser Abschnitt bietet einige praktische Hinweise, die bei der Durchführung logistischer Regressionsanalysen berücksichtigt werden sollten. Vor der Durchführung eigener logistischer Regressionsanalysen im Kontext von Haus- und Abschlussarbeiten wird die Lektüre weiterer Literatur empfohlen

  • Fallzahl des Modells: Für eine logistische Regression ist eine größere Fallzahl als bei einer linearen Regression erforderlich. Backhaus et al. (2018, S. 327) und Fromm (2012, S. 108-109) nennen als Minimum 50 Fälle. Dabei sollten für jede Ausprägung der abhängigen Variable mindestens 25 Fälle vorliegen. Nach Fromm (2012, S. 109) können aussagekräftige Ergebnisse erst ab einer Fallzahl von 100 Beobachtungen erreicht werden. Für Individualdatenanalysen sollte die erforderliche Fallzahl unproblematisch sein, bei Makroanalysen bzw. Aggregatdatenanalysen kann dieses Kriterium eine (erste) Herausforderung darstellen. Die erforderliche Fallzahl steigt zudem mit der Anzahl der unabhängigen Variablen. Je uV sollte die Fallzahl jeweils um zehn Beobachtungen je Gruppe steigen

  • Anzahl der Iterationen: Das Maximum-Likelihood-Verfahren ist ein iteratives Schätzverfahren. Der in den Statistikprogrammen implementierte Algorithmus versucht durch gezieltes und wiederholtes (iteratives) Ausprobieren die „besten“ Regressionsparameter zu bestimmen. In der Regressionstabelle informiert R über die Anzahl der notwendigen Iterationen (Number of Fisher Scoring iterations). In der Regel sind wenige Iterationen (<10) für die Bestimmung der Regressionskoeffizienten ausreichend. Abhängig von der Forschungsfrage, der Anzahl der unabhängigen Variablen und der Datenstruktur kann die Zahl der Iterationen auch höher sein. Allerdings weist eine hohe Anzahl an Iterationen auch darauf hin, dass die Suche nach den Regressionsparametern schwierig ist. Deshalb deuten Kohler und Kreuter (2017, S. 72-73) eine große Anzahl an Iterationen als Hinweis auf ein problematisches Modell bzw. nicht optimale Regressionskoeffizienten.

  • Aufbau der Regressionsmodelle: Bei linearen Regressionsanalysen werden die einzelnen Regressionsmodelle häufig schrittweise aufgebaut. In Modell 1 werden beispielsweise die Effekte demografischer Merkmale auf die (metrische) aV untersucht, in Modell 2 werden weitere erklärende unabhängige Variablen aufgenommen. Dabei wird häufig die Veränderung der Koeffizienten interpretiert (z.B. der Alterseffekt wird bei Berücksichtigung weiterer erklärender Merkmale schwächer). In der logistischen Regression ist eine solche Vorgehensweise nicht ohne weiteres möglich. Auf Basis von Simulationen haben Best und Wolf (2012) gezeigt, dass sich Koeffizienten zwischen verschachtelten logistischen Modellen nur bedingt vergleichen lassen.

  • Interpretation der Koeffizienten: Die Interpretation der logistischen Regressionskoeffizienten ist gewöhnungsbedürftig. Häufig wird versucht, die logarithmierten Chancen in Wahrscheinlichkeiten auszudrücken oder die Chancenverhältnisse verbal zu umschreiben. Beide Vorgehensweisen sind problematisch, da die Gefahr besteht, dass die Aussage falsch interpretiert wird. Die Berechnung für Wahrscheinlichkeiten für bestimmte Merkmalsausprägungen bietet eine bessere Strategie. Ansonsten ist es eine einfache (und völlig legitime) Strategie, sich bei der Interpretation auf die Vorzeichen der Koeffizienten zu beschränken. Dies sollte für die Mehrheit der zu überprüfenden Hypothesen auch ausreichend sein.


Konfidenzintervalle


  • Im Beispieldatensatz ess9de_m1 liegen für 2354 Personen Informationen zum Alter vor. Das durchschnittliche Alter dieser Personen liegt bei 49,65 Jahren. Beim arithmetischen Mittel handelt es sich um einen sogenannten Punktschätzer. Es wird ein Schätzwert für den unbekannten Parameter der Grundgesamtheit (hier: das durchschnittliche Alter) berechnet. Bei einer Zufallsstichprobe sind aber Zufallsfehler unvermeidlich. Wird eine weitere Zufallsstichprobe der Grundgesamtheit gezogen und erneut das durchschnittliche Alter der Personen berechnet, dann wird das Ergebnis nicht identisch sein. Das durchschnittliche Alter ist möglicherweise etwas geringer oder etwas größer. Bei einer Punktschätzung wird diese (unvermeidliche) Ungenauigkeit nicht dokumentiert. Häufig wird dann die Genauigkeit von Stichprobenergebnissen überschätzt

  • Bei einer Intervallschätzung wird statt einem Wert ein Wertebereich angegeben, in dem der gesuchte Parameter der Grundgesamtheit (z.B. das durchschnittliche Alter) vermutet wird. Ein solcher Bereich wird als Vertrauens- oder Konfidenzintervall bezeichnet (z.B. Ludwig-Mayerhofer et al. 2014, S. 125-136). Ein Vertrauens- oder Konfidenzintervall wirkt auf den ersten Blick möglicherweise ungenauer als eine Punktschätzung, bildet aber die Unsicherheit von Stichprobenergebnissen deutlich besser ab als eine Punktschätzung.

  • Berechnung des Konfidenzintervalls: Wie wird das Konfidenzintervall berechnet? Ausgangspunkt für die Berechnung eines Konfidenzintervalls ist der Standardfehler (^σ), der über die Genauigkeit einer Schätzung informiert. Je größer der Standardfehler, desto stärker können sich Stichprobenwerte unterscheiden. Die Berechnung des Standardfehlers basiert auf folgender Formel: ^σ= Wurzel aus s2∗/n = s∗/ √n

  • Die (korrigierte) Varianz wird durch die Anzahl der gültigen Fällen dividiert und aus dem Ergebnis wird die Wurzel gezogen. Die Varianz des Alters liegt bei 363,09 und die Fallzahl ist 2354. Standardfehler für MittelwertAlter:

    ^σ = Wurzel aus 363,0932/ 2354 = 19,06/ √2354 = 0,39

  • Der Standardfehler des Alters liegt bei 0,39. Der Standardfehler ist von der Varianz des Merkmals und der Fallzahl abhängig. Bei einer größeren Varianz wird der Standardfehler größer, bei einer größeren Fallzahl wird der Standardfehler kleiner.

  • Für die Berechnung des 95-Prozent-Konfidenzintervalls wird der Standardfehler mit dem entsprechenden kritischen t-Wert 1,96 multipliziert. Das 95-Prozent-Konfidenzintervall ist das arithmetische Mittel (x quer) ± 1,96*Standardfehler (^σ). Formal: 95-Prozent-Konfidenzintervall:

    x quer ± 1,96 ∗

  • – Obere Grenze: 49,65 + (1,96*0,39) = 49,65 + 0,76 = 50,41

    – Untere Grenze: 49,65 – (1,96*0,39) = 49,65 – 0,76 = 48,89

  • In R muss das Konfidenzintervall selbstverständlich nicht händisch berechnet werden, es existieren mehrere Funktionen, um die benötigten Angaben bzw. das Konfidenzintervall direkt ausgeben zu lassen. Mit der descr-Funktion aus dem sjmisc-Paket oder der describe-Funktion aus dem psych-Paket werden Fallzahl (2354), das arithmetische Mittel (49,65) und die (korrigierte) Standardabweichung (19,06) direkt ausgegeben. Für die Berechnung des Standardfehlers wird die Standardabweichung durch die Wurzel der Fallzahl dividiert. Die descr- bzw. describe-Funktion enthält aber auch Informationen zum Standardfehler. Der Standardfehler wird mit se (Standard Error) abgekürzt und beträgt 0,39.

  • Ausgabe des Standardfehlers: descr(ess9de_m1$alter) # Paket: sjmisc

    describe(ess9de_m1$alter) # Paket: psych

  • Mit diesen Angaben könnte das 95-Prozent-Konfidenzintervall des Alters händisch berechnet werden. Das Konfidenzintervall kann aber auch direkt mit den Funktionen MeanCI- und Desc aus dem DescTools-Paket angefordert werden. Bei der MeanCI-Funktion beschränkt sich die Ausgabe auf das Konfidenzintervall. Mit dem Argument conf.level wird das gewünschte Konfidenzintervall festgelegt. Die Voreinstellung sieht das 95-Prozent-Konfidenzintervall vor, sodass die Angabe im Skript nicht erforderlich ist. Es kann aber auch das 90-Prozent- oder 99-Prozent-Konfidenzintervall berechnet werden. Bei der Desc-Funktion werden neben dem Konfidenzintervall (MeanCI) noch weitere univariate Statistiken ausgegeben. Die Abweichung bei der zweiten Nachkommastelle bei der händischen Berechnung ist auf Rundungsfehler zurückzuführen. Alternativ zu den Funktionen aus dem DescTools-Paket wird das 95-Prozent-Konfidenzintervall auch bei der Berechnung eines t-Tests ausgegeben.

  • Ausgabe des Konfidenzintervalls: MeanCI(ess9de_m1$alter, na.rm=TRUE, conf.level = 0.95) # Paket: DescTools

    Desc(ess9de_m1$alter, na.rm=TRUE, conf.level = 0.95) # Paket: DescTools

    t.test(ess9de_m1$alter)

  • Konfidenzintervalle sind eine einfache Möglichkeit, die Ungenauigkeit von Stichprobenergebnissen zu dokumentieren. Häufig werden kleinste Unterschiede oder Veränderungen inhaltlich interpretiert, obwohl diese Abweichungen möglicherweise einfach das Resultat von Stichprobenfehlern sind. Durch Konfidenzintervalle wird dies vermieden.


Mittelwertvergleiche (t-Test)


  • Unterscheidet sich die Lebenszufriedenheit nach Geschlecht? Variiert die Demokratiezufriedenheit in Abhängigkeit vom politischen Interesse? Eine Antwort auf diese Fragen bieten Mittelwertvergleiche. Mit der describeBy-Funktion aus dem psych-Paket können unkompliziert die arithmetischen Mittel nach Gruppen angefordert werden (Abschnitt 6.2). Mit dem Skript im Kasten wird zunächst die mittlere Lebenszufriedenheit (stflife) nach Geschlecht (mann) und anschließend die Demokratiezufriedenheit (stfdem) in Abhängigkeit vom politischen Interesse (polint.ja) angefordert. Beim politischen Interesse werden – aus Gründen der Übersicht – nur zwei Gruppen unterschieden (kein/kaum Interesse versus ziemliches/starkes Interesse). Die Lebens- und die Demokratiezufriedenheit sind jeweils auf 11-Punkt-Skalen erfasst, bei der 0 „äußerst unzufrieden“ und 10 „äußerst zufrieden“ bedeutet. Größere Zahlen deuten auf eine höhere Lebens- bzw. Demokratiezufriedenheit hin

  • Die mittlere Lebenszufriedenheit der Männer liegt bei 7,69 und die mittlere Lebenszufriedenheit der Frauen bei 7,63. Auf den ersten Blick scheinen Männer eine leicht höhere Lebenszufriedenheit zu haben (0,06). Etwas deutlicher sind die Unterschiede bei der Zufriedenheit mit der Demokratie. Befragte, die sich nicht oder kaum für Politik interessieren, haben eine durchschnittliche Demokratiezufriedenheit von 5,43, Personen, die angegeben haben, sich ziemlich oder stark für Politik zu interessieren, haben eine durchschnittliche Zufriedenheit von 6,11. Der Unterschied ist mit 0,68 Punkten deutlich größer.

  • Anstelle der describeBy-Funktion bietet auch die group_by-Funktion aus dem dplyr-Paket in Kombination mit der descr-Funktion aus dem sjmisc-Paket eine Möglichkeit die Gruppen zu vergleichen. Der Befehl ist zwar etwas länger, bietet dafür aber eine schönere Darstellung (mit dem Argument out wird die Ausgabe der Ergebnisse gesteuert). Letztlich führen beide Varianten zu den gleichen Ergebnissen.

  • Univariate Statistiken nach Gruppen: describeBy(ess9de_m1$stflife, ess9de_m1$mann)

    describeBy(ess9de_m1$stfdem, ess9de_m1$polint.ja)

    ess9de_m1 %>% group_by(mann) %>% descr(stflife, out="viewer")

    ess9de_m1 %>% group_by(polint.ja) %>% descr(stfdem, out="viewer")

  • Die arithmetischen Mittel wurden auf Basis einer Stichprobe berechnet. Die Aussagen gelten zunächst einmal nur für die Personen, für die die entsprechenden Daten vorliegen. In den Sozialwissenschaften sind wir allerdings weniger an Zusammenhängen oder Mittelwertunterschieden in einer Stichprobe interessiert, sondern an Zusammenhängen oder Unterschieden in der entsprechenden Grundgesamtheit. Deshalb stellt sich die Frage, ob ein nachgewiesener Unterschied in der Stichprobe auch einen Unterschied in der Grundgesamtheit anzeigt. Kann von einem Unterschied in der Stichprobe einfach auf die Grundgesamtheit geschlossen werden?

  • Aus ökonomischen und praktischen Gründen dominieren in den Sozialwissenschaften Teilerhebungen. Bei der (einfachen) Zufallsstichprobe besitzt jedes Element der Grundgesamtheit die gleiche und von 0 verschiedene Chance in die Stichprobe zu gelangen (ausführlicher Tausendpfund 2018, S. 213- 215). Allerdings sind Stichproben immer mit einem Zufallsfehler behaftet. Die Inferenzstatistik stellt „Instrumente“ bereit, die es erlauben, Rückschlüsse von der Stichprobe auf die Grundgesamtheit zu ziehen.

  • Ein Verfahren, das den Schluss von der Stichprobe auf die Grundgesamtheit ermöglicht, ist der t-Test. Vereinfacht formuliert wird bei einem t-Test geprüft, wie wahrscheinlich es ist, dass wir in der Stichprobe einen Unterschied oder Zusammenhang zwischen zwei Merkmalen finden (z.B. Lebenszufriedenheit und Geschlecht), obwohl in der Grundgesamtheit gar kein Unterschied oder Zusammenhang existiert. Die zentrale Frage ist: Wann sind diese Unterschiede vermutlich nicht mehr zufallsbedingt, sondern weisen darauf hin, dass die in der Stichprobe nachgewiesenen Unterschiede auch in der Grundgesamtheit existieren? In den Sozialwissenschaften wird von einem signifikanten Unterschied gesprochen, wenn die Wahrscheinlichkeit, dass die Ergebnisse zufällig zustande gekommen sind, geringer als fünf Prozent ist (ausführlicher Kuckartz et al. 2013, S. 159- 184). Das Vorgehen ist also eher konservativ: Wenn die Wahrscheinlichkeit, dass wir uns irren, geringer ist als fünf Prozent, dann übertragen wir unseren Stichprobenbefund auf die Grundgesamtheit.

  • Das sogenannte Fünf-Prozent-Signifikanzniveau ist eine Konvention in den Sozialwissenschaften (p<0,05). Darüber hinaus werden häufig auch das Ein-Prozent-Signifikanzniveau (p<0,01) und das 0,1-Prozent-Signifikanzniveau (p<0,001) unterschieden. Die statistische Signifikanz eines Ergebnisses, also die Übertragung eines Befunds von der Stichprobe auf die Grundgesamtheit, darf nicht mit Relevanz verwechselt werden. Die Bewertung der Bedeutung eines empirischen Ergebnisses ist eine inhaltliche Interpretation. In der Regel sind alle inhaltlich bedeutsamen Ergebnisse auch statistisch signifikant, aber der Umkehrschluss gilt nicht. Ein Ergebnis kann signifikant, aber inhaltlich nicht relevant sein

  • t-Test mit R berechnen:

    Mit R können verschiedene t-Tests berechnet werden. An dieser Stelle wird der t-Test für sogenannte unabhängige Stichproben vorgestellt. Ein t-Test wird mit der Funktion t.test gerechnet, der standardmäßig in R implementiert ist.

    t.test(aV ~ uV, data)

  • Nach der Funktion wird in der Klammer die abhängige Variable genannt, die zumindest ein pseudometrisches Skalenniveau aufweisen sollte. Nach der Tilde wird die unabhängige Variable aufgeführt, die nur zwei Ausprägungen haben darf. Nach dem Komma wird der verwendete Datensatz spezifiziert. Mit dem Skript im Kasten werden zwei t-Tests durchgeführt. Mit der oberen Zeile wird der t-Test der Lebenszufriedenheit (stflife) in Abhängigkeit des Geschlechts (mann) berechnet, in der unteren Zeile der t-Test der Demokratiezufriedenheit (stfdem) in Abhängigkeit vom politischen Interesse (polint.ja).

  • t-Test mit R:

    t.test(stflife ~ mann, ess9de_m1)

    t.test(stfdem ~ polint.ja, ess9de_m1)

  • In Tabelle 35 ist der R-Output für den t-Test der Lebenszufriedenheit in Abhängigkeit vom Geschlecht dokumentiert. Für die Bewertung der Signifikanz des Gruppenunterschieds können drei verschiedene Angaben genutzt werden:

    • – Die Signifikanz kann beim t-Wert (t) abgelesen werden. Dort wird der t-Wert dargestellt, der bei -0,759 liegt. Der kritische t-Wert bei hinreichend großen Stichproben liegt bei einem zweiseitigen Test bei ±1,96. Mit einem Betrag des t-Werts von 0,758 liegt der Wert deutlich unter dem kritischen Wert von 1,96. Deshalb liegt kein signifikantes Ergebnis vor.

    • – Die Signifikanz kann auch beim p-Wert (p-value) abgelesen werden. Ein p-Wert kleiner als 0,05 deutet auf einen signifikanten Unterschied hin. Der Wert liegt mit 0,448 deutlich über dem kritischen Wert von 0,05. Dies bedeutet, dass der in der Stichprobe nachgewiesene Unterschied zwischen Männern und Frauen sehr wahrscheinlich nicht in der Grundgesamtheit existiert.

    • – Die Signifikanz kann auch beim 95-Prozent-Konfidenzintervall abgelesen werden. Mit einer Sicherheit von 95 Prozent liegt der Unterschied der Lebenszufriedenheit zwischen -0,220 und 0,097. Das Konfidenzintervall enthält also einen Vorzeichenwechsel. In der Grundgesamtheit könnten Männer oder auch Frauen eine höhere Lebenszufriedenheit haben. Möglicherweise besteht auch gar kein Unterschied.

  • Egal ob p-Wert, t-Wert oder das Konfidenzintervall – alle drei Möglichkeiten stehen zur Bewertung der Signifikanz zur Verfügung und können für die Interpretation der Signifikanz genutzt werden. Die Informationen können sich auch nicht widersprechen. Bei einem t-Wert kleiner als ±1,96 wird der p-Wert größer als 0,05 sein und das Konfidenzintervall einen Vorzeichenwechsel aufweisen. Der in der Stichprobe gefundene Unterschied von 0,06 ist statistisch nicht signifikant. Der Befund kann folglich nicht auf die Grundgesamtheit übertragen werden.

  • In Tabelle 36 sind die Ergebnisse des zweiten t-Tests dokumentiert, mit dem geprüft wird, ob sich die Demokratiezufriedenheit signifikant in Abhängigkeit vom politischen Interesse unterscheidet. Der t-Wert ist -6,52 und liegt damit deutlich über der kritischen Grenze von ±1,96 (bei einem zweiseitigen t-Test mit 5-Prozent-Signfikanzniveau). Der Unterschied ist damit statistisch signifikant. Personen, die sich für Politik interessieren, haben eine signifikant höhere Demokratiezufriedenheit als Personen, die sich nicht für Politik interessieren. Diese Interpretation wird durch den p-Wert gestützt, der deutlich kleiner als 0,05 ist (zur Erinnerung: bei sehr kleinen Zahlen nutzt R die mathematische Notation). Auch das 95-Prozent-Konfidenzintervall weist keinen Vorzeichenwechsel auf. Der Unterschied zwischen den beiden Gruppen liegt bei einer Sicherheit von 95 Prozent zwischen 0,47 und 0,88 Punkte

  • Bei der Standardeinstellung des t-Tests wird unterstellt, dass sich die Varianzen der beiden Gruppen signifikant unterscheiden (Varianzheterogenität). Dies ist grundsätzlich eine sinnvolle Voreinstellung, da dies konservativere – sicherere bzw. vorsichtigere – Ergebnisse bietet. Mit R können aber auch t-Tests berechnet werden, bei denen Varianzhomogenität – also gleiche Varianzen – gegeben sind. Dies ist über das Argument var.equal möglich. Mit dem Skript im Kasten werden zwei t-Tests bei angenommener Varianzhomogenität berechnet (tabellarisch nicht ausgewiesen). Die t-Werte verändern sich minimal: bei der Lebenszufriedenheit liegt der t-Wert bei -0,76, bei der Demokratiezufriedenheit bei -6,54. Für die Interpretation ergeben sich keine Änderungen.

  • t-Test (mit Varianzhomogenität):

    t.test(stflife ~ mann, var.equal=TRUE, ess9de_m1)

    t.test(stfdem ~ polint.ja, var.equal=TRUE, ess9de_m1)

  • Die Annahme gleicher Varianzen müsste zuvor mit dem Levene-Test geprüft werden. Der Levene-Test prüft, ob sich die Varianzen der beiden Gruppen signifikant unterscheiden. Die Berechnung ist über die Funktion leveneTest des car-Pakets möglich, das zuvor installiert und geladen sein muss. Mit ?leveneTest wird die Dokumentation des Tests abgerufen.

  • Levene-Test im car- und DescTools-Paket: Mit dem Levene-Test wird geprüft, ob sich die Varianz in den beiden Gruppen unterscheidet. Die Nullhypothese unterstellt dabei Varianzgleichheit. Ein signifikanter Levene-Test deutet entsprechend auf ungleiche Varianzen hin (Varianzheterogenität). Der Levene-Test ist Bestandteil des car-Pakets (leveneTest). Mittlerweile wurde der Test auch im DescTools-Paket integriert (LeveneTest).

  • Mit dem Skript im Kasten wird für beide Beispiele der Levene-Test durchgeführt. Bei einem signifikanten Befund wird die Annahme der Varianzhomogenität abgelehnt und Varianzheterogenität unterstellt. Der Levene-Test bei der Lebenszufriedenheit deutet auf Varianzheterogenität hin (signfikanter Befund), bei der Demokratiezufriedenheit ist der Befund nicht signifikant (tabellarisch) nicht ausgewiesen). Entsprechend könnte bei der Demokratiezufriedenheit ein t-Test mit Varianzhomogenität berechnet werden.

  • Levene-Test (car-Paket):

    leveneTest(stflife ~ mann, ess9de_m1, center=mean)

    leveneTest(stfdem ~ polint.ja, ess9de_m1, center=mean)

  • Bei der Arbeit mit großen Stichproben führen t-Tests mit und ohne angenommene Varianzhomogenität in der Regel zu vergleichbaren Befunden, sodass die Prüfung der Varianzhomogenität in der Regel nicht erforderlich ist und einfach Varianzheterogenität unterstellt werden kann. Dies stellt die konservativere Vorgehensweise dar. In Tabelle 37 sind weitere Argumente des t-Tests dokumentiert. Mit dem Argument var.equal wird – wie eben dargestellt – die Annahme der Varianzhomogenität festgelegt (voreingestellt ist Varianzheterogenität). Mit dem Argument conf.level wird das Signifikanzniveau angepasst. Voreingestellt ist das 5-Prozent-Signfikanzniveau, aber selbstverständlich sind auch t-Tests mit anderen Signifikanzniveaus möglich (z.B. 1-Prozent-Signfikanzniveau). Standardmäßig berechnet die t.test-Funktion einen zweiseitigen t-Test, mit dem Argument alternative kann aber auch ein einseitiger t-Test spezifiziert werden. Die Dokumentation der Funktion ist über ?t.test verfügbar.


  • Argumente beim t-Test:

    Argument

    Beschreibung

    var.equal

    Festlegung der Varianzhomogenität

    conf.level

    Festlegung des Signifikanzniveaus

    alternative

    Ein- oder zweiseitiger Test


Grafiken


  • Die Erstellung von Grafiken erfolgt in R mittels Funktionen. Mit der Funktion barplot werden beispielsweise Säulen- und Balkendiagramme, mit der Funktion hist werden Histogramme, mit der Funktion boxplot werden Boxplots und mit der Funktion plot werden Streu- und Liniendiagramme erstellt. Ohne weitere Angaben greift R bei der Gestaltung auf Voreinstellungen zurück, mittels Argumente kann das Aussehen einer Grafik angepasst werden (z.B. Farben und Beschriftung der Achsen). Tabelle 38 bietet eine Übersicht ausgewählter Argumente, die bei den meisten Grafikfunktionen genutzt werden können. Durch die Vielzahl an Argumenten kann ein Skript für die Erstellung einer Grafik recht lang werden. Für einen besseren Überblick bietet es sich an, für jedes Argument eine eigene Zeile zu nutzen.

  • Argumente bei Grafikbefehlen:


    Argument

    Beschreibung

    main

    Titel der Grafik

    xlab

    Beschriftung der x-Achse

    ylab

    Beschriftung der y-Achse

    xlim

    Wertebereich der x-Achse

    ylim

    Wertebereich der y-Achse

    col

    Farbe des Elements

    border

    Farbe des Rands

  • Die Ausgabe einer Grafik erfolgt nicht in der Console, sondern im Reiter „Plots“ im rechten unteren Fenster. Innerhalb des Reiters kann mit der Zoom-Schaltfläche die Grafik vergrößert werden, die Export-Schaltfläche bietet Möglichkeiten die Grafik abzuspeichern. Dabei kann zwischen mehreren Formaten gewählt werden (z.B. png, jpg, eps), außerdem kann die Darstellungsgröße angepasst werden.

  • In der Standardeinstellung wird im Fenster eine Grafik ausgegeben. Mit der Funktion par und dem Argument mfrow können mehrere Grafiken zusammengestellt werden. Die erste Zahl legt die Anzahl der Grafiken in der Zeile, die zweite Ziffer die Anzahl der Grafiken in der Spalte fest. Mit c(2,2) werden insgesamt vier Grafiken ausgegeben, mit c(2,1) werden zwei Grafiken untereinander, mit c(1,2) werden zwei Grafiken nebeneinander dargestellt.

  • Anzahl der Grafiken:

    par(mfrow = c(1,1)) # eine Grafik

    par(mfrow = c(2,2)) # zwei Grafiken in der Zeile, zwei Grafiken in der Spalte

    par(mfrow = c(2,1)) # zwei Grafiken untereinander

    par(mfrow = c(1,2)) # zwei Grafiken nebeneinander

  • In der Voreinstellung legt R die Farben der Grafiken selbst fest, dabei werden meist Grautöne genutzt. Selbstverständlich können die Farben aber individuell angepasst werden. R kennt insgesamt 657 verschiedene Farbtöne, die Namen der Farben können mit der Funktion colors() abgerufen werden. Die Auswahl reicht von aquamarine über indianred bis hin zu tomato4. Mit der Funktion demo(colors) werden die Farbtöne dargestellt (eine bessere Übersicht bietet aber eine Internetrecherche).

  • Farbauswahl:

    colors() Liste der 657 Farbtöne

    demo(colors) Übersicht der Farbtöne

  • Bei der Gestaltung spezifischer Grafiken bietet es sich an, die jeweilige Dokumentation aufzurufen. Für die einzelnen Diagrammtypen, wie Balkendiagramm und Boxplot, bieten sich die Funktionsnamen an (?boxplot), eine allgemeine Übersicht bietet ?graphics, dann in der Dokumentation unten auf Index klicken.

  • Allgemeine Hinweise:

    Dieser Abschnitt schließt mit einigen allgemeinen Hinweisen, die bei der Gestaltung von wissenschaftlichen Abbildungen berücksichtigt werden sollten. Dabei werden fünf zentrale Aspekte unterschieden: (1) Titel und Nummerierung, (2) angemessene Beschriftung der graphischen Elemente, (3) Verknüpfung der Grafiken mit dem Text, (4) farbliche Gestaltung und (5) Verzicht auf dreidimensionale Elemente

  • (1) Titel und Nummerierung: Jede Grafik erhält einen aussagekräftigen Titel, der den Inhalt präzise beschreibt. Der Titel wird über (oder unter) der Grafik platziert und in der Arbeit fortlaufend durchnummeriert. Die Titel werden gegebenenfalls in ein Abbildungsverzeichnis aufgenommen.

  • (2) Angemessene Beschriftung der graphischen Elemente: Die Elemente einer Abbildung, beispielsweise x- und y-Achse bei einem Streudiagramm oder die einzelnen Kategorien bei einem Säulendiagramm, sind verständlich zu beschriften. Statt Variablennamen sind aussagekräftige Bezeichnungen zu verwenden. Auf Abkürzungen ist zu verzichten. Bei einzelnen Grafiken ist gegebenenfalls eine Legende erforderlich.

  • (3) Grafiken mit dem Text verknüpfen: Eine Grafik soll die Ausführungen im Text ergänzen, nicht ersetzen. Deshalb ist im Text auf eine Grafik angemessen zu verweisen (z.B. „Abbildung 5 zeigt“) und die Kernaussagen sind im Text zu dokumentieren.

  • (4) Farbliche Gestaltung: In wissenschaftlichen Publikationen werden Farben zurückhaltend verwendet, sodass farbige Grafiken in Graustufen dargestellt werden sollten. Deshalb sollte auf Farben verzichtet und Graustufen oder Schwarz-Weiß-Muster genutzt werden, um Informationen zu vermitteln. Bei Präsentationen können Farben zurückhaltend eingesetzt werden.

  • (5) Verzicht auf dreidimensionale Elemente: Bei der Gestaltung einer Abbildung ist nach Tufte (2001, S. 53-77) die „grafische Integrität“, die Eindeutigkeit und Korrektheit der Darstellung, zu wahren. Die grafische Integrität kann unter anderem durch dreidimensionale Elemente (z.B. dreidimensionale Balken- oder Kreisdiagramme für einfache Häufigkeitsverteilungen) verletzt werden. Deshalb sollte eine Abbildung niemals mehr Dimensionen darstellen als Informationen in den Variablen enthalten sind.




Säulen- und Balkendiagramm


  • Säulen- und Balkendiagramme sind Darstellungsformen für Merkmale mit wenigen Ausprägungen. Sie eignen sich insbesondere auch für nominalskalierte Merkmale. Die Häufigkeiten der einzelnen Kategorien werden durch Säulen bzw. Balken gleicher Breite dargestellt, die Höhe der Säulen bzw. die Länge der Balken entspricht der absoluten oder relativen Häufigkeit der Untersuchungsobjekte der jeweiligen Kategorie (Kühnel und Krebs 2007, S. 64). Wie unterscheiden sich Säulen- von Balkendiagrammen? Bei einem Säulendiagramm werden die Daten durch stehende (vertikale) Rechtecke dargestellt, bei einem Balkendiagramm durch liegende (horizontale) Balken (Gehring und Weins 2009, S. 110). Säulendiagramme können unkompliziert in Balkendiagramme transformiert werden. Dazu muss die Abbildung nur um 90 Grad im Uhrzeigersinn gedreht werden.

  • Mit dem Skript im Kasten wird ein Säulendiagramm der Variable bildung erstellt. Für die Erstellung des Diagramms muss die barplot-Funktion auf eine Häufigkeitstabelle der Variable zurückgreifen. Deshalb wird zunächst das Objekt tab.bildung erstellt, dieses wird dann in der barplot-Funktion genutzt. Mit dem Argument main wird der Titel der Abbildung festgelegt, mit den Argumenten xlab und ylab die Beschriftung der x- und y-Achse festgelegt, mit dem Argument names.arg werden die Namen der einzelnen Säulen festgelegt, mit ylim die Skalierung der Achse spezifiziert. Das Argument col bezieht sich auf die Farbe der Säulen, das Argument border auf den Rand der Säulen.

  • Säulendiagramm:

    tab.bildung <- table(ess9de_m1$bildung) # Häufigkeitstabelle wird angelegt

    barplot(tab.bildung, # Grafik wird erstellt

    main = "Säulendiagramm",

    xlab = "Bildungsgruppen",

    ylab = "Häufigkeit",

    names.arg = c("gering", "mittel", "hoch"),

    ylim = c(0, 1000),

    col = "white",

    border = "black")

  • Mit dem nachfolgenden Skript wird aus dem Säulendiagramm ein Balkendiagramm. Zentral ist das neue Argument horiz in der letzten Zeile. Angepasst werden muss noch die x-Achse, außerdem wurden die Balken eingefärbt. In Abbildung 25 werden das erstellte Säulen- und Balkendiagramm gezeigt.

  • Balkendiagramm:

    barplot(tab.bildung,

    main = "Balkendiagramm",

    xlab = "Häufigkeit",

    ylab = "Bildungsgruppen",

    names.arg = c("gering", "mittel", "hoch"),

    xlim = c(0, 1000),

    col = "grey50",

    border = "black",

    horiz = TRUE)


Kreisdiagramm


  • In Massenmedien und in Präsentationen von Unternehmensberatungen werden häufig Kreisdiagramme genutzt (häufig auch Kuchen- oder Tortendiagramm genannt), um nominalskalierte Merkmale mit wenigen Ausprägungen darzustellen. Die Häufigkeiten oder Anteile einer Kategorie werden durch verschieden große Kreissegmente dargestellt. In einer dreidimensionalen Darstellung entsprechen die einzelnen Kreissegmente Tortenstücken.

  • Die Darstellung in Kreissegmenten oder Tortenstücken ist schwierig zu interpretieren, weil der Betrachter Winkel und Flächen interpretieren muss (Cleveland 1994, S. 262-264). Deshalb kann die Darstellung leicht über die tatsächlichen Häufigkeiten bzw. Anteile der einzelnen Kategorien täuschen (Kühnel und Krebs 2007, S. 63). In den Sozialwissenschaften wird von Kreisdiagrammen eher abgeraten (Kohler und Kreuter 2017, S. 181). Deutlicher formuliert es Plümper (2012, S. 173): „In keinem vernünftigen Journal werden Tortendiagramme abgedruckt.“ In der R-Dokumentation zu Kreisdiagrammen heißt es: „Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.”

  • Trotz dieser Warnung können mit der Funktion pie Kreisdiagramme mit R erstellt werden. Mit dem Skript im Kasten wird ein Kreisdiagramm der Bildungsgruppen erstellt. Mit main wird der Titel festgelegt, mit col die Farben der Kreissegmente. Mit dem Argument labels werden die einzelnen Segmente beschriftet. In Abbildung 26 wird das erstellte Diagramm dokumentiert.

  • Kreisdiagramm:

    pie(tab.bildung,

    main = "Kreisdiagramm",

    col = c("red", "blue", "green"),

    labels = c("gering", "mittel", "hoch"))



Histogramm


  • Histogramme sind Darstellungen für metrische Variablen mit vielen Ausprägungen bzw. vielen Gruppen. Der auffälligste Unterschied zu Säulen- und Balkendiagrammen ist, dass die Balken eines Histogramms unmittelbar aneinander angrenzen (Gehring und Weins 2009, S. 113). Für die Balken gilt das Prinzip der Flächentreue: Die Fläche über den Klassen (das Produkt aus Balkenhöhe und Balkenbreite) ist proportional zu den absoluten bzw. relativen Häufigkeiten (Gehring und Weins 2009, S. 113; Kühnel und Krebs 2007, S. 58-60). Deshalb bieten Histogramme einen informativen Eindruck von der empirischen Häufigkeitsverteilung. Symmetrie, Schiefe und Steilheit einer Verteilung können leicht erkannt werden.

  • In der Regel werden Histogramme für gruppierte Daten verwendet (z.B. Altersgruppen oder Einkommensklassen). Dabei sind die einzelnen Klassen meist gleich groß. Für die Anzahl der Klassen gibt es zahlreiche Empfehlungen. Bei bis zu 100 Beobachtungswerten sind mindestens zehn Klassen, bei 1000 Beobachtungen mindestens 13 Klassen, und bei 10.000 Beobachtungen mindestens 16 Klassen zu bilden

  • Mit dem Skript im Kasten wird ein Histogramm des Alters angelegt. Mit dem Argument breaks wird die Anzahl der Säulen bzw. Klassen beeinflusst, d.h. R weicht je nach Datenlage evtl. von der Vorgabe ab. Je größer die Zahl, desto mehr Säulen bzw. Klassen werden angelegt. In Abbildung 27 ist das erstellte Histogramm dokumentiert.

  • Histogramm:

    hist(ess9de_m1$alter,

    xlim = c(0, 100),

    ylim = c(0, 250),

    main = "Histogramm des Alters",

    ylab = "Häufigkeit",

    xlab = "Alter in Jahren",

    col = "white",

    border = "black",

    breaks = 15)


Boxplot


  • Ein sehr informatives Instrument zur Beurteilung einer empirischen Verteilung eines mindestens intervallskalierten Merkmals ist der Boxplot, der oft auch als Box-and-Whiskers-Plot bezeichnet wird (Tukey 1977; Degen 2010, S. 95-97). Abbildung 28 sind die charakteristischen Elemente eines Boxplots zu entnehmen. Ein Boxplot besteht aus einem Rechteck (Box), welches die mittleren 50 Prozent der Beobachtungswerte umfasst. Linie 1 repräsentiert das untere Quartil (25 Prozent der Beobachtungen), Linie 3 das obere Quartil (75 Prozent der Beobachtungen). Linie 2 repräsentiert den Median (50 Prozent der Beobachtungen). Der Bereich vom unteren zum oberen Quartil wird auch Interquartilsabstand genannt.

  • Durch die Antennen (4) werden die Werte außerhalb der Box dargestellt. Diese Antennen werden auch Whisker genannt, deshalb die englische Bezeichnung als Box-and-Whisker. Die Länge der Whisker ist auf maximal das 1,5-fache des Interquartilsabstands beschränkt (also 1,5-mal der Boxlänge). Gibt es keine Werte außerhalb dieser Grenze, dann wird die Länge durch den minimalen und maximalen Wert festgelegt. Beobachtungswerte, die außerhalb der Whiskers liegen, gelten als auffällige Datenpunkte.

  • Mit dem Skript im Kasten wird ein Boxplot der Zufriedenheit mit der Demokratie angefordert (stfdem), die auf einer Skala von 0 bis 10 erfasst wurde. Höhere Werte deuten auf eine größere Demokratiezufriedenheit hin. Mit ylab wird die y-Achse beschriftet, mit ylim wird die Achsenskalierung angepasst. Mit dem col-Argument wird die Farbe in der Box (weiß) festgelegt

  • Boxplot (Demokratiezufriedenheit): boxplot(ess9de_m1$stfdem,

    ylab = "Demokratiezufriedenheit",

    ylim = c(0, 10),

    col = "white")

  • Boxplots bieten sich auch an, um Häufigkeitsverteilungen mehrerer Variablen in einer Abbildung zu vergleichen. Diese Darstellungsform kann beispielsweise genutzt werden, um die Demokratiezufriedenheit in Abhängigkeit der Bildung zu illustrieren. Für die Darstellung ist ein kleiner Zwischenschritt erforderlich, da die Bildungsvariable (bildung) zwar als Faktorvariable spezifiziert ist, aber noch keine Labels definiert sind. Deshalb wird zunächst die Variable bildung2 erstellt, die auf der Variable bildung basiert, dabei werden den Levels die Labels „gering“, „mittel“ und „hoch“ zugewiesen. Diese Labels werden dann bei den Boxplots dargestellt. Wird anstelle der Variable bildung2 die Ursprungsvariable bildung genutzt, dann werden die Werte 0, 1 und 2 ausgegeben.

  • In der Funktion boxplot wird in Klammern zunächst die abhängige Variable genannt (stfdem), es folgt die Tilde (~) und dann die unabhängige Variable (bildung2), am Ende wird der Datensatz aufgeführt (ess9de_m1). Mit den Argumenten xlab, ylab, ylim und col wird die Ausgabe der Boxplots genauer bestimmt. In Abbildung 29 sind die beiden Boxplots dargestellt. Auf der linken Seite der Boxplot der Demokratiezufriedenheit, auf der rechten Seite die Boxplots der Demokratiezufriedenheit in Abhängigkeit von der Bildung.

  • Boxplot II (Demokratiezufriedenheit nach Bildungsgruppen):

    ess9de_m1$bildung2 <- factor(ess9de_m1$bildung, # Zwischenschritt

    levels = c(0,1,2),

    labels = c("gering", "mittel", "hoch"))

    table(ess9de_m1$bildung2)

    boxplot(stfdem ~ bildung2, ess9de_m1, # Erstellung des Boxplots

    xlab = "Bildung",

    ylab = "Demokratiezufriedenheit",

    ylim = c(0, 10),

    col = "white")


Streudiagramm


  • Mit einem Streudiagramm (engl. scatter plot) kann der Zusammenhang zwischen zwei (mindestens intervallskalierten) Merkmalen dargestellt werden. In Abschnitt 7.2 wurde mit einem Streudiagramm der Zusammenhang zwischen dem Einkommen und dem Alter bei zehn (fiktiven) Befragten illustriert. Im Skript wird zunächst das Objekt beispiel angelegt, das die Daten der zehn Personen enthält. Anschließend wird mit der Funktion plot das Streudiagramm angefordert. In der Klammer wird zunächst die abhängige Variable (einkommen) genannt, es folgt die Tilde (~) und dann die unabhängige Variable (alter). Mit den folgenden Argumenten wird das Streudiagramm angepasst: Mit dem Argument col wird die Farbe des Plotsymbols festgelegt, mit dem Argument pch das Plotsymbol spezifiziert. R kennt insgesamt 25 verschiedene Plotsymbole, die in Abbildung 30 dokumentiert sind. Mit der Funktion cex wird die Größe des Plotsymbols angepasst.

  • Streudiagramm:

    # Beispieldaten erstellen

    beispiel <- data.frame(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),

    einkommen = c(800, 900, 1600, 1700, 2000, 2200, 2000, 1800, 2400, 1900),

    alter = c(15, 20, 25, 30, 35, 40, 45, 50, 55, 60))

    # Streudiagramm erstellen

    plot(einkommen ~ alter, beispiel,

    xlab = "Alter in Jahren",

    ylab = "Einkommen in Euro",

    ylim = c(0, 2500),

    xlim = c(0, 80),

    main = "Einkommen in Abhängigkeit des Alters",

    col = "black",

    pch = 16,

    cex = 2)

    # Regressionsgerade hinzufügen abline(lm(beispiel$einkommen~beispiel$alter),

    lty = 3,

    lwd = 3,

    col = "red")

  • Nach der Erstellung des Streudiagramms kann mit der Funktion abline noch eine Regressionsgerade hinzugefügt werden. In Klammern wird die lineare Regressionsgerade spezifiziert, mit dem Argument lty (line typ) wird der Linientyp festgelegt, dabei können sieben Typen unterschieden werden und zwar von solid (durchgezogene Linie) mit dem Code 1 über dotted (gepunktete Linie) mit dem Code 3 bis hin zu longdash mit dem Code 5 (kurze Linien). In der Dokumentation der Funktion par sind die verschiedenen Linientypen dokumentiert. Mit dem Argument lwd (line width) wird die Linienstärke spezifiziert und mit col wird die Farbe der Linie festgelegt. In Abbildung 31 wird das erstellte Streudiagramm dokumentiert.



Pakete im Überblick



Paket

Informationen

car

Das Paket car (benannt nach dem Buch „Companion to Applied Regression“) beinhaltet neben zahlreichen Funktionen für die Regressionsdiagnostik auch eine Funktion für die Berechnung des Levene-Tests (leveneTest). https://CRAN.R-project.org/package=car https://socialsciences.mcmaster.ca/jfox/Books/Companion/index.html

DescTools

Das Paket DescTools umfasst eine Sammlung von Funktionen für die univariate und bivariate Datenanalyse. Die Autoren bezeichnen das Paket selbst als einen „Werkzeugkasten“, um die deskriptive Datenanalyse zu erleichtern. https://CRAN.R-project.org/package=DescTools

descr

Das Paket descr enthält nützliche Funktionen, um Häufigkeits- und Kreuztabellen ausgeben zu lassen. https://CRAN.R-project.org/package=descr

lm.beta

Das Paket stellt bei der linearen Regression die standardisierten Regressionskoeffizienten (sogenannte Beta-Koeffizienten) zur Verfügung. https://CRAN.R-project.org/package=lm.beta

sjlabelled

Das Paket sjlabelled enthält Funktionen, um Variablen- und Wertelabels zu konvertieren. https://CRAN.R-project.org/package=sjlabelled https://strengejacke.github.io/sjlabelled/index.html

sjmisc

Das Paket sjmisc enthält zum einen nützliche Funktionen, um einen Datensatz (besser) kennenzulernen (z.B. frq, descr), zum anderen aber auch Funktionen für die Datenaufbereitung (z.B. rec). https://CRAN.R-project.org/package=sjmisc https://strengejacke.github.io/sjmisc/

sjPlot

Das Paket sjPlot bietet Funktionen zur Ausgabe von Tabellen und Grafiken. https://CRAN.R-project.org/package=sjPlot https://strengejacke.github.io/sjPlot/

psych

Das psych-Paket enthält eine Sammlung verschiedener Funktionen für die multivariate Datenanalyse (z.B. Faktorenanalyse), aber auch grundlegende deskriptive Statistiken. https://cran.r-project.org/web/packages/psych/index.html

tidyverse

Das tidyverse ist eine Sammlung verschiedener Pakete. Die Pakete im tidyverse teilen eine gemeinsame Philosophie, Grammatik und Datenstrukturen (tibbles). https://www.tidyverse.org

ggplot2

für Grafiken

https://ggplot2.tidyverse.org/

see

Darstellung von Ergebnissen statistischer Analysen https://easystats.github.io/see/index.html


Author

Maya G.

Informationen

Zuletzt geändert