Die Reihe „Einführung in R“ entstand im Rahmen der Einführung in die Statistik für Psycholog*innen im Wintersemester 2021/2022.

In diesem FAQ („frequently asked questions“) finden Sie die Antworten auf zahlreiche der wichtigsten Fragen im Umgang mit FormR. Die Fragen stammen in dieser oder in ähnlicher Form von Studierenden und wurden im Wintersemester 2021/2022 gesammelt.

Ich erhalte eine unspezifische Fehlermeldung. Woran kann das liegen?

Dies kann zahlreiche Gründe haben. Prüfen Sie bitte die folgenden Gegebenheiten:

  • Leerzeichen in den Variablennamen in der Spalte name sind unzulässig. Eine Variable „college entrance credentials“ führt entsprechend zu einem Import-Fehler. Benennen Sie die Variable z. B. um zu „college_entrance_credentials“. R erlaubt ebenfalls keine Leerzeichen in Variablennamen.
  • Umlaute, Interpunktion und sonstige Sonderzeichen sind ebenfalls unzulässig. Der Variablenname „Einführung“ führt wegen des Umlautes zu einer Fehlermeldung beim Import.
  • Ihre Variablennamen bzw. Elementnamen in der Spalte name müssen eindeutig sein (im Fachjargon spricht man auch von diskret oder eineindeutig). Haben Sie bereits eine Variable „extraversion“, so können Sie kein zweites Element mit diesem Namen versehen. Normalerweise werden die Variablennamen für einzelne Items zu einem Konstrukt deshalb nach dem Schema „extra1“, „extra2“ etc. benannt.
  • Haben Sie in Ihrem Fragen gleich viele choice-Optionen vergeben, wie Sie Antwortmöglichkeiten haben. Sollten Sie bspw. eine Sieben-Punkte-Likert-Skala haben, allerdings nur choice1 bis choice6 als Spaltennamen in der Tabelle haben, führt dies zu einem Fehler beim Import. Umgekehrt ist es nicht schlimm, wenn die Spalte choice6 existiert, obwohl Sie eine Fünf-Punkt-Likert-Skala verwenden.
  • Kontrollieren Sie, ob Ihre Tabelle weitere Tabs (unten links) hat. Standardmäßig sollten sich dort nur zwei Tabs survey und choices finden (siehe auch).
  • Speichern Sie Ihre Tabelle in einem zeitgemäßen Dateiformat. Das XLS-Format ist veraltet. Ich empfehle Ihnen, die Datei als Excel-Arbeitsmappe im XLSX-Format zu speichern. Dafür gehen Sie bitte auf „Datei“ und dann auf „Speichern unter“. (Auf Windows ist das entsprechende Tastenkürzel F12.) Wählen Sie anschließend im Speichern-Dialog unter „Dateiformat“ die Option „Excel-Arbeitsmappe (.xlsx). Geben Sie Ihrer Datei einen Namen ohne Leer- und Sonderzeichen, z. B. „survey.xlsx“. Alternativ können Sie Ihre Tabelle über Google Spreadsheet erstellen und von dort über die URL in FormR importieren; dies hat zahlreiche Vorteile.
  • Für die Spalte type muss ein Leerzeichen zwischen dem Typ-Namen und etwaigen Argumenten, z. B. number 1,130,1 (bedeutet: Auswahl eine ganzzahlige Nummer im Bereich zwischen 1 und 130). Die Eingabe number1,130,1 ohne Leerzeichen kann zu einem Fehler beim Import führen.
  • Die zu importierende Datei darf in Ihrem Namen ebenfalls keine Leerzeichen haben. Ein Dateiname wie „tabelle 1.xlsx“ kann zu einem Fehler beim Import führen. Verwenden Sie anstelle von Leerzeichen Unterstriche, z. B. „tabelle_1.xlsx“.

Was ist eine choices_list und wofür nutze ich diese?

Das Argument choice_list für den Typ mc gibt den Namen eines weiteren Spreadsheets bzw. in den Haupt-Spreadsheet integrierten Tabs an, in dem Antwortmöglichkeiten gebündelt werden können. Auf diese Weise müssen nur einmal die Antwortmöglichkeiten definiert werden. Anschließend können Sie auf die gleiche Liste mit Antwortmöglichkeiten mehrfach zurückgreifen.

In dem Beispiel-Spreadsheet finden Sie unten links den entsprechenden Tab:

Tabs in der Tabelle

