Datenbereinigung von Befragungsdaten

Die hier erklärte Datenbereinigung bezieht sich auf Befragungsdaten. Textdaten (z. B. Zeitungsartikel) oder manuell codierte Daten unterliegen anderen Kriterien und werden hier nicht behandelt.

Was soll bereinigt werden: bedeutungslose Daten

Disclaimer: Bei der Datenbereinigung gibt es keinen Goldstandard und somit auch kein direktes “Richtig” und “Falsch”. Es gibt Bereinigungsmethoden die gängige Praxis sind und hier vorgestellt werden – das heißt jedoch nicht, dass jeder einzelne Schritt immer zielführend für die eigene Datenanalyse sein muss. Das soll Sie jedoch nicht abschrecken, sondern nur darauf aufmerksam machen, dass es hier viele Wege gibt und Dozierende zum Teil auch zu unterschiedlichen Bereinigungsschritten raten können. Wie Leiner (2019) es ausdrückt:

„The academic community is just beginning to establish standards on how to identify and handle potentially problematic records (Osborne, 2013). In spite of the significant threats that meaningless records pose to scholarly research, their identification in web-based surveys has mostly been subject to practitioners (Bhaskaran & LeClaire, 2010; Rogers & Richarme, 2009).“

Leiner (2019): Too Fast, too Straight, too Weird: Non-Reactive Indicators for Meaningless Data in Internet Surveys

In der Datenbereinigung geht es darum „bedeutungslosen Daten“ („meaningsless data“) im Datensatz a) im Vorhinein vorzubeugen und b) im Nachhinein zu identifizieren und zu entfernen. Bedeutungslose Daten müssen von „Pseudo-Meinungen“ und „Nicht-Einstellungen“ unterschieden werden. Diese entstehen, wenn Befragte aufgrund mangelnden Wissens oder Verständnisses keine gültige Antwort geben können. Solche Antworten sind normalerweise nicht bedeutungslos, sondern spiegeln oft allgemeinere Einstellungen und Unsicherheiten wider Leiner (2019). „Pseudo-Meinungen“ und „Nicht-Einstellungen“ wollen wir deswegen in der Regel nicht aus den Daten entfernen, bedeutungslose Daten dagegen schon.

Die untenstehende Abbildung Leiner (2019, S. 232) zeigt, wie bedeutungslose Daten aussehen können, nämlich konkret, wenn Sie sich die Fälle 1, 2, 5 und 6 einmal im Vergleich zu den Fällen 3 und 4 ansehen:

Warum gibt es überhaupt bedeutungslose Daten?

Insbesondere wenn Befragte inzentiviert werden (beispielsweise für das Ausfüllen der Befragung bezahlt werden) könnten sie dazu motiviert sein, bedeutungslose Daten abzugeben. Das kann verschiedene Gründe haben, die oft in zwei Hauptkategorien unterteilt werden „careless responding“ und „faking“:

  1. Unwilligkeit zur gültigen Antwort (Teil von faking): Manchmal sind Befragte nicht bereit, eine gültige Antwort zu geben, beispielsweise wenn sie die Inzentivierung haben möchten, aber den Macher:innen der Umfrage ihre persönlichen Daten und Meinungen eigentlich nicht anvertrauen möchten.
  2. Unaufmerksames Antworten (Teil von careless responding): Einige Befragte könnten sich mit einer schnellen und einfachen Antwort zufriedengeben („satisficing“) oder antworten unaufmerksam oder nachlässig. Dann geben sie Antworten, die nicht sorgfältig durchdacht sind.
  3. Antwortmuster (Teil von faking und careless responding): Manche Antworten hängen überhaupt mit den gestellten Fragen zusammen. Beispielsweise könnten Befragte immer die erste Antwortoption wählen, unabhängig von der Frage. Solche Muster entstehen oft aus einem Mangel an Anstrengung oder Interesse, weil die Befragten „schnell mit der Befragung fertig werden“ wollen.
  4. Fehlende Passgenauigkeit der Fragen (unfreiwilliges careless responding): Wenn die Fragen im Fragebogen schlecht formuliert oder nicht passend für die Zielgruppe sind, können die Antworten bedeutungslos sein, da die Befragten die Fragen möglicherweise nicht richtig verstehen oder interpretieren. Insbesondere wenn dann keine Ausweichoption wie „weiß nicht / kann ich nicht sagen“ zur Verfügung steht, können sie in Antwortmuster verfallen.

