Missings identifizieren und damit umgehen

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Lis91
Beiträge: 24
Registriert: Sa Mai 18, 2019 1:18 pm

Missings identifizieren und damit umgehen

Beitrag von Lis91 »

Hallo ihr Lieben,
ich bräuchte nochmal eure Hilfe. Ich habe 21 Spalten, die Items eines Fragebogen repräsentieren und von den Versuchspersonen beantwortet wurden. Jetzt würde ich gerne zunächst einmal die Spalten in einen neuen Datensatz extrahieren um mich dann mit den Missings zu beschäftigen und ggf. Vpn ausschließen zu können.

Jetzt würde ich gerne wissen, welche Versuchspersonen mehr als 2 Missings haben und die dann ausschließen.

Dann würde mich außerdem interessieren, welche Personen <= 2 Missings haben und die durch den Mittelwert der übrigen Items der jeweiligen Person ersetzen. Wenn mir jemand mit diesen Anliegen helfen könnte, wäre ich super dankbar! Könnte ich auch gut für den übrigen Datensatz gebrauchen :)

Liebe Grüße
Lis
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Missings identifizieren und damit umgehen

Beitrag von jogo »

Hallo Lis,

kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von

Code: Alles auswählen

str(DeinDataframe)
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Missings identifizieren und damit umgehen

Beitrag von bigben »

Lis91 hat geschrieben: Di Mai 21, 2019 3:10 pmJetzt würde ich gerne wissen, welche Versuchspersonen mehr als 2 Missings haben und die dann ausschließen.
Schonmal als Hinweis, bis Du Jörgs Frage beantwortest:

Code: Alles auswählen

bsp <- data.frame(name = c("Alpha", "Bravo", "Delta", "Echo", "Foxtrott", "Golf", "Hotel"),
                  s1 = c(NA, 1:5, NA), s2 = c(NA, 1:4, NA, NA), s3 =c(NA, NA, NA, .1, 22, NA, NA))
print(bsp)

bsp$imputeValue <- rowMeans(bsp[,c("s1", "s2", "s3")], na.rm = TRUE) # Mittelwert für später
bsp$NAzaehler <- apply(bsp, 1, function(x) sum(is.na(x))) # wieviele NA in dieser Zeile

print(bsp)

nicht_mehr_als_zwei_NA <- bsp[bsp$NAzaehler<=2,]  # lösche die mit zuvielen NA
print(nicht_mehr_als_zwei_NA)
Zur Imputation: Das kann man von Hand stricken. Stellt sich die Frage, ob man nicht langfristig besser ein Package benutzt, das ausgereifte Funktionen enthält: https://www.analyticsvidhya.com/blog/20 ... ng-values/

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Lis91
Beiträge: 24
Registriert: Sa Mai 18, 2019 1:18 pm

Re: Missings identifizieren und damit umgehen

Beitrag von Lis91 »

jogo hat geschrieben: Di Mai 21, 2019 4:34 pm Hallo Lis,

kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von

Code: Alles auswählen

str(DeinDataframe)
Gruß, Jörg
Huhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).
Lis91
Beiträge: 24
Registriert: Sa Mai 18, 2019 1:18 pm

Re: Missings identifizieren und damit umgehen

Beitrag von Lis91 »

bigben hat geschrieben: Di Mai 21, 2019 4:49 pm
Lis91 hat geschrieben: Di Mai 21, 2019 3:10 pmJetzt würde ich gerne wissen, welche Versuchspersonen mehr als 2 Missings haben und die dann ausschließen.
Schonmal als Hinweis, bis Du Jörgs Frage beantwortest:

Code: Alles auswählen

bsp <- data.frame(name = c("Alpha", "Bravo", "Delta", "Echo", "Foxtrott", "Golf", "Hotel"),
                  s1 = c(NA, 1:5, NA), s2 = c(NA, 1:4, NA, NA), s3 =c(NA, NA, NA, .1, 22, NA, NA))
print(bsp)

bsp$imputeValue <- rowMeans(bsp[,c("s1", "s2", "s3")], na.rm = TRUE) # Mittelwert für später
bsp$NAzaehler <- apply(bsp, 1, function(x) sum(is.na(x))) # wieviele NA in dieser Zeile

print(bsp)

nicht_mehr_als_zwei_NA <- bsp[bsp$NAzaehler<=2,]  # lösche die mit zuvielen NA
print(nicht_mehr_als_zwei_NA)
Zur Imputation: Das kann man von Hand stricken. Stellt sich die Frage, ob man nicht langfristig besser ein Package benutzt, das ausgereifte Funktionen enthält: https://www.analyticsvidhya.com/blog/20 ... ng-values/

LG,
Bernhard
Hallo Bernhard! Danke für Deine Antwort! Zusammen mit Deiner Syntax hab ich eine Lösung gefunden. Ich hab die betreffenden Variablen in eine Excel-Datei kopiert, die in R importiert, die Spaltennamen mit colnamen() umbenannt und dann mit rowMeans() die Mittelwerte berechnet u. in eine neue Spalte eingefügt, mit apply() den "NA-Zähler installiert ( ;) ), die zuvielen NAs gelöscht und würde zum Schluss mit data.entry() den Datensatz händisch bearbeiten und die Mittelwerte in die übrig NAs einfügen. Ich denke, das genügt. Ihr seid super!

