Umgang mit Missing Values

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
PflipraS
Beiträge: 4
Registriert: Do Okt 15, 2020 1:36 pm

Umgang mit Missing Values

Beitrag 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!
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: Umgang mit Missing Values

Beitrag 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
PflipraS
Beiträge: 4
Registriert: Do Okt 15, 2020 1:36 pm

Re: Umgang mit Missing Values

Beitrag 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.
Zuletzt geändert von PflipraS am Do Okt 15, 2020 2:44 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: Umgang mit Missing Values

Beitrag 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
PflipraS
Beiträge: 4
Registriert: Do Okt 15, 2020 1:36 pm

Re: Umgang mit Missing Values

Beitrag 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...
Zuletzt geändert von PflipraS am Do Okt 15, 2020 3:01 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: Umgang mit Missing Values

Beitrag 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
PflipraS
Beiträge: 4
Registriert: Do Okt 15, 2020 1:36 pm

Re: Umgang mit Missing Values

Beitrag von PflipraS »

Klasse! Heute bist Du mein persönlicher Held!
Tausend Dank!
Antworten