Bedeutungslosen Daten vorbeugen

Wenn Sie von vornherein erwarten, dass sinnlose Daten ein ernstes Problem für Ihre Befragung darstellen könnten, können Sie zusätzliche Fragen in den Fragebogen aufnehmen (sog. Aufmerksamkeitschecks), um solche Daten zu identifizieren und die Befragung für diese Befragten vorzeitig zu beenden. Access-Panel-Anbieter (Unternehmen, die Zugang zu einer vorab rekrutierten Gruppe von Personen (einem sogenannten „Panel“) bieten, die bereit sind, an Umfragen und Marktforschungsstudien teilzunehmen) verlangen für solche wegen mangelnder Qualität vorzeitig gefilterten Befragte in der Regel auch kein oder zumindest weniger Geld, da die Inzentivierung zur Befragungsteilnahme für diese Befragten nicht oder nur in Teilen ausgeschüttet wird.

Mögliche Aufmerksamkeitschecks können wie folgt aussehen:

  1. Kontrollfragen, die klare Anweisungen geben, wie „Kreuzen Sie die erste Antwortmöglichkeit an, um zu zeigen, dass Sie aufmerksam lesen.“
  2. Selbsteinschätzungsfragen, die die Befragten direkt fragen, wie ernsthaft sie die Umfrage ausgefüllt haben, z.B. „Hand aufs Herz und frei heraus: Haben Sie die Fragen ehrlich und sorgfältig beantwortet?“
  3. Zufriedenheitsfragen mit der Umfrage, die indirekt auf die Qualität der Antworten hinweisen können: „Wie zufrieden sind Sie mit der Länge und dem Inhalt dieser Umfrage?“ oder „Haben Sie das Gefühl, dass die Fragen in dieser Umfrage klar und verständlich waren?“
  4. Konsistenzfragen, die ähnliche Fragen an verschiedenen Stellen der Umfrage wiederholen, um die Konsistenz der Antworten zu überprüfen.

Bedeutungslose Daten bereinigen

Bevor Sie mit der Datenbereinigung und der Identifikation von bedeutungslosen Daten starten, müssen Sie sich zunächst einen Überblick über Ihre Daten verschaffen. Je nach Größe des Datensatzes ist das mehr oder weniger machbar – ein paar hundert Beobachtungen sollten jedoch in jedem Fall grob durchgescrollt werden und auch ein Blick ans Ende des Datensatzes lohnt sich.  

Fragen die Sie hier beantworten sollten, um auf bedeutungslose Daten aufmerksam zu werden, sind beispielsweise folgende:

  • Gibt es Abbrecher?
  • Das meint Teilnehmende, die den Fragebogen begonnen haben, jedoch nicht bis zum Ende ausgefüllt haben

  • Gibt es Durchklicker?
  • Diese sind erkennbar an vielen fehlenden Werten, überdurchschnittlich schnellem Ausfüllen, geringer Verweildauer pro Fragebogenseite oder Mustern im Antwortverhalten

  • Gibt es unplausible Angaben?
  • Vor allem bei offenen Antwortfeldern kommt es gerne mal zu Tippfehlern oder absichtlich unseriösen Antworten

  • Gibt es Fehler bei der Dateneingabe?
  • Wenn beispielsweise Werte nicht vergeben wurden

