1 Einleitung

Dieses Lehrskript möchte eine Einführung in die Anwendung statistischer Verfahren zur Auswertung von empirischen Daten mithilfe der Programmiersprache R bieten. Es bezieht sich direkt auf die Inhalte des Moduls BASOZ 33 Statistik und enthält darüber hinaus auch grundlegende Informationen für das Modul BASOZ 31c Quantitative Methoden der empirischen Sozialforschung im B.A. Soziologie. Das Skript hat den Anspruch, die Lehr- und Lerninhalte kurz und prägnant wiederzugeben und ihre Anwendung mithilfe von R verständlich zu machen – dafür fokussiert es auf die kurze Erklärung zentraler Begriffe, auf die Darstellung der Umsetzung in R und auf Anwendungsbeispiele. Es bietet einen Einstieg in die Statistik mit R und RStudio, behandelt die Thematik jedoch nicht in aller Tiefe bzw. Ausführlichkeit.

Als kompaktes Lehrmaterial ergänzt das Skript die für BASOZ 33 Statistik vorgesehenen Lehrbücher:

  • Moderne Datenanalyse mit R von Sebastian Sauer, das in der 1. Auflage hier heruntergeladen werden kann (bei Zugriff über die Thüringer Universitäts- und Landesbibliothek (ThULB) Jena) und

  • Statistik. Eine interdisziplinäre Einführung mit interaktiven Elementen von Hans-Joachim Mittag und Katharina Schüller, das in der 7. Auflage hier (ebenso bei Zugriff über die ThULB) heruntergeladen werden kann.

Im Lehrskript führen direkte Verweise zu den entsprechenden Lehrbuchkapiteln, in denen die Inhalte i. d. R. ausführlicher und mit weiteren Beispielen erläutert werden. Das Lehrskript möchte den Einstieg in das Verständnis von R und die Arbeit mit R erleichtern und dient als „Brücke“ für den Übergang zu den ausführlichen Abhandlungen im Lehrbuch. Weitere nützliche Materialien, die z. T. weitere Beschreibungen und/oder andere Schwerpunktthemen bieten, sind

  • das digitale Lehrbuch R für empirische Wissenschaften (kurz: remp) von Jan Philipp Nolte, das hier zu finden ist

  • oder das ILMES (Internet-Lexikon der Methoden der empirischen Sozialforschung), das hier abrufbar ist.

Das Lehrskript vermittelt wesentliche Kenntnisse zur Ausführung von statistischer Datenanalyse mithilfe der Programmiersprache R und der Benutzer*innenoberfläche RStudio. Da das Lehrskript als sogenanntes RNotebook aufgebaut ist, können alle vorgestellten R-Anwendungen direkt innerhalb des Skriptes nachvollzogen werden. Dies ist möglich, weil Codeblöcke den RCode, aber auch den dazugehörigen Output darstellen.

Das Lehrskript arbeitet mit zwei Datensätzen. Der erste basiert auf Daten der PISA-Erhebung im Jahre 2022 und wird auf Moodle bereitgestellt. Der zweite Datensatz ist ein sogenannter fiktiver Datensatz zum Gender-Pay-Gap. Ein Exkurs mit Informationen zu den Datensätzen findet im Kapitel 2.9.2 statt.

Das Lehrskript gliedert sich in mehrere Themenblöcke, die in Teilen aufeinander aufbauen. Im Fokus des 2. Kapitels stehen die Grundlagen im Umgang mit R und RStudio. Es werden die Schritte zur Installation des Programmes, der Aufbau der Benutzer*innenoberfläche sowie die grundlegende Struktur des Programmiersprache R vermittelt. Kapitel 3 thematisiert die Grundlagen und Verfahren der deskriptiven Statistik. Dies umfasst sowohl Kenntnisse zur Beschreibung der Verteilung von Daten und zur Erfassung von Zusammenhängen innerhalb von Daten als auch die Möglichkeiten der Darstellung dieser. Darauf aufbauend blickt Kapitel 4 Von Daten zu Erkenntnissen: Kreuztabellen als Analysewerkzeug und zielt stark auf das Verständnis und die Analyse des Zusammenhanges zweier Variablen ab. Kapitel 5 hat die Grundlagen der Regression zum Inhalt. Im Kapitel wird kurz die Regression als statistische Methode zur Modellierung von Zusammenhängen vorgestellt, um anschließend ihre Anwendung mit R zu erläutern. Daran knüpft Kapitel 6 Von Daten zu Erkenntnissen: Regressionstabellen als Analysewerkzeug an, indem es auf Anwendung, Verständnis und Interpretation eines Regressionsbeispiels fokussiert.



2 Grundlagen im Umgang mit R und RStudio

Dieses Kapitel zielt darauf ab, Grundlagen des Einstiegs und Umgangs mit R und RStudio zu vermitteln. Die Inhalte bilden beim ersten Kontakt mit R die notwendige Voraussetzung, um die folgenden Kapitel gut verstehen und die vorgestellten statistischen Verfahren in R anwenden zu können. Es befähigt dazu, sowohl die in den folgenden Kapiteln aufgeführten Inhalte zu verstehen als auch eigenständig Befehle und Funktionen in RStudio auszuführen.

Dafür wird zunächst erläutert, worum es sich bei der Programmiersprache R und dem Programm RStudio (Kapitel 2.1) handelt und wie beide Anwendungen auf eigenen Rechnern installiert werden können (Kapitel 2.2). Im Anschluss werden der Aufbau der Benutzer*innenoberfläche (Kapitel 2.3) und die Grundlagen der Programmiersprache R mit Syntax, Operatoren, Funktionen und Packages erklärt (Kapitel 2.4). Dies wird ergänzt durch weiterführende Hinweise zur Nutzung der Help-Funktion (Kapitel 2.5) und zu Packages zur Funktionenerweiterung von R (Kapitel 2.6). Im Anschluss widmen wir uns der Zuweisung von Werten zu Variablen (Kapitel 2.7) und der Unterscheidung von Datentypen in RStudio (Kapitel 2.8), um darauf aufbauend auf den Umgang mit Datensätzen in RStudio (Kapitel 2.9 und 2.10) einzugehen.


2.1 R und RStudio