choices ist der Default-Name des Tabs, in dem sich die Antwortmöglichkeiten findet. Dieser wiederum sieht so aus:

Choices-Tab

Bei (1) geben Sie den Namen Ihrer Liste an (in Ihrem Fall „many_choices“ und darunter „time-periods“). Für die Spalte name unter Punkt (2) folgen die Variablen, die in den Datensatz geschrieben werden sollen. In die Spalte label unter Punkt (3) kommt die Bezeichnung, die den Proband*innen im Fragebogen angezeigt wird. Ab Zeile 9 beginnt bei Punkt (4) eine zweite Liste mit Antwortmöglichkeiten, die den list_name „time_periods“ trägt.

Im Fragebogen finden sich folglich für die Liste „many_choices“ vier kategorische Antwortmöglichkeiten mit den Namen „saving the world“, „career“, „family“ und „lots of icecream right now“, die jeweils durch die Zahlen 1, 2, 3, und 4 kodiert sind. Gibt jemand bspw. im Fragebogen „family“ an, wird in den Datensatz eine 3 geschrieben. In diesem Sinne ist diese Liste mit Antwortmöglichkeiten wie ein Variablenschlüssel. Für die Liste „time_periods“ wiederum, werden ganze Strings1 wie „quaternary“ in den Datensatz geschrieben.

Was ist der Unterschied zwischen einem Survey und einem Run?

Runs sind Zusammenstellungen von mehreren Surveys. Sie können z. B. über einen Run zwei oder mehr Surveys kombinieren, die nacheinander ablaufen und deren Daten zeilenweise (also über die Versuchspersonen hinweg) kombiniert werden. Eine weitere Einsatzmöglichkeit von Runs sind wiederholte Messungen über das gleiche Survey; dies können Sie über eine sogenannte Schleife im Run einrichten.

Sie benötigen Runs in jedem Fall, um Ihren Fragebogen – auch wenn dieser nur aus einem Survey besteht – zu veröffentlichen.

Weitere Informationen zu Runs und den Modulen eines Runs finden Sie in der FormR-Dokumentation.


Wichtig: Die Daten der Versuchspersonen werden innerhalb eines Runs kombiniert. Dies ist für wiederholte Messungen zwingend erforderlich, kann allerdings zu Problemen führen, wenn in einem Survey personenbezogene Daten eingegeben werden, wodurch die Anonymität bzw. Pseudonymität ausgehebelt würde.

<img src="/methoden/posts/formr-unlink-survey.jpg" alt=“Verknüpfung der Surveys aufheben” style=“width: !important80%; display: block; margin: 0 auto; margin-top: 1em; margin-bottom: 1em” />

Sie können die zeilenweise Verknüpfung der Fragebögen aufheben. Gehen Sie dafür in die Einstellungen des Surveys, in dem die personenbezogenen Daten erfasst werden. Unter „Settings“ finden Sie nun die Option „Survey Unlinking“. Klicken Sie diese Checkbox an, um die Verknüpfung der Daten dieses Surveys innerhalb des Runs zu unterbinden. Die Daten aus dem nicht-verknüpften Survey werden dann zufällig über die Zeilen im Datensatz verteilt.


Wie ist mit invertierten Items umzugehen?

Bei invertierten Items empfehle ich Ihnen, die Invertierung in die Anmerkungen in der Spalte explanation zu schreiben, damit Sie dies nicht bei der Auswertung übersehen. Alternativ können Sie die Variablennamen mit einem Suffix wie „invers“ versehen; dies verlängert allerdings die Variablennamen und erhöht damit die Wahrscheinlichkeit, sich bei der Eingabe dieser zu verschreiben.

Sie werden sicher ahnen, dass es dafür keine einfache Option in der Web-Oberfläche von FormR gibt. Allerdings verfügen Sie mit Ihren R-Kenntnissen über die nötigen Grundlagen, um die Idee dahinter zu verstehen.

Das Prinzip ist einfach: Wir können in Spreadsheet, aus dem das Survey generiert wird, eine logische Bedingung angeben. Mit dieser logischen Bedingung kann bestimmt werden, wann eine Checkbox, ein Button, ein Textfeld u. a. (nicht) angezeigt werden. Dies ermöglicht bspw. die Erstellung dynamischer Fragebögen.