Exkurs: Weitere Fragen die Sie vor dem Start der Bereinigung/Analyse beantworten sollten:

  • Sind alle relevanten Variablen im Datensatz?
  • Können überflüssige Variablen zur besseren Übersicht herausselektiert werden?
  • Wurden im vorhinein Bedingungen für die Stichprobe gestellt? (z. B. alle Teilnehmenden müssen volljährig sein)
  • Haben alle Variablen den richtigen Datentyp? (z. B. Zahlen sind als integers und nicht versehentlich als characters hinterlegt, siehe Datentypen in R)

Wie werden Datensätze in R bereinigt?

Überblick über die Vollständigkeit des Datensatzes verschaffen

Fehlende Werte werden in RStudio mit NA gekennzeichnet. Ein hoher Anteil an fehlenden Werten kann auf Probleme mit der Datenqualität oder mit der Datenerhebung hinweisen. Zum Beispiel könnten Befragte die Befragung oft vorzeitig abgebrochen haben (sog. Abbrecher), Fragen in einer Umfrage oft übersprungen worden sein (sog. Durchklicker), oder technische Fehler könnten während der Datenerfassung aufgetreten sein.

Mit Hilfe der is.na() Funktion können diese leeren Zellen gefunden werden. Um beispielsweise herauszufinden, wie viele fehlende Werte sich im Datensatz befinden, können die Funktionen sum() und is.na() kombiniert werden:

Befehl:

library(tidyverse)
daten %>% is.na()
%>% sum()

Dieser Befehl gibt Ihnen zunächst die absolute Anzahl aller NAs in Ihrem Datensatz. Da dieser Wert aber nur sinnvoll in Relation zu der Größe Ihres Datensatzes (Anzahl der Fälle / Zeilen sowie Anzahl der Variablen / Spalten) interpretiert werden kann, lohnt es sich, den relativen Anteil der NAs in Ihrem Datensatz zu berechnen:

Befehl:

daten %>% 
is.na() %>% 
sum() / (nrow(daten) * ncol(daten))

Je nachdem wie groß die Zahl der fehlenden Werte ist, kann es sinnvoll sein ganze Fälle (Zeilen) auszuschließen, die besonders viele fehlende Werte haben (z. B. bei Abbrechern) oder Fälle die nur einen oder wenige fehlende Werte haben drin zu lassen.

Abbrecher identifizieren und entfernen

Falls Ihre Daten mittels SoSci Survey erhoben wurden, steht Ihnen die Variable MAXPAGE zur Verfügung. Diese Variable ist besonders nützlich, um zu verstehen, wie weit die Teilnehmenden im Fragebogen fortgeschritten sind, bevor sie die Umfrage beendet haben. Konkret zeigt MAXPAGE die Nummer der letzten Seite an, die von den jeweiligen Teilnehmenden beantwortet wurde. Dies kann Aufschluss darüber geben, ob die meisten Teilnehmenden den Fragebogen vollständig ausgefüllt haben oder an einem bestimmten Punkt abgebrochen haben.

Im Rahmen der Datenbereinigung könnten Sie daran interessiert sein, Daten von Teilnehmenden zu filtern, die sehr früh die Umfrage abgebrochen haben. Der folgende Befehl bewirkt, dass nur Fälle behalten werden, deren MAXPAGE-Wert über dem 20. Perzentil liegt. Mit anderen Worten, Sie schließen die unteren 20% der Teilnehmenden aus, die die geringste Anzahl von Seiten im Fragebogen erreicht haben. Der Filter stellt sicher, dass Sie nur Daten von Teilnehmenden analysieren, die einen substantiellen Teil des Fragebogens bearbeitet haben, also keine Abbrecher sind.

Befehl:

daten_bereinigt <- daten %>%
    filter(MAXPAGE > quantile(MAXPAGE, 0.2)) # Behält nur Fälle über dem 20. Perzentil