R ist eine Programmiersprache, die u. a. gut für die statistische Datenanalyse und grafische Darstellung von Daten geeignet ist. Als Open-Source-Software ist R kostenfrei zugänglich, was sich in der weit verbreiteten Nutzung von R in Forschung und Lehre wiederspiegelt. RStudio ist die grafische Benutzer*innenoberfläche bzw. die sogenannte Entwicklungsumgebung, über welche die Programmiersprache R ausgeführt werden kann. Für Interessierte: Das Lehrbuch Moderne Datenanalyse mit R bietet im Kapitel 2 Hallo, R spannende Einblicke in die Geschichte von R.

Wann immer RStudio gestartet wird, startet R automatisch im Hintergrund. RStudio wird mithilfe von Befehlen in Form von Funktionen bedient. Der sogenannte Code, der dadurch entsteht, wird als Skript (bzw. im Englischen script) bezeichnet. In RStudio können entsprechende Skripte erstellt und dokumentiert bzw. gespeichert werden. Dies ermöglicht jederzeit auf den bisherigen Code sowie Zwischenergebnisse der Datenanalyse (z. B. Berechnungen) zuzugreifen, diese weiterzuverwenden und den bisherigen Code weiterzuführen. R bzw. RStudio verfügt in der sogenannten Base-Version über einen Grundumfang an Funktionen. Dieser Funktionsumfang lässt sich durch sogenannte packages, die in der RStudio Benutzer*innenoberfläche heruntergeladen und installiert werden können (Kapitel 2.7), erweitern. Um den Ausführungen des Lehrskripts folgen und selbst RStudio bedienen zu können, ist es wichtig, sich alle genannten Begriffe, die in den nächsten Kapiteln noch näher erklärt werden, gut einzuprägen.


2.2 Installation von R und RStudio

Die Installationsdatei für R kann hier heruntergeladen werden, indem im ersten „Kasten“ mit dem Titel „Download and Install R“ der für das eigene Betriebssystem passende Link (Linux/macOS/Windows) ausgewählt und anschließend die Installationsdatei heruntergeladen wird (Hinweis: für Windows wird die „base“-Version empfohlen, bei macOS ist das Alter des Gerätes entscheidend). Das Online-Lehrbuch von Nolte bietet hier weiterführende Hinweise zur Installation von R, aber auch RStudio.

Die Installationsdatei für RStudio kann hier heruntergeladen werden. Es handelt sich hierbei um die kostenfreie RStudio-Desktop Version, die für den universitären Gebrauch ausreicht. Unter der Überschrift „All Installers and Tarballs“ kann die für das eigene Betriebssystem passende Installationsdatei heruntergeladen werden.

Um RStudio nutzen zu können, muss zwingend R im Vorfeld installiert werden. Sobald beide Programme erfolgreich auf Ihrem Rechner installiert sind, genügt es in Zukunft RStudio zu öffnen – R wird dann im Hintergrund automatisch ausgeführt.


2.3 Benutzer*innenoberfläche von RStudio

Nach dem Öffnen von RStudio (über das Desktop-Symbol oder in den Programmen des Endgerätes) oder ggfls. dem Login auf den R-Server gelangen Sie in die Benutzer*innenoberfläche von RStudio. Die Abbildung 1 zeigt den Workspace von RStudio bei erstmaligem Öffnen des Programms, der sich in verschiedene Abschnitte bzw. Fenster gliedert. Links befindet sich die Console (rote Markierung), rechts oben das Environment (blaue Markierung) und darunter einen Abschnitt mit mehreren Reitern, der im Folgenden Informationspace (gelbe Markierung) genannt wird.

Abbildung 1: Workspace in RStudio
Abbildung 1: Workspace in RStudio


Bei erstmaligem Öffnen von RStudio fehlt für die Arbeit in RStudio noch das Script-Fenster. Um dieses hinzuzufügen, klicken Sie oben links auf das grün hinterlegte Kreuz vor einem weißen Quadrat und wählen im Dropdown-Menü RScript aus (Abbildung 2). Ihre Benutzer*innenoberfläche enthält nun vier Fenster unterschiedlicher Größe (Abbildung 3).

Abbildung 2: Hinzufügen eines RScript
Abbildung 2: Hinzufügen eines RScript


Abbildung 3: Workspace mit RScript
Abbildung 3: Workspace mit RScript


Im RScript werden die auszuführenden Befehle zeilenweise als Code niedergeschrieben und so dokumentiert. Es können mehrere Scripte nebeneinander geöffnet werden. Im Script geschriebene Befehle werden über die Tastenkombination Strg+Enter (bei Windows) und Command+Enter (bei macOS) ausgeführt, d. h. „an die „Console gesendet“.

Ausgeführte Befehle werden in der Console ggfls. zusammen mit dem Ergebnis des Befehls angezeigt. Grundsätzlich ist es möglich, Befehle auch direkt in der Console zu schreiben und auszuführen. Entsprechende Befehle sind jedoch nicht Teil des Scripts und damit nicht dauerhaft dokumentiert. Es wird daher empfohlen Befehle immer über das Script auszuführen.

Im Environment werden die Datensätze, die Sie einlesen, erstellen und bearbeiten (Kapitel 2.9), angezeigt. Auch Zwischenergebnisse von ausgeführten Berechnungen können gezielt im Environment hinterlegt werden, um später auf diese zugreifen und mit ihnen weiterarbeiten zu können.

Der Informationspace enthält verschiedene hilfreiche Reiter, zwischen denen gewechselt werden kann. Im Help-Reiter können über die Suchfunktion (Lupe) Erklärungen zu einzelnen Befehlen und deren Aufbau aufgerufen werden. Im Plots-Reiter werden von Ihnen mittels Befehlen generierte Grafiken und Darstellungen angezeigt. Der Packages-Reiter gibt Auskunft über installierte Packages und darüber ob diese für die Verwendung aktiviert sind. Zudem können weitere Packages in diesem Fenster installiert werden.

Um den Ausführungen des Lehrskript zu folgen und selbst den Umgang mit RStudio zu erproben, ist es wichtig, dass Sie sich die Bezeichnungen der Abschnitte/Fenster einprägen.


2.4 Syntax, Code, Operatoren und Funktionen