Es gibt nun drei Möglichkeiten:

  1. Der „Weiter“-Button auf der ersten Seite des Fragebogens soll nur angezeigt werden, wenn die Variable „consent“ (der Name des Consent-Buttons) auf TRUE steht, also die Checkbox angeklickt ist. Dies geht über die Spalte showif in der Zeile für den „Weiter“-Button (Typ: submit). Dort kann eine – wie von R gewohnte – Regel definiert werden, z. B. consent == TRUE. Nachteil: Leider kann der Fragebogen in manchen Browsern auch ohne den explizit vorgesehenen „Weiter“-Button fortgeführt werden. Sie müssen also trotzdem im Datensatz auf die Variable „consent“ achten; wenn diese auf FALSE steht bzw. den Wert 0 anzeigt, müssen Sie die Daten löschen. Diese Implementierung erfordert somit gute Kenntnisse der Datenaufbereitung in R.2
  2. Der sichere, aber etwas umständliche Weg besteht darin, für alle im Spreadsheet folgenden Zeilen bei showif folgende Bedingung anzugeben: consent == TRUE. Dadurch wird keines der weiteren Fragebogen-Elemente angezeigt, wenn dir Consent-Box nicht angeklickt wurde – also auf TRUE steht. Idealerweise fügen Sie ans Ende eine weitere Zeile mit einem Element des Typs note, um darauf hinzuweisen, dass der Fragebogen ohne Zustimmung nicht durchgeführt werden kann. Für diese Zeile gilt logischerweise showif == FALSE.
  3. Über die Spalte optional kann direkt definiert werden, wenn ein das Bearbeiten eines Elementes für alle nachfolgenden Elemente erforderlich ist. Sie können folglich auch einfach für die Variable „consent“ bei optional ein Ausrufezeichen (!) einsetzen. Das Ausrufezeichen gibt die Notwendigkeit an. Umgekehrt kann mit einem Asterisk („Sternchen“) in der Spalte optional die Freiwilligkeit eines Elements verdeutlicht werden; das Item wird dann im Fragebogen als „optional“ markiert.

Nach der Implementierung einer dieser Lösungen empfehle ich Ihnen dringend, deren Funktionstüchtigkeit in einem Test-Run zu überprüfen. Was passiert, wenn die Consent-Checkbox nicht angeklickt wurde? Kann der Fragebogen dennoch fortgesetzt werden? Damit dabei bei einer solchen Überprüfung des Fragebogens keine Daten gespeichert werden, nutzen Sie die „Test Survey“- bzw. „Test Run“-Funktion:

Fragebogen testen

Wie lade ich meine Daten herunter und importiere sie in R?

Lange Zeit konnten die Rohdaten aus FormR nur umständlich als JSON-Dateien heruntergeladen werden. Glücklicherweise gibt es mittlerweile auch eine einfache Möglichkeit, die Rohdaten zu Ihrem Datensatz als CSV-Datei herunterzuladen.

Dafür gehen Sie in die Einstellungen zu Ihrem Survey und klicken dort unter dem Seitenreiter „Testing & Management“ auf „Export Results“. In dem erscheinenden Dropdown-Menü wählen Sie „Download CSV“ aus.

Vergegenwärtigen Sie sich, dass es unterschiedliche Typen von Datensätzen gibt. Diese wiederum werden in unterschiedlichen Formaten gespeichert. Und innerhalb dieser Formate variiert die Formatierung des Datensatzes (mehr oder weniger). Meistens handelt es sich um so genannte CSV-Dateien („comma separated values“). Der Name sagt Ihnen, dass es sich um reinen Text handelt, wobei die Werte (in einer Tabelle würde man von Zellen sprechen) durch Kommata getrennt sind.3 Sie werden gleich sehen, dass Letzteres nicht immer der Fall ist …

Hier ein Beispiel für einen CSV-formatierten Datensatz – geöffnet in einem Texteditor:

Beispiel einer CSV-Datei

CSV-Dateien können Sie mit der Funktion read.csv einlesen. Diese Funktion müssen Sie meist mit Argumenten spezifizieren. Jedes Argument hat eine Standardeinstellung (Default). Wenn Sie das Argument nicht näher spezifizieren, springt R auf den Default zurück.

Das erste Argument ist der Name der Datei, die Sie einlesen möchten. Dieser wird in Anführungszeichen gesetzt und mit Dateiendung (.csv) angegeben. In meinem Fall heißt die Datei fb21.csv. Mit header = TRUE geben Sie an, dass Ihr Datensatz in der ersten Zeile eine Kopfzeile mit den Variablennamen hat. Ist dies nicht der Fall, so gilt header = FALSE.


