Ich habe über das How to perform a Logistic Regression in R Tutorial über R-Blogger gearbeitet, welches den Datensatz aus der Kaggle Titanic challenge verwendet. Ein Stichwort mit dem ganzen Code in der Post kann here gefunden werden.R - Gibt es eine Möglichkeit, den Bereich der Werte, die durch 'mi' berechnet werden, einzuschränken? (Arbeiten mit Kaggle Titanic Datensatz)
existiert Es fehlende Daten im Trainingsdatensatz:
Daten für 891 Passagiere in diesem Datensatz enthalten sind (891 Zeilen) und 177 haben fehlende Age
Werte:
type missing method model
PassengerId continuous 0 <NA> <NA>
Survived binary 0 <NA> <NA>
Pclass ordered-categorical 0 <NA> <NA>
Name unordered-categorical 0 <NA> <NA>
Sex binary 0 <NA> <NA>
Age continuous 177 ppd linear <----
SibSp continuous 0 <NA> <NA>
Parch continuous 0 <NA> <NA>
Ticket unordered-categorical 0 <NA> <NA>
Fare continuous 0 <NA> <NA>
Cabin unordered-categorical 687 ppd mlogit
Embarked unordered-categorical 2 ppd mlogit
Im Tutorial werden die fehlenden Werte einfach durch den Mittelwert der vorliegenden Age
Werte ersetzt:
data$Age[is.na(data$Age)] <- mean(data$Age,na.rm=T)
Ich interessiere mich für die fehlende Werte und rechnen statt Mittelwert oder Median Ersatz zu tun. Es gibt mehrere Imputationsbibliotheken, wie Amelia und MICE, aber ich habe mi
in der Vergangenheit verwendet, weshalb ich mi
für dieses Problem gewählt habe.
Das Hauptproblem ist, dass der Bereich des kalkulatorischen Wertes, wenn ich verwenden mi
nicht angemessen war:
Der rote Balken der Mittelwert jeder Verteilung ist. Das Alter der Passagiere reicht von 0,42 bis 80 (Jahre). Die kalkulatorischen Werte reichen von weniger als -100 bis mehr als 200.
Offensichtlich ist dies überhaupt nicht sinnvoll ist. Unten ist der Code, den ich verwendet habe. Ich habe die mi vignette als Leitfaden verwendet.
library(mi)
training.data.raw <- read.csv("train.csv", header = TRUE, na.strings = c(""))
# create missing data frame for use with mi
training.data.raw.mdf <- missing_data.frame(training.data.raw)
#image(training.data.raw.mdf)
# adjust variable types
training.data.raw.mdf <- change(training.data.raw.mdf, y = "Parch", what = "type", to = "ord")
training.data.raw.mdf <- change(training.data.raw.mdf, y = "SibSp", what = "type", to = "count")
training.data.raw.mdf <- change(training.data.raw.mdf, y = "PassengerId", what = "type", to = "irrelevant")
# parallel imputation should be default on non-Windows systems (i.e. Linux)
imputations <- mi(training.data.raw.mdf, n.iter = 30, n.chains = 4, max.minutes = 20)
round(mipply(imputations, mean, to.matrix = TRUE), 3)
# get data frames
imputed.dataframes <- complete(imputations, m = 1)
Gibt es eine Möglichkeit den Bereich der kalkulatorische Werte zu steuern, dass die sie zwischen fallen, sagen wir mal, 0 und 80?
Ich benutze gerne jede Imputationsbibliothek - mi, MICE, amelia - solange vernünftige Ergebnisse erzielt werden. Beliebige Methoden und Bibliotheken, die vernünftige Ergebnisse liefern, sind von Interesse.