Liebe Grüße
Lis

PS: Die NA-Werte im Datensatz mit data.entry() händisch durch den Mittelwert zu ersetzen zerschiesst mir aus irgendeinem Grund den Datensatz. Ich hab sie jetzt in der Excel-Datei bearbeitet und neu eingelesen.
Zuletzt geändert von Lis91 am Di Mai 21, 2019 7:25 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Missings identifizieren und damit umgehen

Beitrag von jogo »

Es ging mir auch nicht darum, die NA-Werte zu sehen, sondern um den Namen und den Typ der Spalten des Dataframes zu kennen.
Ohne Spaltennamen lässt sich schlecht mit einem Dataframe hantieren.

Verbleiben wir so:
Du verzichtest darauf, die Struktur des Dataframes zu zeigen,
und ich verzichte darauf, irgend etwas Konkretes in diesem Zusammenhang zu programmieren.
Lis91 hat geschrieben: Di Mai 21, 2019 5:13 pm
jogo hat geschrieben: Di Mai 21, 2019 4:34 pm Hallo Lis,

kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von

Code: Alles auswählen

str(DeinDataframe)
Gruß, Jörg
Huhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).
Lis91
Beiträge: 24
Registriert: Sa Mai 18, 2019 1:18 pm

Re: Missings identifizieren und damit umgehen

Beitrag von Lis91 »

jogo hat geschrieben: Di Mai 21, 2019 6:14 pm Es ging mir auch nicht darum, die NA-Werte zu sehen, sondern um den Namen und den Typ der Spalten des Dataframes zu kennen.
Ohne Spaltennamen lässt sich schlecht mit einem Dataframe hantieren.

Verbleiben wir so:
Du verzichtest darauf, die Struktur des Dataframes zu zeigen,
und ich verzichte darauf, irgend etwas Konkretes in diesem Zusammenhang zu programmieren.
Lis91 hat geschrieben: Di Mai 21, 2019 5:13 pm
jogo hat geschrieben: Di Mai 21, 2019 4:34 pm Hallo Lis,

kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von

Code: Alles auswählen

str(DeinDataframe)
Gruß, Jörg
Huhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).
Hallo Jörg! Ich glaube, das war ein Missverständnis. Ich hab doch auch garnicht gesagt, dass es Dir darum geht, die NA-Werte zu sehen (abgesehen davon steht da doch auch garnichts drin!?). Wenn ich str(MeinDataframe) eingebe, kommt eine Auflistung der Variablen mit den dazugehörigen Werten. Die Variablen/Spalten, die ich gerne ich einem extra Datensatz extrahiert hätte, sind leider nicht zu sehen (ganz unten steht "list output truncated"). Ich denke aber, die sieht auch in etwa so aus:

Code: Alles auswählen

$ Var_021                    : num  1 1 3 2 1 2 NA 1 2 2 ...
Die Variablen, um die es bei mir geht, heißen "BDI_01", "BDI_02" bis "BDI_21".

Liebe Grüße
Lis
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Missings identifizieren und damit umgehen

Beitrag von jogo »

Hallo Lis,

zugegeben, das sieht wirklich seltsam aus bei Dir.
Inzwischen bin ich mir auch nicht mehr sicher, ob das Objekt überhaupt ein Dataframe ist.
Das lässt sich aber mit der Funktion class() herausfinden:

Code: Alles auswählen

class(seltsamesObjekt)
wäre hochinteressant.

Grüße, Jörg
Lis91
Beiträge: 24
Registriert: Sa Mai 18, 2019 1:18 pm

Re: Missings identifizieren und damit umgehen

Beitrag von Lis91 »

jogo hat geschrieben: Di Mai 21, 2019 8:29 pm Hallo Lis,

zugegeben, das sieht wirklich seltsam aus bei Dir.
Inzwischen bin ich mir auch nicht mehr sicher, ob das Objekt überhaupt ein Dataframe ist.
Das lässt sich aber mit der Funktion class() herausfinden:

Code: Alles auswählen

class(seltsamesObjekt)
wäre hochinteressant.

Grüße, Jörg

Code: Alles auswählen

class(df)
[1] "data.frame"
Scheint einer zu sein. Na dann bin ich ja beruhigt :mrgreen:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Missings identifizieren und damit umgehen

Beitrag von jogo »

hm, ok, sieht ganz so aus. Aber warum sieht dann der Output von str(df) nicht so ähnlich aus wie bei dem Dataframe iris?

Code: Alles auswählen

> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Kannst Du bitte mal spaßeshalber noch den Output von

Code: Alles auswählen

length(df)
zeigen?
Ansonsten hilft nur: viewtopic.php?f=20&t=11 bzw. https://stackoverflow.com/questions/596 ... le-example

Gruß, Jörg
Antworten