Tipp: Sie können TRUE und FALSE durch T und F abkürzen. Anstelle von header = TRUE schreiben Sie dann header = T. Wichtig ist allerdings, dass T und F großgeschrieben werden.


Das Argument sep spezifiziert den Separator, also das Zeichen, welches die Werte voneinander trennt. Meist sind dies Kommata („comma separated values“); daraus resultiert sep = ",". Gelegentlich werden allerdings auch Leerzeichen oder Semikola verwendet. Um herauszufinden, welches Trennzeichen verwendet wird, öffnen Sie die CSV-Datei in einem Texteditor und schauen nach.

Im letzen Schritt legen Sie den Namen Ihres Objekts in R fest, den Sie mit dem eingelesenen Datensatz beschreiben. Verwenden Sie hierfür den Zuweisungspfeil <- vor der Einlesefunktion read.csv.

data <- read.csv("fb21.csv", header = TRUE, sep = ",")

Sie werden nun sehen, dass Ihr Datensatz etwas unaufgeräumt erscheint und zahlreiche leere Zeilen beinhaltet. Ihre Aufgabe ist es im nächsten Schritt, den Datensatz zur Auswertung aufzubereiten.

Mein Datensatz sieht nicht aus, wie ich es erwartet habe. Was tun?

Dieses Problem hat meist damit zu tun, dass Ihr Datensatz im Long-Format (teilweise auch narrow genannt) vorliegt. Im Long-Format sind Ihre Variablen alle in einer Spalte gesammelt und jede Versuchsperson nimmt so viele Zeilen ein, wie der Datensatz über Variablen verfügt.

Long-Format:

VP Variable Answer
VP1 Extra1 3
VP1 Extra2 4
VP1 Extra3 3
VP1 Vertr1 5
VP1 Vertr2 4

Im Wide-Format hingegen wird jede Versuchsperson durch eine Zeile repräsentiert und die Variablen sind spaltenweise angeordnet. Dieses Format ist üblicher und vor allem übersichtlicher. Dennoch wird hin und wieder das Long-Format benötigt (z. B. für die ezANOVA()-Funktion, mit der Sie sich im Rahmen von Statistik II vertraut machen).

Wide-Format:

VP Extra1 Extra2 Extra3 Vertr1 Vertr2
VP1 3 4 3 5 4

Damit Sie wie gewohnt mit dem Datensatz umgehen können, müssen Sie ihn ins Wide-Format transponieren. Zur Veranschaulichung nehmen wir an, es liegt eine CSV-Datei, die narrow formatiert ist, vor. Im ersten Arbeitsschritt laden wir den Datensatz ins Environment:

longform <- read.csv("longform_data.csv")

Mit head(longform) und str(longform) können Sie sich einen Überblick über die Struktur verschaffen. Wir entfernen nun alle Spalten aus dem Datensatz, die keine auswertungsrelevanten Daten beinhalten. In einfachsten Falle benötigen wir nur die Item-/Variablen-Namen („item_name“), die Antworten/Werte („answer“) und eine Versuchspersonen-ID („unit-session_id“).

Mit der Funktion subset() lassen sich die Spalten selektieren, die sie in einem neuen Datensatz speichern wollen.

longform_subset <- subset(longform, select = c(answer, item_name, unit_session_id))

Erst jetzt wandeln wir das Long-Format ins Wide-Format um. Dafür verwenden wir das Paket reshape2 und die darin enthaltene Funktion dcast(). Sollte das Paket bei Ihnen noch nicht installiert sein, müssen Sie dies zunächst nachholen.

library(reshape2)

wideform <- dcast(longform_subset, unit_session_id ~ item_name, value.var = "answer")

Wie kann Text innerhalb des Fragebogens formatiert werden?

Sowohl Ihren Instruktionstext auf Seite 1 als auch der Text im Fragebogen können formatiert werden. Durch die Formatierung wird Ihr Text lesbarer und die wichtigsten Informationen werden hervorgehoben.

Ich würde Ihnen dazu raten, mit den üblichen Formatierungsmöglichkeiten (fett / kursiv) zu arbeiten. Müssen Sie Befehle für die Formatierung verwenden. Glücklicherweise sind diese sehr intuitiv.

So schreiben Sie Ihren Text fett, indem Sie den Befehl <strong> um den Text stellen. Das Ende des fett zu setzenden Textes geben Sie mit </strong> an. Ihr Text sieht also so aus:

<strong>HIER KOMMT FETTER TEXT</strong>