Die Wahl Ihrer Methodik zur Identifikation von Abbrechern hängt stark von den spezifischen Eigenheiten Ihrer Daten und den Zielen Ihrer Untersuchung ab. Anstelle des Perzentil-Ansatzes, der darauf abzielt, die extremsten Fälle zu eliminieren, können Sie sich auch dafür entscheiden, nur die Teilnehmenden in die Analyse einzubeziehen, die mindestens die Hälfte des Fragebogens ausgefüllt haben. So könnten Sie beispielsweise die höchste Seitenzahl ermitteln, die irgendein:e Teilnehmer:in erreicht hat (sofern mindestens eine Person die Umfrage erfolgreich beendet hat, ist dies automatisch die letzte Seite des Fragebogens) und dann nur solche Fälle behalten, bei denen die Teilnehmenden mindestens die Hälfte dieser Seitenzahl erreicht haben.

Befehl:

daten_bereinigt <- daten %>%
  filter(MAXPAGE >= max(MAXPAGE, na.rm = TRUE) / 2) # Die ermittelte maximale Seitenzahl auf die Hälfte gesetzt

Manchmal kann es sein, dass Sie im Rahmen einer Befragung ihren Teilnehmenden einen Stimulus gezeigt haben und die Veränderung in der abhängigen Variable je nach Experimentalgruppe bestimmten wollen. In einem solchen Szenario kann es sinnvoll sein, dass Sie nur solche Fälle analysieren, die es in der Befragung mindestens bis zur Seite mit der abhängigen Variable geschafft haben. Sollte die abhängige Variable beispielsweise auf Seite 22 gemessen worden sein, sieht ihr Code wie folgt aus.

Befehl:

daten_bereinigt <- daten %>%
  filter(MAXPAGE > 22) # Die Teilnehmenden müssen weiter als bis S. 22 gekommen sein
Durcklicker auf Basis fehlender Werte und schnellem ausfüllen identifizieren und entfernen

Sollten Ihre Daten über SoSci Survey erhoben worden sein, gibt es die Variable TIME_RSI im Datensatz. Diese gibt abhängig vom Median an, inwiefern Teilnehmende schneller (Werte über 1) oder langsamer (Werte unter 1) beim Ausfüllen des Fragebogens waren. Es ist gängig Teilnehmende ab einem TIME_RSI von 2 aus dem Datensatz zu entfernen. Der Code dazu sieht wie folgt aus:

Befehl:

daten_bereinigt <- daten %>%
   filter(TIME_RSI < 2)

Zusätzlich liefert Ihnen SoSci Survey die Variable MISSING im Datensatz. MISSING gibt den Anteil der nicht gegebenen Antworten in Prozent an (0 bis 100). Es werden nur die Fragen gezählt, die den Teilnehmenden auch tatsächlich gestellt wurden – auch Personen, die die Befragung vorzeitig abgebrochen haben, können also theoretisch auf alle ihnen gestellten Fragen geantwortet haben (0 Prozent unbeantwortete Fragen). Gängige Praxis ist es, alle Fälle auszuschließen, die mehr als 20% unbeantwortete Fragen aufweisen, da diese Teilnehmenden als Durchklicker gelten.

Befehl:

daten_bereinigt <- daten %>%
  filter(MISSING <= 20)

Falls Ihre Daten nicht aus SoSci Survey stammen und daher keine vordefinierte Variable MISSING enthalten, können Sie eine ähnliche Variable selbst erstellen. Diese Variable soll den Anteil der fehlenden Antworten pro Fall in Prozent messen. Achtung: Im Gegensatz zur MISSING-Variable aus SoSci Survey werden in der selbst berechneten Variable auch Fragen gezählt, die den Teilnehmer:innen gar nicht erst gestellt wurden. Deswegen wird Ihre selbst berechnete Variable immer größer ausfallen als die von SoSci Survey bereitgestellte.

Der folgend vorgestellte Befehl erstellt zunächst die MISSING-Variable, die für jeden Fall den Prozentsatz der fehlenden Werte berechnet. Anschließend filtert er die Daten so, dass nur die Fälle erhalten bleiben, deren Anteil an fehlenden Daten unter dem 90. Perzentil liegt. Anders ausgedrückt: die obersten 10% der Fälle mit den meisten fehlenden Daten werden aus dem Datensatz entfernt, um sicherzustellen, dass die verbleibenden Daten eine höhere Qualität und Vollständigkeit aufweisen.

