# Fit the Titanic data using logistic regression
library(dplyr)
library(missForest)

# Function to load the training and test data sets and convert Sex and Embarked to factors
load_data <- . %>% 
    read.csv() %>%
    mutate(Sex = as.factor(Sex),
           Embarked = as.factor(gsub("^$", "S", Embarked)))

# Load the training and test data
train <- load_data("../input/train.csv")
test <- load_data("../input/test.csv")

# Impute age using a random forest
imp <- select(train, -Survived) %>% 
    rbind(test) %>%
    select(-Name, -Ticket, -Cabin, -PassengerId) %>%
    missForest()

train_ind <- seq_len(nrow(train))
train$AgeImp <- imp$ximp$Age[train_ind]
test$AgeImp <- imp$ximp$Age[-train_ind]

# Perform a logistic regression using Sex and Pclass
logreg <- glm(Survived ~ Sex * Pclass * AgeImp, family = binomial, data = train)
test$Survived <- as.numeric(predict(logreg, test) > 0)

write.csv(test[c("PassengerId", "Survived")],
          file = "logistic_regression_submission.csv",
          row.names = FALSE)