Testtheorie mit R
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 martin.papenberg@hhu.de 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.
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/).↩
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.↩
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 derR
-Konsole das erste Element der Ausgabe eines Vektors gekennzeichnet (siehe Kapitel 2).↩