Befehl:

daten_bereinigt <- daten %>%
    mutate(MISSING = 100 * rowMeans(is.na(.))) %>% # Berechnet % fehlender Werte pro Fall
    filter(MISSING < quantile(MISSING, 0.9)) # Behält nur Fälle unter dem 90. Perzentil

Sollten Sie einmal alle Fälle mit einem fehlenden Wert ausschließen wollen (in aller Regel nicht empfehlenswert!), funktioniert dies wie folgt :

Befehl:

daten_bereinigt <- daten %>%
   drop_na()

Überblick über mögliche Muster der fehlenden Daten verschaffen

Egal wie hoch der Anteil der NAs in Ihrem Datensatz ist, Sie sollten immer eine detaillierte Untersuchung des Musters der fehlenden Daten durchführen. Bedenken Sie: Das Muster der fehlenden Daten ist oft wichtiger als der Prozentsatz der Missings selbst! Wenn Daten zufällig fehlen (Missing Completely at Random, MCAR), ist der Einfluss auf die Analysen weniger gravierend als bei nicht zufälligen Mustern (Missing Not at Random, MNAR), wo die Wahrscheinlichkeit des Fehlens mit den Daten selbst oder mit anderen Variablen zusammenhängt. Wenn zum Beispiel in einer Umfrage zur Wahlprognose die meisten fehlenden Daten von Wähler:innen der AfD stammen, weil diese Gruppe möglicherweise weniger bereit ist, an Umfragen teilzunehmen oder ihre Wahlpräferenz zu offenbaren, könnte dies die Ergebnisse stark verzerren. Solch ein systematischer Ausfall könnte dazu führen, dass der tatsächliche Wähleranteil der AfD in der Prognose unterschätzt wird.

Die beste Möglichkeit, um Muster im Antwortverhalten zu identifizieren, ist auf „anomalies in the responses’ means, variance, and correlation structure“ zu achten.

Antwortmuster identifizieren

Bei Punkt 1. Was soll bereinigt werden: bedeutungslose Daten wurden bereits unterschiedliche Antwortmuster bei Itembatterien eingeführt. Ziel ist es eindeutig auffällige Antwortmuster zu identifizieren und die entsprechenden Fälle aus dem Datensatz zu entfernen.

Es gibt unterschiedliche Arten von auffälligen Antwortmustern. Hier ein paar Beispiele:

  • Straightlining: Wie der Name schon vermuten lässt, kreuzen Teilnehmende hier immer die gleiche Ausprägung an, sodass die angekreuzten Antworten eine gerade vertikale Linie ergeben (z.B. wird bei allen fünf Items die Antwort „stimme nicht zu“ angekreuzt).
  • Hill Patterns: Im Gegensatz zum Straightlining ergeben die angekreuzten Antworten einer Itembatterie hier keine geraden Linie sondern einem Hügel/mehreren Hügeln – meint, dass systematisch von links nach rechts angekreuzt wird.
  • Primacy-/Recency-Effekte: Beschreiben die Antworttendenz, dass bei Auswahlmöglichkeiten vermehrt die erste bzw. letzte Antwort angekreuzt wird. Diesem Effekt kann jedoch mit einer randomisierten Reihenfolge der Auswahlmöglichkeiten entgegengesteuert werden.

Bisher gibt es keine direkten Funktionen diese Muster im Antwortverhalten festzustellen – entsprechende Funktionen in tidycomm sind aber in Arbeit 😀 Bis dahin müssen Sie manuell nach möglichen Mustern in Ihren Befragungsdaten suchen. Generell gilt hier jedoch lieber weniger als mehr Fälle aufgrund von Antwortmustern auszuschließen, damit „gute“ Daten nicht verloren gehen.

