Conceptualmente seria así:
El script:
# ---------------------------------------------------------------------------- # carga datos train y test desde dropbox para imputar train.url <- "https://www.dropbox.com/s/r6panhu58ps38d2/train_titanic.csv?dl=1" test.url <- "https://www.dropbox.com/s/cb3gn5d2uy648bw/test_titanic.csv?dl=1" train <- read.csv(train.url) test <- read.csv(test.url) # ---------------------------------------------------------------------------- # Crea variable Titulo en Train y Test con siglas sr./sra./miss etc... for (i in 1:nrow(train)) { train$titulo[i] <- substr(train$Name[i], regexpr(",",train$Name[i] , fixed=T)[1] +2 ,regexpr(".",train$Name[i], fixed=T)[1] ) } for (i in 1:nrow(test)) { test$titulo[i] <- substr(test$Name[i], regexpr(",",test$Name[i] , fixed=T)[1] +2 ,regexpr(".",test$Name[i], fixed=T)[1] ) } # ---------------------------------------------------------------------------- # Crea modelo de regresion lineal para imputar modelo_edad <- lm(Age ~ Fare + as.factor(titulo) + SibSp + Parch + Pclass, data=train) # ---------------------------------------------------------------------------- # crea set de datos para imputar la variable Age train_imputado <- train test_imputado <- test # imputacion en train ------------ for (i in 1:nrow(train_imputado)) { if(is.na(train_imputado[i,"Age"])) { train_imputado[i,"Age"]<-predict(modelo_edad,newdata = train_imputado[i,]) } } # imputacion en test------------- for (i in 1:nrow(test_imputado)) { if(is.na(test[i,"Age"])) { test_imputado[i,"Age"]<-predict(modelo_edad,newdata = test_imputado[i,]) } }
NOTAS:
1. Conviene crear una variable que indique si un valor es imputado o no para usarla luego como una variable de entrada en algoritmos de predicción.
Una forma de crearla seria: train$inputado<-as.factor(ifelse(is.na(train$Age),'si','no'))
3. El excel con imagen se descarga AQUI
porque no calcula tambien con la columna emba
ResponderEliminar