1 Einstieg

Das Skript „Testtheorie mit R“ bietet einen Einstieg in die statistische Programmiersprache R. Es wurde ursprünglich als Begleitmaterial für eine ein-semestrige Lehrveranstaltung im Master-Studiengang Psychologie an der Heinrich-Heine-Universität Düsseldorf entworfen. Im Seminar wird kein R-Vorwissen vorausgesetzt. Ich habe das Skript in der Hoffnung öffentlich gemacht, dass es auch für andere R-Einsteiger nützlich sein kann.

R kann – unter anderem – als eine Alternative zur kommerziellen Statistik-Software IBM-SPSS verwendet werden. Anders als SPSS ist R frei, d.h. wir können es gratis aus dem Internet runterladen, auf beliebig vielen Computern installieren, und unsere Analysen mit jeder anderen Person teilen, da niemand eine Lizenz zur Nutzung benötigt. Da R mithilfe von Paketen beliebig erweitert werden kann, stehen neue statistische Verfahren häufig schnell zur Verfügung (etwa Bayesianische Statistik). Die Nutzung von R ist in den letzten Jahren stark angestiegen . Auch in der psychologischen Forschung wird R immer mehr zum Standard. Inzwischen ist es normal, dass Datensätze zusammen mit R-Code zur Reproduzierbarkeit von Forschungsergebnissen auf offenen Internetportalen wie dem Open Science Framework zur Verfügung gestellt werden. Etwa hier findet sich öffentlicher R-Code aus einem meiner eigenen Forschungsprojekte. Mithilfe von R Markdown können sogar Forschungsberichte erstellt werden, bei denen die Datenauswertung per R-Code direkt im Text integriert wird. Das geht sogar im APA-Format. Dieses Skript selbst wurde ebenfalls mit R und R Markdown erstellt. Die Quelldateien, die zur Erstellung des Skripts verwendet wurden, finden sich unter https://github.com/m-Py/Testtheorie-R.