Reversed Items kontrollieren

Es ist gängig Konstrukte mit mehreren Items abzufragen. Dabei kommt es oft vor, dass ein Teil der Items gegenteilig formuliert wird um so Befragte zu identifizieren, die die Frage- und Antwortmöglichkeiten nicht aufmerksam gelesen haben. Wenn jemand nicht aufmerksam gelesen hat und überall Wert 2 angekreuzt hat, dann fällt bei den gegenteilig formulierten Items auf, dass diese konsistenten Antworten bei gegensätzlichen Aussagen unlogisch sind. Diese gegenteilig formulierten Items müssen für die Analyse gedreht werden (Wert 1 wird zu Wert 5, Wert 2 wird zu Wert 4, …) und werden daher reversed Items genannt.

Bisher gibt es keine Funktion, die diese Muster bei Befragungsbatterien mit reversed items identifiziert – eine entsprechende Funktion für tidykomm ist jedoch in Arbeit 😀 Bis dahin muss nach Auffälligkeiten manuell Ausschau gehalten werden. Ähnlich wie bei den oben erläuterten Antwortmustern sollte hier konservativ gehandelt werden. Sprich, dass Sie eher auffällige Fälle behalten als womöglich gewissenhaft ausgefüllte Antworten voreilig auszuschließen.

Unplausible/fehlerhafte Werte

Werte, die unplausibel sind, weil beispielsweise einer der Teilnehmenden ein Alter von 223 Jahren angegeben hat müssen händisch ausgebessert werden oder ganz aus der Analyse ausgeschlossen werden. Um einen Wert umzuschreiben müssen Sie zunächst die Zelle des Wertes identifizieren und sich davon die Zeilen- und Spaltennummer merken.

Beispiel: Einer der Teilnehmenden hat ein Alter von 223 Jahren angegeben und Sie haben sich dazu entschieden daraus ein Alter von 23 Jahren zu machen, weil dieser Art von Tippfehler für Sie plausibel erscheint. Wenn der zu ändernde Wert beispielsweise in Zeile 15 und Spalte 7 steht sieht der Code wie folgt aus:

daten_23_j <- daten[15,7] = 23

Manuell Fälle entfernen

Manchmal sind es jedoch einzelne Fälle, die nicht direkt unter einer der Kriterien fallen, die ausgeschlossen werden sollen. Beispielsweise, wenn eine Person immer die gleiche Antwort angeklickt hat. Um Beispielsweise die Fälle 4, 13 und 29 in einem Datensatz auszuschließen sieht der Code wie folgt aus:

daten_bereinigt <- daten[-c(4, 13, 29),]

Forschungsgeleitete Ausschlusskriterien berücksichtigen

Oft haben Sie vor der Datenerhebung gewisse Kriterien für Ihre Stichprobe gewählt. Diese können beispielsweise das Alter, den Wohnort oder die Tätigkeit der Teilnehmenden betreffen.

Wenn wir beispielsweise annehmen, Sie hätten festgelegt, dass Sie nur volljährige Studierende in Ihrem sample haben wollen, die in Deutschland wohnen, müssen diese Kriterien vor Beginn der Auswertung kontrolliert werden. Auch wenn beispielsweise am Anfang des Fragebogens darauf hingewiesen werden wurde, dass nur Studierende teilnehmen sollen. In diesem Beispiel wurde die Variable alter mit einem offenen Feld abgefragt in das die Teilnehmenden ihr Alter eintragen konnten. Der Wohnort wurde mit einem drop-down Menü abgefragt, wobei der Wert 1 der Variable wohnort für Deutschland steht. Zuletzt gibt die Variable student an, ob der Teilnehmende studiert (1 = ja, 2 = nein). Um nun entsprechend nur volljährige Studierende mit dem Wohnort in Deutschland im Datensatz zu haben sieht der Code wie folgt aus:

Befehl:

daten <- daten %>%
   filter(alter >= 18 & wohnort == 1 & student == 1)