Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Schönen guten Tag,

Ich hoffe, Sie können mir weiterhelfen.
Wenn ich z.B. mit dem Befehl "bargraph" ein Balkendiagramm erstelle, wird mir neben meinen definierten Ausprägungen (ursprünglich Antwortoptionen) ein zusätzlicher Balken "[NA] Nicht beantwortet" angezeigt.

Interessanterweise wird "[NA] Nicht beantwortet" auch bei Pflichtfragen angezeigt, Folge: [NA] Nicht beantwortet --> 0

Könnten Sie mir bitte erklären, wie ich diese Ausprägung aus meiner Auswertung entfernen kann?
Wichtige Info: Die Datenauswertung findet mit RStudio statt. Der Datensatz wurde mit Hilfe des R-Skripts in das Format GNU R importiert.

Vielen Dank im Voraus!

in Datenauswertung by s159148 (110 points)

1 Answer

0 votes

Eine fehlende Antwort ist auch bei Pflichtfragen möglich - und zwar dann, wenn die Befragten nach Nicht-Beantwortung der Frage das Browserfenster schließen und damit die Befragung abbrechen. Deshalb sieht SoSci Survey in den Scripten die Ausprägung generell vor.

Eine einfache Möglichkeit, um nicht verwendete Ausprägungen aus einem R factor zu entfernen ist die Konvertierung in einen String und danach zurück in einen Faktor:

ds$AB01 = as.factor(as.character(ds$AB01))

Wenn es nur um eine Hand voll Variablen geht, kann man das zu Fuß erledigen, ansonten auch bequem per Schleife:

for (varID in names(ds)) {
  if (is.factor(ds[[varID]])) {
    ds[[varID]] = as.factor(as.character(ds[[varID]]))
  }
}

Aber Vorsicht: Dabei werden alle (!) nicht-verwendeten Ausprägungen entfernt.

Falls es Ihnen spezifisch um das NA geht, können Sie die Schleife weiter ausbauen, die vorhandenen levels() auslesen, die ^[NA]-Werte per Suchfunktion entfernen und die restlichen Werte als neue Levels verwenden.

by SoSci Survey (178k points)
Vielen Dank für die schnelle Antwort! Ich probiere es mal aus.
Mir ist aufgefallen, dass ich aufgrund der zusätzlichen Ausprägung ([NA]) keinen Chi Quadrat Test machen kann, da ich so einen zusätzlichen Vektor mit ausschließlich Nullen einbaue.
Wissen Sie, ob ich diesen Vektor mit Nullen bequem per Befehl entfernen kann?
Das Problem taucht nur dann auf, wenn man chisq.test() eine Tabelle übergibt - wenn man die beiden Faktoren separat in zwei Parametern übergibt, dann funktioniert alles auch mit den NA-Werten korrekt. Hier ein kleines Script zur Demonstration:

testdata = data.frame(cbind(
    X = rep(c("A","A","A","A","A","A","B","B","B","B","A","A","A","A","A","A","B","B","B","B"), 5),
    Y = rep(c("A","A","A","A","B","B","B","B","B","B","A","A","A","A","A","B","B","B","B","A"), 5)
))

testdata$X = factor(testdata$X, levels=c("A", "B", "NA"))
testdata$Y = factor(testdata$Y, levels=c("A", "B", "NA"))

chisq.test(testdata$X, testdata$Y)
chisq.test(table(testdata$X, testdata$Y))
Ich verstehe. Der Chi Quadrat Test funktioniert :) - Danke!

Letzte Frage: Nachdem ich den Befehl:

for (varID in names(ds)) {
  if (is.factor(ds[[varID]])) {
    ds[[varID]] = as.factor(as.character(ds[[varID]]))
  }
}

eingegeben habe, hat sich die Reihenfolge der levels in R mitverändert:
Beispiel
Vorher: "Nie", "Manchmal", "Oft"; jetzt: "Manchmal", "Nie", "Oft"
Ich vermute nun ist es nach Alphabet. Gibt es auch hier die Möglichkeit, dies zu ändern? Gerade bei den Werten mit einer Reihenfolge, sieht das doch sehr unschön und unkorrekt aus.
> Ich vermute nun ist es nach Alphabet. Gibt es auch hier die Möglichkeit, dies zu ändern?

Da sind wir nochmal bei der oben angesprochenen Lösung: Levels auslesen, NA mittels grep() entfernen und dann den Faktor mit den "gesäuberten" Levels erneut erstellen. Statt as.factor() muss dann factor() verwendet werden.
Oh ... und es gibt offenbar auch eine R-base-Funktion dafür:
https://stat.ethz.ch/R-manual/R-devel/library/base/html/droplevels.html
Dankeschön. Es hat alles funktioniert :)
...