Wir lernen die Nutzung von R anhand von Beispielen der psychologischen Diagnostik beziehungsweise der Testtheorie kennen. Dabei werden auch echte Datensätze verwendet, beispielsweise ein Datensatz zum Narcissistic Personality Inventory, der online frei über das „Open Source Psychometrics Project” (https://openpsychometrics.org/) verfügbar ist.

1.1 Über dieses Skript

Dieses Skript wurde als Begleitmaterial für eine Lehrveranstaltung konzipiert. Die Veranstaltung selbst hat einen starken praktischen Anteil; in jeder Woche werden Übungsaufgaben in R bearbeitet. Das Skript bietet den theoretischen Unterbau zu den Übungen. Die Übungen des Seminars und die zur Bearbeitung nötigen Daten – wie auch der jeweils aktuelle Stand dieses Skripts – können unter https://osf.io/y4a6k/ abgerufen werden. Unter https://m-py.github.io/TesttheorieR/ findet sich eine online lesbare Version des Skripts. Das Skript wird stetig aktualisiert; diese Version wurde am 08. März 2023 erstellt.

Wer R lernen möchte, muss sich klar machen, dass die reine Aufarbeitung einer oder mehrerer schriftlicher Lektüren zu diesem Zweck nicht ausreicht. Die praktische Anwendung – das Ausprobieren und „Rumspielen“ – sollte einen mindestens genau so großen Anteil haben. Erst durch die Fehler, die man beim praktischen Arbeiten macht – und die macht man immer –, lassen sich die eigenen R-Fertigkeiten weiterentwickeln.

Insgesamt gilt: Das Skript und die Übungen stellen nur eine kleine Auswahl dessen vor, was R bietet. Notwendigerweise werden Inhalte ausgelassen. Bei der Darstellung wird vor allem Wert auf die inhaltliche Sinnhaftigkeit und Verständlichkeit gelegt; dafür kann es vorkommen, dass – wenn angemessen – Kompromisse bei der technischen Genauigkeit eingegangen werden. Kapitel 2 enthält beispielsweise eine Beschreibung verschiedener Datentypen in R (Zahlen, Text etc.). Diese Liste deckt zwar die für uns wichtigsten Datentypen ab, ist aber nicht vollständig. Aus inhaltlichen Gründen folgt sie außerdem nicht der R-internen „technischen“ Kategorisierung. Auch hat R für so gut wie jede allgemeine Regel mindestens eine Ausnahme. Auf solche Spezialfälle werde ich bei der Beschreibung allgemeiner Grundsätze der Programmiersprache R nicht immer Rücksicht nehmen. Das Skript ist so ausgelegt, dass ein Grundstein an Kenntnissen gelegt wird, jedoch erfordert die Meisterung von R noch weitere eigenständige Einarbeitung.

1.1.1 Feedback und Fehlermeldungen

Für Feedback und eine Rückmeldung bei der Entdeckung von Fehlern im Skript (auch und insbesondere bei der Entdeckung einfacher Rechtschreibfehler, doppelter oder fehlender Wörter, fehlender Kommas etc.) bin ich sehr dankbar! Meldungen können mir an gesendet werden.

1.1.2 Danksagung

Ich danke Juli Tkotz für ihre wertvollen Beiträge und ihr nützliches Feedback zum Skript. Hanna Siegers, Marlene Wettstein, Frank Calio, Ingo Weigel, Katharina Sophie Apenbrink, Jutta Peterburs, Sara Vera Brockhaus, Sophie Schalberger, Marlene Hüsken, Dilara Cagdas, Katharina Rubröder, Freya Heiber, Dilara Cagdas, Franziska Schulte und Lotte Wagner-Douglas danke ich für Fehlermeldungen.

Zur Erstellung des Skripts wurden R (R Core Team, 2018) und die R-Pakete bookdown (Xie, 2016), knitr (Xie, 2015), rmarkdown (Allaire u. a., 2017) genutzt.

1.2 Erste Schritte mit R

Im Seminar nutzen wir die „integrierte Entwicklungsumgebung“ (engl: integrated development environment; IDE) RStudio, um mit R zu arbeiten. Zum Nachvollziehen des Skripts und der Übungen solltet ihr deswegen RStudio auf eurem eigenen Rechner/Laptop installieren.1 Das geht über diesen Link:

https://www.rstudio.com/products/rstudio/download/#download

Vermutlich wollt ihr eine Installationsdatei für Windows herunterladen, es gibt aber auch Optionen für Linux und Mac. Dafür schaut ihr unter „Installers for Supported Platforms“ beispielsweise unter „RStudio 1.1.442 - Windows Vista/7/8/10“.

Wichtig: RStudio ist nur die R-Umgebung, die wir nutzen, aber nicht die Programmiersprache R selbst. R muss noch einmal unter https://cran.r-project.org/ gesondert heruntergeladen werden.

Hier könnt ihr beispielsweise über „Download R for Windows“ \(\to\) „install R for the first time” gehen.

1.2.1 Die R-Konsole

Wenn wir R und RStudio installiert haben, können wir unsere ersten Schritte mit R nehmen. Dafür geben wir R-Code in die sogenannte Konsole ein. Im Normalfall finden wir in RStudio die Konsole in der Anzeige auf der linken Seite (je nachdem, wie ihr RStudio geöffnet habt, befindet sich die Konsole auch links unten). Wir erkennen die Konsole daran, dass die Zeile, in die wir unsere R-Befehle eintragen, mit einem > beginnt. Diese spitze Klammer fordert uns zum Eingeben von R-Code auf. Um unseren ersten R-Befehl auszuführen, schreiben wir Folgendes in die Konsole und drücken Enter:

Wenn folgende Ausgabe erscheint, hat die Installation funktioniert:

[1] "Hallo Welt!"

Wir können die Arbeit mit R beziehungsweise der R-Konsole als Kommunikation verstehen: Wir teilen R etwas mit, und R gibt uns dazu passend etwas zurück – wenn unsere Anfrage ein syntaktisch korrekter R-Befehl war. Andernfalls gibt R eine Fehlermeldung aus. Zum Beispiel können wir die R-Konsole als Taschenrechner benutzen:

[1] 4
[1] -14
[1] 6
[1] 9
[1] 25
[1] 2
[1] 4
[1] 5.5

1.2.2 Der Skript-Editor

Zumeist werden wir R-Code nicht nur in der Konsole schreiben und ausführen. Wenn wir einen Befehl in der Konsole geschrieben und mit Enter ausgeführt haben, ist er ja quasi verschwunden.2 Um Analysen übersichtlich, nachvollziehbar und reproduzierbar zu gestalten, speichern wir unseren Code in sogenannten Quellcode-Dateien ab. Dafür gibt es in RStudio (und auch in anderen R-Umgebungen) einen Texteditor. Wir können eine neue Quellcode-Datei unter „Datei \(\to\) Neue Datei \(\to\) R Skript“ öffnen. Darin können wir unseren R-Code schreiben und permanent auf unserem Computer abspeichern (und ggf. mit anderen Personen teilen). Textdateien, die R-Code enthalten, speichern wir mit der Dateiendung „.r“ oder „.R“ ab.

Das Praktische: Wenn wir Code im Editor schreiben, können wir ihn auch direkt von dort ausführen; wir müssen ihn nicht noch einmal in die Konsole „copy-pasten“. Das funktioniert so: Wenn sich mein Cursor in einer Zeile befindet und ich STRG-Enter drücke, wird der Code in dieser Zeile ausgeführt. Wenn ich einen Code-Abschnitt markiere, kann ich ebenso mit STRG-Enter genau diesen Abschnitt ausführen. Der Code wird in diesen Fällen an die Konsole gesendet, die dann die Ausführung des Codes für uns übernimmt.

1.2.3 Kommentare

Wenn ein #-Symbol in die Konsole oder den Skript-Editor geschrieben wird, wird der Rest dieser Zeile nicht mehr interpretiert, das heißt nicht als R-Code ausgeführt. Beispiel:

Man nutzt #, um Code zu „kommentieren”, das heißt um zu erklären und zu dokumentieren, was der geschriebene Code macht. Diese Kommentare fügt man in den Quelldateien ein, in denen man die eigenen Analysen abspeichert. Dieses Skript enthält viel R-Code,3 den ich stets kommentiere. (Ich habe die Angewohnheit, ein doppeltes ## am Anfang einer Zeile zu benutzen, aber das hat keinerlei Bedeutung.) Gewöhnt euch ebenfalls an, immer euren eigenen Code zu kommentieren. Das gilt sowohl für „richtige“ Projekte als auch für Übungsaufgaben. Das Kommentieren von Code ist vor allem nützlich, um anderen Personen euren Code zugänglich und verständlich zu machen. Im häufigsten Fall seid ihr selbst in zwei Wochen diese „andere” Person.

1.3 Ausblick

In den ersten zwei Kapiteln beschäftigen wir uns damit, wie R Daten darstellt. Dabei betrachten wir zunächst die grundlegendste Datenstruktur, den Vektor (Kapitel 2). Danach lernen wir data.frames kennen (Kapitel 3) – also Datentabellen, wie wir sie auch aus Excel oder SPSS kennen. In Kapitel 4 werden wir psychometrische Datenauswertungen durchführen und dabei das Wissen anwenden, das wir zuvor erworben haben. In Kapitel 5 lernen wir, wie wir mit Rohdaten aus Fragebögen umgehen, also fehlende Werte auszuschließen und Antworten umzukodieren. In den Kapiteln 6 und 7 lernen wir mit Funktionen und Schleifen wichtige Programmiersprachenelemente kennen und werden sehen, wie wir damit unsere Arbeit automatisieren können.


  1. Falls ihr eine andere Umgebung benutzt, ist das natürlich auch kein Problem. Alternativen sind beispielsweise rkward (https://rkward.kde.org/) oder emacs ESS (https://ess.r-project.org/).

  2. Praktisch: Wenn ich mich in der Konsole befinde, kann ich mit den Pfeil-Tasten (vor allem wichtig: Pfeil-nach-oben) auf meine letzten Befehle wieder zugreifen. Probiert es aus.

  3. Codeblöcke im Skript bestehen immer aus dem eigentlichen Code (dieser ist leicht grau hinterlegt) und der Ausgabe, die bei Eingabe des Codes auch so in der R-Konsole erscheinen würde. Den Code könnt ihr auch selbst per Copy & Paste nachvollziehen (was ich auch empfehle). Die Ausgabe des Codes erkennt ihr meistens daran, dass sie mit [1] startet; so wird in der R-Konsole das erste Element der Ausgabe eines Vektors gekennzeichnet (siehe Kapitel 2).