Was in einem RScript niedergeschrieben wird, wird als Code bezeichnet. Code besteht aus Befehlen und Kommentaren. Befehle sind Anweisungen, die in einer bestimmten Schreibweise und Sprache (Syntax) formuliert werden und die von R ausführt werden können. R unterscheidet zwischen Groß- und Kleinschreibung, deswegen ist es sinnvoll auf eine einheitliche Schreibweise zu achten. Befehle können beispielsweise einfache Rechenoperationen oder auch komplexe Funktionen sein. Kommentare können dem Script hinzugefügt werden, um dieses zu strukturieren (Überschriften und Unterüberschriften) und um Befehle und/oder deren Ergebnisse zu erläutern. Kommentare werden durch ein Rautezeichen (#) eingeleitet. Im Script werden sie – wenn das Rautezeichen gesetzt ist – durch RStudio automatisch farblich hervorgehoben und nicht in der Console ausgeführt, wenn sie mit dem zugehörigen Befehl an diese übermittelt werden.

Wenn Befehle ausgeführt werden sollen, werden diese i. d. R. im RScript verfasst und anschließend mittels Strg+Enter ausgeführt, d. h. an die Console übermittelt. Auf diese Weise können, wie im folgenden Codeblock deutlich wird, über R auch einfache Rechenoperationen durchgeführt werden. In der Console kennzeichnet > den ausgeführten Befehl. Darunter wird das Ergebnis des Befehls ausgegeben, wobei die Ergebniszeilen in Klammern nummeriert werden (hier: [1]). Sie werden im Verlauf dieses Lehrskripts und der Arbeit mit R noch Befehle kennenlernen, die mehr als einzeilige Ergebnisse produzieren.

2+3

[1] 5

3*4

[1] 12


Die folgende Tabelle fasst grundlegende einfache Rechenoperationen und ihre Schreibweise in R-Syntax zusammen.

Einfache Rechenoperationen Eingabe in R
Addition 1+2
Subtraktion 2-1
Multiplikation 2*2
Division 3/2
Potenzieren 2^3 oder 2**3

Weitere Rechenoperationen oder komplexere Befehle werden in R als Funktionen niedergeschrieben und ausgeführt. Grundlegend folgen Funktionen folgendem Aufbau: function(x)

Der Ausdruck function steht stellvertretend für die Funktionsbezeichnung, die oft aber nicht immer mit der Operation bzw. den Operationen, die sie ausführt, in Verbindung steht. So zieht beispielsweise die Funktion sqrt die Wurzel (square root) oder mean berechnet einen Mittelwert. Funktionen führen mitunter mehrere Operationen nacheinander aus: Beispielsweise bildet mean zunächst die Summe der vorgesehenen Werte und dividiert diese anschließend durch ihre Anzahl.

Zu einer vollständigen Funktion gehört neben der Funktionsbezeichnung auch eine Angabe, auf welche Argumente sich diese bezieht. Die Angabe der Argumente erfolgt nach der Funktionsbezeichnung in Klammern. Eine Funktion kann auf ein Argument oder mehrere Argumente, beispielsweise function(x, y, z), angewendet werden.

Der folgende Codeblock zeigt die RSyntax für die beiden bereits genannten Funktionsbeispiele: sqrt und mean.

sqrt(9)

[1] 3

mean(c(5,4,6))

[1] 5

Zuerst wurde die Funktion sqrt auf den Wert 9 als Argument angewandt und dementsprechend die Wurzel aus 9 gezogen und 3 als das Ergebnis der Berechnung ausgegeben. Darunter wurde die Funktion mean auf mehrere Argumente angewandt, konkret auf die Werte 5, 4 und 6. Das Ergebnis der Funktion mean, d. h. der Addition dieser drei Argumente und die anschließende Division durch ihre Anzahl, ergibt 5. (Hinweis: Um die Funktion mean auszuführen, müssen die Argumente, über die combine-Funktion zu einem Vektor verbunden werden.)


2.5 Help-Funktion

R verfügt über eine einfach zugängliche Hilfefunktion, über die Details zu Befehlen aufgerufen werden können. Sollten Sie die korrekte Syntax eines Befehls nicht (mehr) kennen (z. B. was in einer Klammer stehen muss oder wo Kommata notwendig sind) können Sie auf die help-Funktion zurückgreifen. Die Hilfefunktion gibt darüber hinaus auch Auskunft, unter welchen Bedingungen einzelne Befehle ausgeführt werden können. Angesteuert wird die Hilfefunktion für einen bestimmten Befehl über ein ? oder help vor der Funktionsbzeichnung. Zur Hilfefunktion für sqrt gelangen Sie also über

?sqrt

oder

help(sqrt)

Es bietet sich an, diese help-Funktion direkt in die Console zu schreiben. Nach der Ausführung werden im Informationspace unter dem Reiter Help die gewünschten Informationen angezeigt.


2.6 Packages

Soll der Funktionsumfang von R bzw. RStudio erweitert werden, passiert dies in der Regel durch sogenannte Packages. Packages sind Erweiterungen für R, die häufig zusätzliche Funktionen enthalten. Prinzipiell kann jede sachkundige Person R-Packages schreiben und in den „R-Appstore“ oder auf weiteren Portalen wie beispielsweise Github hochladen. R-Packages können von dort kostenfrei heruntergeladen oder direkt in RStudio gesucht und installiert werden. Aufgrund der Vielzahl an existierenden Packages und der Tatsache, dass keine zentrale „Prüfung“ oder „Kontrolle“ von Packages erfolgt, ist es wichtig, bedacht mit ihnen umzugehen. Im Lehrskript finden folgende Packages Verwendung:

  • dplyr
  • gmodels
  • ggplot2
  • modelsummary


2.6.1 Packages installieren und laden

Um Packages direkt in RStudio zu installieren, kann man im Reiter Packages den Button Install nutzen. Alternativ können Sie auch direkt mittels eines Befehls das gewünschte Package installieren. Dieses Vorgehen bietet sich an, wenn Sie ein RScript schreiben, um dort die Installation der notwendigen Packages zu dokumentieren. Der Befehl zur Installation ist wie folgt aufgebaut: install.packages("package_name")

Für das Package mit dem Namen tidyverse lautet der Befehl demnach wie folgt:

install.packages("tidyverse")

Um ein Package schließlich zu verwenden, muss es noch geladen bzw. gestartet werden. Der Befehl dafür lautet: library(package_name)

Für das package tidyverse dementsprechend: library(tidyverse)

Sinngemäß steht dieser Befehl dafür, dass ein installiertes Programm (das Package), das sich in der „Bücherei mit Programmen“ (Library) befindet, nun auch aus dem Schrank genommen, d. h. gestartet wird. Sobald ein Package geladen ist, erscheint ein Haken im Kasten vor dem entsprechenden Package im Packages-Reiter. Wenn beim Versuch eine Funktion auszuführen eine Fehlermeldung in R auftaucht, kann es sinnvoll sein, in einem ersten Schritt zu prüfen, ob das nötige Package installiert und auch anschließend geladen wurde.

Wird RStudio bzw. R geschlossen, werden auch alle geladenen Packages geschlossen. Sie bleiben installiert, müssen bei erneutem Öffnen von RStudio jedoch neu geladen werden.

Folgend finden Sie alle notwendigen Befehle, um die im Lehrskript verwendeten packages zu installieren und zu laden.

install.packages("dplyr")
library(dplyr)

install.packages("gmodels")
library(gmodels)

install.packages("ggplot2")
library(ggplot2)


2.6.2 Packages und Befehle: Zuordnung

Es kann von Interesse sein, herauszufinden, welche Befehle in einem bestimmten Package sind oder auch in welchem Package ein bestimmter Befehl ist. Eine Liste aller Befehle, die in einem installierten Package enthalten sind, öffnet sich beim Klick auf den Namen eines Packages im Packages-Reiter. Wurde ein Package geladen, kann auch über die Hilfe Einsicht in das Package genommen werden, z. B. für tidyverse

??tidyverse

Ist der Name eines Befehls bekannt, aber unbekannt, in welchem Package er zu finden ist, kann der Befehl help.search Abhilfe schaffen. Für den Befehl ggplot2 würde die Suche wie folgt lauten:

help.search("ggplot2")

Im Informationspace unter Help werden dann die verschiedenen Packages, in denen der Befehl enthalten ist, zusammen mit einer kurzen Beschreibung des jeweiligen Befehls angezeigt. Durch Klicken auf den unterstrichenen Befehl öffnen sich weitere Informationen zum Befehl und der entsprechenden Syntax. Manche Befehle sind unter gleichem Namen, aber mit unterschiedlicher Funktion, in verschiedenen Packages enthalten, z. B. filter. Hier ist es wichtig, deutlich zu machen, welcher Befehl genau gemeint ist bzw. aus welchem Package der Befehl ausgeführt werden soll. R verwendet hierfür eine spezifische Schreibweise: package-Name::Befehl-Name

Soll also der filter-Befehl aus dem Package dplyr ausgeführt werden, lautet die Syntax wie folgt: dplyr::filter

Wenn der Befehl bereits geladen wurde, finden Sie das übergeordnete Package auch über: find("Befehlname") z. B. für den Befehl ggplot.

find("ggplot")


2.7 Zuweisungen

Bei der Arbeit mit Daten und Datensätzen in R bzw. RStudio sind Zuweisungen ein wichtiges Grundprinzip. Damit Daten im Environment – sozusagen dem Arbeitsgedächtnis in RStudio – abgespeichert werden, muss eine Zuweisung stattfinden. Eine Zuweisung wird in R über den Zuweisungspfeil (<-) ausgeführt. Über den Zuweisungspfeil wird das, was links vom Pfeil steht, dem, was rechts vom Pfeil steht, zugeordnet. Hinter dem Pfeil können verschiedene Datentypen oder auch Rechenoperationen stehen.

Beispielsweise kann dem Objekt a der Wert 5 zugeordnet werden oder dem Objekt b das Ergebnis der Rechnung 5*2:

a <- 5
b <- 5*2

Zuweisungen können nicht nur für Zahlen, sondern auch für Buchstaben bzw. Worte durchgeführt werden. Hier ist jedoch darauf zu achten, dass diese in Anführungszeichen zu setzen sind, weil es sich um einen spezifischen Datentypus handelt. Ein Beispielbefehl schaut dann wie folgt aus:

c <- "Frühling"

Wenn a und b als Objekte eine Zuweisung erhalten haben, dementsprechend im „Arbeitsgedächtnis“ gespeichert wurden, kann mit diesen Objekten weitergearbeitet werden. Sie können auch für neue Zuweisungen genutzt werden, beispielsweise indem man sie für Rechenoperationen nutzt:

d <- a*b 
print(d)

[1] 50

Wenn die Befehle für die Zuordnung an die Console übergeben werden, erscheinen die Objekte a, b, c und d im Environment, d. h. sie wurden im „Arbeitsgedächtnis“ gespeichert (Abbildung 4).

Abbildung 4: Zuweisungen in RStudio
Abbildung 4: Zuweisungen in RStudio


2.8 Datentypen

In R kann mit verschiedenen Datentypen gearbeitet werden. Dies ist auch notwendig, da Datensätze häufig nicht nur Zahlen enthalten, sondern beispielsweise auch Wörter bzw. Buchstaben. Die einzelnen Datentypen haben spezifische Bezeichnungen in R, welche in der folgenden Tabelle aufgeführt sind.

Datentyp Beispiel Beschreibung
Numeric 2.5, 3.14 Ganze und reele Zahlen
Character “Frühling”, “Herbst” Buchstaben oder Zeichenfolgen, Hinweis: immer in Anführungenzeichen
Factor 3427 Nominal skalierte Zahlenfolge, z. B. eine Personen-ID
Double .3333334 „floating point value“
Integre -1, 0, 1 Ganze Zahlen
logical/boolean TRUE, FALSE Abfrage von „wahr“ oder „falsch“

Mit Daten des Typs numeric, d. h. ganzen und reelen Zahlen, können Rechenoperationen in R ausgeführt werden. Die Dezimalstellen nach dem Komma werden in R bzw. RStudio durch einen Punkt getrennt. Characters sind Buchstaben oder Zeichenfolgen, d.h. häufig Wörter. In R heben sie sich von anderen Datentypen dadurch ab, dass sie in Anführungszeichen (beide oben!) geschrieben werden. Dies trifft neben character-Daten auch auf factor-Daten zu. Diese bestehen zwar aus Ziffern bzw. Zahlen, sind jedoch nominal skaliert. Mit ihnen sind – wie auch mit character-Daten keine sinnvollen Rechenoperationen – möglich. Eine Variable des Datentyps factor kann beispielsweise das Geschlecht sein. Wenn beispielsweise 0 für „männlich“, 1 für „weiblich“ und 2 für „divers“ steht, können die Zahlen nicht sinnvoll addiert, subtrahiert, dividiert oder multipliziert werden, da die Geschlechter, für die sie stehen nicht addiert, subtrahiert, dividiert oder multipliziert werden können.

Wenn Sie herausfinden möchten, welchen Datentyp eine Variable hat, hilft Ihnen die Funktion class() weiter.

class(b)

[1] “numeric”

class(c)

[1] “character”


2.9 Datensätze in RStudio

Datensätze sind das Kernstück angewandter Statistik bzw. quantitativer Methoden der empirischen Sozialforschung. Sie enthalten die (empirisch) erhobenen Daten, aus denen Informationen mittels statistischer Verfahren „herausgelesen“ werden sollen. In RStudio können Datensätze eigens angelegt (Kapitel 2.9.1) oder aber bereits bestehende Datensätze eingelesen werden (Kapitel 2.9.3). Kapitel 2.9.3 befasst sich mit einigen gängigen Dateiformaten, in denen Daten potenziell vorliegen können. Weitere Möglichkeiten des Datenimports finden Sie im Lehrbuch von Sauer im Kapitel 6 Datenimport und -export.


2.9.1 Datensätze anlegen und abspeichern

Eine in R sehr wichtige Datenstruktur sind sogenannte Vektoren. Vektoren bündeln Elemente eines Datentyps in einer geordneten Reihenfolge. Erstellt werden Vektoren mit dem Befehl c(), wobei c für „combine“ steht. Im Codeblock wird für die Beispielvektoren x und jahreszeiten deutlich, dass die einzelnen Elemente, die in einem Vektor gebündelt werden sollen, durch Kommata getrennt werden. Im Environment werden Informationen über die erstellten Vektoren angegeben: x enthält Elemente des Datentyps numeric (num), jahreszeiten des Datentyps character (chr). Der Typ des Vektors entspricht dem Datentyp der enthaltenen Elemente. x enthält fünf Elemente [1:5], jahreszeiten vier Elemente [1:4] (Abbildung 5).

x <- c(2,4,6,8,10)
jahreszeiten <- c("Frühling","Sommer","Herbst","Winter")
Abbildung 5: Erstellen von Vektoren
Abbildung 5: Erstellen von Vektoren


Die für einen Datensatz typische Struktur aus Spalten und Zeilen entsteht, wenn mehrere Vektoren miteinander verbunden werden. Diese Struktur wird auch als Matrix (Plural: Matrizen) bezeichnet und ist im Gegensatz zu den eindimensionalen Vektoren mehrdimensional. Die Verbindung der Vektoren zu einer Matrix gelingt über den Befehl cbind(), in dem c hier für „column“ steht. Es werden also Spalten zusammengebunden.

Im folgenden Codeblock werden die Vektoren x und jahreszeiten zu einer Datenmatrix verknüpft. Auffällig ist die in der Console angezeigte Fehlermeldung, die auftritt, weil die Anzahl der Elemente von x und jahreszeiten voneinander abweicht. Da jahreszeiten nur 4 Elemente hat, x jedoch 5 Elemente besitzt, kann nicht für jedes Element von x auch ein Element von jahreszeiten zugeordnet werden. Die erstellte Datenmatrix erscheint, wie in Abbildung 6 deutlich wird, nun auch unter Data im Environment über den Values (Vektoren).

data <- cbind(x,jahreszeiten)
## Warning in cbind(x, jahreszeiten): number of rows of result is not a multiple
## of vector length (arg 2)
Abbildung 6: Erstellen einer Datenmatrix
Abbildung 6: Erstellen einer Datenmatrix


Die in einer Datenmatrix enthaltenen Daten können über den Befehl View() eingesehen werden. Achtung: View muss hier großgeschrieben werden, damit der Befehl funktioniert.

View(data)
Abbildung 7: Datenmatrizen in RStudio ansehen
Abbildung 7: Datenmatrizen in RStudio ansehen


Wird die Datenmatrix über den View-Befehl aufgerufen, öffnet sich im Script-Feld ein neuer Reiter mit dem Namen des Datensatzes (Abbildung 7). In der erzeugten Datenmatrix wird deutlich, dass dem Element 10 aus dem Datenvektor x das Element Frühling aus dem Datenvektor jahreszeiten zugeordnet wurde. Grund dafür ist die, bereits durch die Fehlermeldung deutlich gewordene, unterschiedliche Anzahl der Elemente der beiden Vektoren. Es ist daher wichtig, darauf zu achten, dass nur Vektoren mit einer gleichen Anzahl an Elementen miteinander verbunden werden.

Sofern einzelne Elemente in einem Vektor fehlen, z. B. weil in einem Fragebogen keine Antwort gegeben wurde, kann dieses fehlende Element durch NA (not applicable, deutsch: nicht anwendbar) gekennzeichnet werden. Im folgenden Codeblock wird dies für das fehlende Element in jahreszeiten vorgenommen. Anschließend muss der überschriebene jahreszeiten-Vektor erneut mit x zur Datenmatrix data verbunden werden. Die Fehlermeldung bleibt nun aus und im environment ist durch [1:5] erkenntlich, dass jahreszeiten nun 5 Elemente enthält.

jahreszeiten <- c("Frühling","Sommer","Herbst","Winter", NA)
data <- cbind(x,jahreszeiten)

Enthält eine Datenmatrix fehlende Elemente, die mit NA gekennzeichnet wurden, wird dies auch bildlich verdeutlicht, indem NA ausgegraut wird (Abbildung 8). Es ist besonders wichtig, fehlende Werte als solche zu kennzeichnen, damit diese in späteren Operationen mit den Daten als solche erkannt und beispielsweise nicht in Ergebnisberechnungen einbezogen werden.

Abbildung 8: Fehlende Werte in einer Datenmatrix
Abbildung 8: Fehlende Werte in einer Datenmatrix


Verstanden zu haben, wie Datensätze in R angelegt werden, hilft dabei, mit bereits bestehenden Datensätzen, die in R eingelesen werden sollen, umzugehen. Diese Aufgabe wird Ihnen vermutlich häufiger begegnen, als das Erzeugen von Datensätzen innerhalb von R. Im Folgenden wird kurz der Beispieldatensatz, der für die in den nächsten Kapiteln beschriebenen Inhalte und Vorgänge genutzt wird, vorgestellt.


2.9.2 Exkurs: PISA 2022-Datensatz und Gender-Pay-Gap-Datensatz


Pisa 2022-Datensatz

PISA steht als Akronym für Programme for International Student Assessment (auf Deutsch in etwa: Programm für Internationale Schüler*innenbewertung). Seit 2000 misst dieser internationale Schulleistungstest Kompetenzen von 15-Jährigen Schüler*innen in den Bereichen Lesen, Naturwissenschaft und Mathematik, um u. a. Aussagen über die Qualität des Bildungswesens eines Staates im internationalen Vergleich zu erhalten. Die Datenerhebung findet alle 3 Jahre statt und erfolgt wechselnd mit einem besonderen Fokus auf eine der drei Kompetenzen. Im Jahr 2022 lag der Schwerpunkt auf der Erfassung der Mathematikkompetenzen (Lewalter et al., 2023).

Seit 2015 führen Schüler*innen per Stichprobenauswahl festgelegter Schulen eine kognitive, computerbasierte Testung sowie einen Onlinefragebogen aus. Daneben füllen – ebenfalls online – sowohl Schulleitungen als auch Lehrkräfte einen angepassten Kontextfragebogen aus. Die Datenerhebung startete papierbasiert in 2000. Heute erfolgt jedoch nur noch die Erfassung des Elternfragebogens in Papierform (Lewalter et al., 2023).

Für das vorliegende Lehrskript wurden ein eigens vorgesehener Datensatz aus in Deutschland erhobenen PISA 2022-Daten erstellt. Dieser ist geeignet, einen ersten Eindruck vom Aufbau und der Struktur von Datensätzen zu vermitteln. Für den Lehrskript-Datensatz wurden originale PISA-Daten imputiert, d.h. mittels statistischer Verfahren wurden fehlende Daten wie beispielsweise Antwortausfälle durch plausible Werte ersetzt und der Datensatz damit vervollständigt.


Fiktiver Gender-Pay-Gap-Datensatz

Kapitel 4 und 5 dieses Lehrskriptes arbeiten mit einem weiteren Datensatz, der fiktive Daten zum Gender-Pay-Gap enthält. Der Gender-Pay-Gap bezeichnet den durchschnittlichen Einkommensunterschied zwischen Männern und Frauen, wobei Frauen im Durchschnitt weniger verdienen. Der unbereinigte Gender-Pay-Gap bezeichnet den durchschnittlichen Lohnunterschied zwischen Männern und Frauen. Die Berechnungsgrundlage wird oft auf Basis des Brutto-Stundenlohnes berechnet.

Der fiktive Datensatz kann unter diesem Link abgerufen werden. Dieser Datensatz beinhaltet eine fiktive Stichprobe, fiktiv meint, dass die Variablen keine realen Werte beinhalten und somit nicht der Realität entsprechen. Es werden nur vollzeitarbeitende Frauen und Männer abgebildet. Insgesamt umfasst der Datensatz 400 Fälle mit Informationen zu Geschlecht, Schulabschluss, Hochschulabschluss, Alter, dem Einkommen, sowie Informationen, ob die Person in einem frauen- oder männerdominierten Berufsfeld arbeitet. Im Datensatz gibt es keine fehlenden Werte.


2.9.3 Datensätze einlesen

Soll ein Datensatz in RStudio eingelesen werden, wird dringend empfohlen, RStudio angemessen „darauf vorzubereiten“. Dies passiert, indem ein sogenanntes working directory angelegt wird. Das working directory ist der Ordner auf Ihrem Rechner, in dem sich der Datensatz befindet.


Daten über das Environment in R importieren

Über das Menü im environment und das Icon Import können in RStudio Daten der gängigsten Formate (Text, Excel, SPSS, …) importiert werden (Abbildung 9). Werden Daten auf diesem Weg mittels der RStudio-Oberfläche importiert, laufen im Hintergrund trotzdem Befehle, teilweise unter Nutzung verschiedener packages ab. Sind diese nicht bereits installiert, fragt RStudio, ob eine Installation stattfinden soll.

Abbildung 9: Import von Daten über das Environment
Abbildung 9: Import von Daten über das Environment


CSV-Dateien importieren

Ein weiteres gebräuchliches Format für Daten ist CSV. Die Abkürzung steht für comma separed values. Im Sinne des Namens handelt es sich um ein Textdokument (.txt) in dem Daten (values) durch Komma getrennt aufgelistet sind. Die Daten können ebenfalls über das Menü im environment importiert werden. Besondere Aufmerksamkeit ist nur geboten, weil RStudio an der amerikanischen Schreibweise orientiert ist: Komma als Spaltentrennung und Punkt als Dezimaltrennzeichen. Deutsch formatierte CSV-Dateien nutzen jedoch das Semikolon (Strichpunkt) als Spaltentrennung und das Komma als Dezimaltrennzeichen. Dementsprechend braucht RStudio bei der deutschen Schreibweise spezifizierte Befehle, um die Daten richtig zu importieren.


Daten im R-Format importieren

Noch einfacher als der Import anderer Dateiformate über die RStudio-Oberfläche erfolgt das Laden von Daten im R-Format. Dateien dieses Formates haben die Endungen .rda oder .RData. Diese Dateien können direkt über das Menü mittels File > Open File… geöffnet werden. Von RStudio wird dann der Befehl load() ausgeführt, wobei in Klammern der Dateiname inkl. Endung steht.

Es empfiehlt sich, den load-Befehl direkt in das RSkript aufzunehmen. Der nötige Dateipfad zum Finden des Datensatzes auf dem eigenen Rechner wird, wie der folgende Code-Chunk für den Pisa-Datensatz zeigt, in Klammern angegeben.

load("Daten/data/pisa2022.RData")

Pisa2022-Datensatz einlesen und umbenennen

Der Pisa-Datensatz liegt im Format .RData im Moodle-Kurs. Er muss von dort heruntergeladen und anschließend in RStudio, wie im vorherigen Absatz beschrieben, importiert werden. Wenn der Datensatz importiert wird, wird er zunächst unter dem Namen dataComplete im Environment angezeigt. Um ihm einen verständlicheren Namen zu geben und dataComplete wieder aus dem Environment zu entfernen, werden nacheinander folgende Befehle ausgeführt:

pisa2022 <- dataComplete #erzeugt einen Datensatz mit dem Objektnamen pisa2022, der identisch mit dem Datensatz dataComplete ist.
rm(dataComplete) #hiermit löschen wir den Datensatz dataComplete aus dem Environment, da wir mit pisa2022 arbeiten.


2.10 Aufbereitung von Datensätzen

Bevor mittels statistischer Verfahren und Methoden Informationen aus dem geladenen Datensatz gewonnen werden können, muss dieser häufig erst für die Analyse vorbereitet bzw. aufbereitet werden. Hilfreiche Funktionen zum Aufbereiten eines Datensatzes enthalten die packages tidyverse und dplyr. Tidyverse enthält selbst mehrere packages, u. a. dplyr, deswegen genügt es tidyverse zu installieren und zu laden, um auch auf dplyr zugreifen zu können.

Es gibt zahlreiche Gründe, die eine Aufbereitung von Datensätzen nötig machen. Einige auf den PISA-Datensatz bezogene Anwendungen für die Aufbereitung sind beispielsweise:

  • Filtern: Der vollständige PISA-Datensatz enthält die Daten aller teilnehmenden Länder. Möchte man beispielsweise nur mit den Daten der Schüler*innen aus Deutschland arbeiten, muss der Datensatz gefiltert werden. Um dies zu erreichen, werden aus dem internationalen Datensatz nur diejenigen Schüler*innen als Teilmenge herausgenommen – d.h. gefiltert –, die in Deutschland zur Schule gehen.

  • Selektieren: Der vollständige PISA-Datensatz enthält mehrere hundert Variablen, d.h. mehrere hundert Spalten. Wenn einige dieser Variablen für die eigene Untersuchung nicht benötigt werden, kann man die gewünschten Variablen, d. h. Spalten selektieren und erhält so einen weitaus übersichtlicheren Datensatz.

  • Sortieren: Für manche Analysen kann es notwendig sein, die einzelnen Daten im Datensatz zu sortieren: Beispielsweise wenn man die Schüler*innen im Datensatz entsprechend ihrer Mathematikkompetenzen auflisten möchte, sodass am Anfang des Datensatzes der*die Schüler*in mit den geringsten und am Ende der*die Schüler*in mit den höchsten Kompetenzen steht.

  • Gruppieren: Bestimmte Teilgruppen eines Datensatzes einzeln zu analysieren oder miteinander zu vergleichen, ist möglich, indem ein Datensatz gruppiert wird. Beim PISA-Datensatz kann es beispielsweise interessant sein, separat auf Schülerinnen und Schüler zu blicken und einen Geschlechtervergleich anzustellen.

Für alle genannten Arten der Aufbereitung gibt es spezifische Funktionen in dplyr, die im Folgenden nach einem kurzen Exkurs zum dplyr-package kurz vorgestellt werden.


2.10.1 Exkurs dplyr-package

Das dplyr-package findet in der quantitativen empirischen Sozialforschung breite Anwendung. Ein wesentlicher Grund dafür sind die Möglichkeiten der sogenannten „Datenmanipulation“, die das package bietet. Datenmanipulation meint keine böswillige Manipulation, sondern u. a. die auch im folgenden beschriebene Aufbereitung von Datensätzen nach den jeweiligen Bedürfnissen der Forscher*innen, um ihre Forschungsfragen gut erforschen und beantworten zu können.

Das dplyr-package arbeitet mit dem sogenannten Pipe-Operator %>% oder |> (beide Zeichenfolgen machen dasselbe). Die Pipe (dt. Pfeife) ist eine Zeichenkombination, die ermöglicht, mehrere einzelne Befehlsschritte nacheinander auszuführen. Dabei bleiben die Schritte nachvollziehbar und der Code gut lesbar. Erklärungen zum Verständnis und der Anwendung der Pipe finden sich bei Nolte im Kapitel 6.1 und bei Sauer im Kapitel 7.3 Die Pfeife.

Für das erste Kennenlernen von R reicht häufig der Standardbefehlsumfang von R aus. Konkrete Forschungsvorhaben und -fragen erfordern jedoch nicht selten Spezifizierungen im Code, für die dplyr häufig eine Möglichkeit bietet.


2.10.2 Filtern

Der das Lehrskript begleitende Beispieldatensatz ist bereits ein aus dem internationalen PISA-Datensatz gefilterter Datenausschnitt. Er beinhaltet nur Daten von Schüler*innen, die in Deutschland zur Schule gehen. Nichtsdestotrotz kann aus dem Beispieldatensatz noch einmal eine Teilmenge an Daten herausgefiltert werden. Beispielsweise kann ein Unterdatensatz nur für Schüler*innen ohne akademische Bildungsherkunft gewünscht werden, um gezielt diese Gruppe an Schüler*innen weiter zu untersuchen.

Im package dplyr steht die Funktion filter() zur Verfügung, um einen solchen Teilmengenzuschnitt zu erreichen. Zuerst müssen wir dplyr öffnen, sofern es schon installiert wurde.Auf unsere Teilmenge der Schüler*innen ohne akademische Bildungsherkunft bezogen lautet der filter-Befehl dann:

library(dplyr)
## Warning: Paket 'dplyr' wurde unter R Version 4.5.3 erstellt
## 
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:stats':
## 
##     filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     intersect, setdiff, setequal, union
df_nichtakademisch <- pisa2022 %>% 
  filter(bild_herk == "nichtakademische Bildungsherkunft")

Durch die Zuweisung des ausgeführten filter-Befehls wird ein neuer Dataframe (d. h. ein Datensatz in Tabellenform mit Zeilen und Spalten) unter dem Namen df_nichtakademisch im environment hinzugefügt. Dieser Teilmengenzuschnitt enthält nur noch die 3.661 Schüler*innen mit nichtakademischer Bildungsherkunft (Abbildung 10).

Abbildung 10: Filtern von Datensätzen
Abbildung 10: Filtern von Datensätzen


2.10.3 Selektieren

Während filter() die einzelnen Zeilen, also im Beispieldatensatz die einzelnen Schülerinnen mit ihren jeweiligen Daten anspricht, bezieht sich select() auf die Spalten des Datensatzes. Es können also einzelne Variablen für alle befragten und geprüften Schüler*innen aus dem Datensatz selektiert werden.

Soll beispielsweise ein schlanker Dataframe erstellt werden, der nur die Schüler*innen-ID und die Mathematik-, Lese- und naturwissenschaftlichen Kompetenzen der jeweiligen Schüler*innen enthält, wird dies mit folgendem Befehl erreicht:

df_kompetenzen <- pisa2022 %>% 
  select(sus_id, mathekomp, lesekomp, naturkomp)

Im neu entstandenen Dataframe sind weiterhin alle 6.116 Schüler*innen enthalten, allerdings nur deren jeweilige ID und ihre Punkte in den drei Kompetenzbereichen (Abbildung 11).

Abbildung 11: Selektieren von Datensätzen
Abbildung 11: Selektieren von Datensätzen


2.10.4 Sortieren

Die Reihenfolge, in der die Schüler*innen im Datensatz angeordnet sind, kann mithilfe von arrange() verändert werden. Dies wird notwendig, wenn beispielsweise die Schüler*innen entsprechend ihrer Mathematikkompetenzen aufsteigend, d. h. Schüler*innen mit niedrigen Kompetenzen zuerst und Schüler*innen mit hohen Kompetenzen zuletzt, sortiert werden sollen. Der entsprechende Befehl, angewendet auf den neuen schlanken Dataframe, lautet:

df_kompetenzen <- pisa2022 %>% 
  arrange(mathekomp)

Der bisherige Datensatz df_kompetenzen wird dann in aufsteigender Reihenfolge der Mathekompetenzen sortiert (Abbildung 12).

Abbildung 12: Sortieren von Datensätzen
Abbildung 12: Sortieren von Datensätzen


Die gegenteilige Reihenfolge, d. h. eine absteigende Sortierung, wird über den Zusatz eines Minuszeichens im Befehl erreicht:

df_kompetenzen <- pisa2022 %>% 
  arrange(-(mathekomp))


2.10.5 Gruppieren

Wenn Teil- oder Subgruppen der Schüler*innen genauer betrachtet und/oder miteinander verglichen werden sollen, kann auf die Funktion group_by() zurückgegriffen werden. Die Funktion ermöglicht es, den Datensatz entsprechend einer oder mehrerer Variablen („Spalten“) in Gruppen zu teilen.

Bisher wurden die Befehle zum Filtern, Sortieren und Selektieren so angewandt, dass ein neuer zugeschnittener Teildatensatz erstellt wurde. Die Befehle können aber auch mit anderen Befehlen kombiniert werden und so nur „kurzzeitig“ für einen bestimmten Zweck auf den gesamten Datensatz angewandt werden. Wenn beispielsweise untersucht werden soll, ob die durchschnittlichen Lesekompetenzen der Schüler anders als die der Schülerinnen sind, kann der Befehl zur Ermittlung des arithmetischen Mittels (siehe Kapitel 3.2.1) getrennt für die beiden Gruppen angewendet werden. Dieses Vorhaben lässt sich mit dem group_by-Befehl durchführen. Sofern die Variable, die für die Gruppierung ausschlaggebend sein soll, keine Faktor-Variable (also eine nominalskalierte Zahl) ist, muss zunächst eine entsprechende Umwandlung vorgenommen werden.

pisa2022$geschlecht <- as.factor(pisa2022$geschlecht) #group_by kann nicht auf Character-Variablen angewendet werden, deswegen Umwandlung in Faktor-Variable

Anhand des Befehls für die nach Geschlecht gruppierte Ausgabe des arithemtischen Mittels der Lesekompetenzen kann auch die Anwendung der Pipe %>% aufzeigt werden:

knitr::kable(                    #knitr::kable dient der schönen Formatierung
  pisa2022 %>%                   #der Datensatz pisa2022 soll...
    group_by(geschlecht) %>%     #erst nach Geschlecht in Gruppen geteilt werden,.. 
    summarise(                   #um dann das arithemtische Mittel für die jeweiligen Gruppen zu berechnen.
      mean_lesekomp = mean(lesekomp)  
    )
)
geschlecht mean_lesekomp
männlich 474.4382
weiblich 492.0163

Wie im Output ersichtlich, gibt RStudio dann eine sogenannte tibble mit dem gewünschten Ergebnis aus. Es zeigt sich: Die mittleren Lesekompetenzen der Schülerinnen sind etwas höher als die der Schüler.


2.10.6 Fehlende Werte

Wer mit Daten arbeitet, ist in den allermeisten Fällen mit fehlenden Werten konfrontiert. Dass Werte bzw. Daten in Datensätzen fehlen, kann verschiedene Ursachen haben. Wenn beispielsweise befragte Personen bestimmte Fragen nicht beantworten wollen, überspringen sie diese möglicherweise oder nutzen Antwortoptionen wie „keine Antwort“. Daneben können auch Fehler beim Datenexport zu fehlenden Daten führen. Fehlende Werte sind aus vielerlei Hinsicht von großer Bedeutung bei der Datenauswertung: Sie können zu einer Verkleinerung der Stichprobe und damit der Aussagekraft der Daten führen. Sie können Teil des Forschungsinteresses werden, wenn fehlende Werte beispielsweise systematisch auftreten. Und sie können dazu führen, dass einzelne Befehle im Rahmen der Datenauswertung nicht fehlerfrei ausgeführt werden können.

Verschiedenste Bedingungen (darunter auch die Ursachen) entscheiden darüber, wie sinnvoller Weise mit fehlenden Werten umgegangen werden sollte. Forscher*innen müssen sich entscheiden zwischen: Fälle mit fehlenden Werten aus dem Datensatz löschen oder fehlende Werte ersetzen (sogenannte Imputation). Beides sollte wissenschaftlich fundiert stattfinden.

Beide Datensätze, die in diesem Lehrskript Anwendung finden, wurden bereits im Vorfeld bereinigt, d. h. die fehlenden Werte wurden imputiert oder die betreffenden Fälle herausgelöscht. Das Kapitel 9 Praxisprobleme der Datenaufbereitung im Lehrbuch von Sauer beschreibt ein mögliches Vorgehen in beiden Fällen.