Kursivschrift erreichen Sie mit dem Befehl <em> (engl. emphasis = Betonung). Gehen Sie analog vor und beenden die Kursivschrift mit </em>. Hier ein Beispiel:

<em>HIER KOMMT KURSIVER TEXT</em>

Diese beiden Befehle haben jedoch auch eine semantische Bedeutung: Sie heben die Worte hervor bzw. machen Sie „stärker“. Entsprechend sollten die Befehle <strong> und <em> sparsam verwendet werden.

Doch was, wenn Sie wirklich nur formatieren wollen – ohne jede semantische Bedeutung im Code. Dafür können sogenannte präsentationsbezogene Elemente verwendet werden. Diese wurden mit HTML5 eingeführt und können mittlerweile von allen gängigen Browsern interpretiert werden. <b> macht den Text fett (engl. bold), <i> kursiv (engl. italic) und <u> unterstrichen (engl. underlined).

In Mozzilas Entwickler*innen-Guide ist die Funktionsweise der Formatierungsoptionen wie folgt beschrieben:

<i> wird benutzt, um die traditionelle Rolle von kursivem Text anzuzeigen: Fremdwörter, Taxonomische Begriffe, Fachwörter, Gedanken[.]

<b> wird benutzt, um die traditionelle Rolle von fettem Text anzuzeigen: Stichwörter, Produktnamen, wichtige Sätze[.]

<u> wird benutzt, um die traditionelle Rolle von unterstrichenem Text anzuzeigen: richtige Namen, Rechtschreibfehler[.]


Tipp: Gehen Sie sparsam mit <u> um. Denn üblicherweise sind Hyperlinks – also verweise auf andere Websites – durch Unterstreichung hervorgehoben.


Ich habe ein Bild in meinen Header eingefügt. Wie bekomme ich dieses kleiner?

Wenn Sie im „Run“ unter „Settings“ im Tab „CSS“ folgenden Code einfügen, wird das Logo klein in die rechte Ecke gelegt:

@media {
		img {float: right;
	margin: 0px 0px 10px 10px;
	height: 7%;
	max-height: 100px
		}
}

Mit CSS können Sie das Aussehen Ihrer HTML-Elemente anpassen. Sie können gerne an den Parametern im Code ein wenig rumspielen.

Appendix I: Invertierung

Invertierte Items haben eine andere Polung als nicht-invertierte Items. Sie können Sie sich dies dadurch verbildlichen, dass die Skala wie ein Zahlenstreifen an der y-Achse gespiegelt wird:

Invertierung einer Skala

Invertierte Items müssen in der Auswertung wieder in die ursprüngliche Polung revertiert werden. Dies kann mittels linearer Transformation geschehen:

$$-1 \times (x_m - x_{max} - 1)$$


  1. Als Strings werden in der Informatik Buchstabenabfolgen bezeichnet. So sind bspw. a, b und c isoliert betrachtet Character. Zusammengeführt als abc ergeben sie allerdings einen String. Etwas missverständlich ist, dass in R Strings häufig den Datentyp character annehmen. R unterscheidet nicht zwischen einem Character und einem String. ↩︎

  2. Sie können den Datensatz in R danach filtern, dass nur die Spalten ausgewertet werden, bei denen ein Consent erfolgt ist, also consent == TRUE. Auch hierfür gibt es mehrere Möglichkeiten.


    Um die Umsetzungen zu testen, habe ich einen Test-Datensatz erstellt:

    data <- data.frame(var1 = c(1.23, 1.56, 1.65, 2.2, 1.34, 1.55),
       consent = c(T, F, T, F, F, T))
    	
    

    Möglichkeit 1:

    subset(data, consent == TRUE)
    

    Möglichkeit 2:

    library(dplyr)
    data %>% filter(consent == TRUE)
    

    Möglichkeit 3:

    data[data$consent == TRUE, ]
    

    Anstelle von TRUE kann auch eine booleshe 1 verwendet werden – sowohl im Datensatz als auch in den Filter-Implementierungen. 1 wird stets als TRUE interpretiert und umgekehrt. ↩︎

  3. Das CSV-Format ist älter als die meisten Computer. Es wurde zum ersten Mal in den frühen 70er-Jahren verwendet – damals noch auf Lochkarten.

    Lochkarte im CSV-Format

    Lochkarte im CSV-Format (Quelle: Wikimedia)

    Das Format konnte sich insbesondere wegen seiner hohen Kompatibilität und Stabilität (auch bei großen Datensätzen) durchsetzen. ↩︎