Seite 1 von 1

Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 1:56 pm
von PflipraS
Hallo zusammen,
im Rahmen meines Pflichtpraktikums habe ich eine Mitarbeiterbefragung zu psychischen Belastungsfaktoren am Arbeitsplatz durchgeführt und soll diese nun auswerten.
Mein Fragebogen bestand mehr oder weniger aus 4 Teilen: A, B, C und D.
Während es in Teil A (Spalten 1-17) nicht relevant ist, ob alle Items beantwortet sind, und in Teil C (Spalten 66-81) sogar damit zu rechnen ist, würden NAs in Teil B (Spalten 18-65) und D (Spalten 82-129) die Ergebnisse verfälschen.
Wie kann ich genau diese Probanden herausfiltern und aus der Auswertung ausschließen, ohne automatisch alle Probanden, die ein Item nicht beantwortet haben, ebenfalls aus dem Datensatz zu werfen?
Vielen Dank bereits für Eure fachkundige Hilfe!

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 2:11 pm
von jogo
Hallo PflipraS,

willkommen im Forum!
Wie sieht denn Deine Auswertung aus, wenn keine NAs vorhanden wären?
Bitte zeig uns den entsprechendne Code.

Gruß, Jörg

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 2:30 pm
von PflipraS
Hallo Jörg,

Bisher bin ich so vorgegangen:
Ich habe mit

Code: Alles auswählen

maxNA <- 15
Daten <- ohneNA[!(rowSums(is.na(ohneNA))>maxNA),]  
die VPN, die mehr als 15 Items nicht beantwortet haben, ausgeschlossen, da ich davon ausgehe, dass der Fragebogen nicht verstanden wurde oder bewusst nicht ausgefüllt wurde.
Für die Auswertung fasse ich Itemantworten zu Skalen zusammen, indem ich die Spalten aufaddiere und durch die Anzahl der Spalten teile, um einen Mittelwert zu erhalten, den ich dann mit einer Referenzdatenbank vergleichen kann.

Code: Alles auswählen

Daten$Quantitative2011 <- rowSums(Daten[,c("B1.1", "B1.2", "B1.3", "B1.5")], na.rm=TRUE)/4
Allerdings bin ich mir nicht über sicher, was R aus den NAs macht, wenn ich na.rm = TRUE setze. Berichtige mich bitte, wenn es nicht stimmt, aber ich vermute, dass R das als 0 in die Summe aufnimmt und so würde das Ergebnis verfälscht werden ((x + y + z +0)/4 < (x + y + z / 3)).
Ich bin also auf der Suche nach entweder einer Möglichkeit, bei den skalenrelevanten Items Personen mit NAs rauszuwerfen oder den Mittelwert flexibel durch die Anzahl der beantworteten Items zur Skala zu teilen.

(Ich hoffe, das war wenigstens ansatzweise verständlich - finde es schwierig, das Problem in Worte zu fassen)


Hier noch ein Bild von meinem Datensatz, evtl. hilft das ja, mein Problem zu verdeutlichen:
Frage_RForum.png
VPN 5 hat in der Skala Lebenszufriedenheit die Werte 83 (= zufrieden), 83, NA, 100 (= sehr zufrieden), 83 und auf der Skala jedoch nur 53.2 (= weder zufrieden noch unzufrieden). Das Ergebnis auf der Skala ist also deutlich ins Negative verfälscht. Deshalb möchte ich diese Person entweder ausschließen oder einen Code finden, der merkt, dass nur 3 der 5 Skalenitems beantwortet wurden und die Summe der Spalten dann nur durch 3 teilt.

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 2:39 pm
von jogo
Hallo PflipraS,
PflipraS hat geschrieben: Do Okt 15, 2020 2:30 pm Allerdings bin ich mir nicht über sicher, was R aus den NAs macht, wenn ich na.rm = TRUE setze. Berichtige mich bitte, wenn es nicht stimmt, aber ich vermute, dass R das als 0 in die Summe aufnimmt und so würde das Ergebnis verfälscht werden ((x + y + z +0)/4 < (x + y + z / 3)).
Ich bin also auf der Suche nach entweder einer Möglichkeit, bei den skalenrelevanten Items Personen mit NAs rauszuwerfen oder den Mittelwert flexibel durch die Anzahl der beantworteten Items zur Skala zu teilen.
ja, ich berichtige Dich:

Code: Alles auswählen

mean(c(1, 2, 3))
mean(c(1, 2, 3, NA), na.rm=TRUE)
NA ist jedenfalls keine 0.

Gruß, Jörg

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 2:54 pm
von PflipraS
Vielen Dank! Das ist eine wichtige Erkenntnis für mein weiteres Arbeiten!
Jedoch bin ich auch durch die mean-Funktion nicht weitergekommen:

Code: Alles auswählen

Daten$L_Zufriedenheit2011 <-  mean(rowSums(Daten[,c("B16.1", "B16.2", "B16.3", "B16.4", "B16.5")], na.rm=TRUE))
liefert
Frage_RForum_2.png
sprich der Mittelwert über alles für jede Person gleich...

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 2:57 pm
von jogo
Vermutlich möchtest Du:

Code: Alles auswählen

Daten$L_Zufriedenheit2011 <- rowMeans(Daten[,c("B16.1", "B16.2", "B16.3", "B16.4", "B16.5")], na.rm=TRUE)
Gruß, Jörg
p.s.:
Bitte formatiere Codestücke passend, siehe: viewtopic.php?f=20&t=29

Re: Umgang mit Missing Values

Verfasst: Do Okt 15, 2020 3:03 pm
von PflipraS
Klasse! Heute bist Du mein persönlicher Held!
Tausend Dank!