eleicoes <- read.csv("eleicoes2014.csv", encoding = "latin1")
teste <- read.csv("test.csv", encoding = "latin1")

Usando todas as variáveis disponíveis, tune (usando validação cruzada): (i) um modelo de regressão Ridge, (ii) um modelo de regressão Lasso e (iii) um modelo KNN. Para os modelos de regressão linear, o parâmetro a ser tunado é o lambda (penalização dos coeficientes) e o KNN o número de vizinhos.

eleicoes2 <- eleicoes %>%
  select(-sequencial_candidato, -nome, -numero_cadidato, -cargo)


fitControl <- trainControl(method = "cv", number = 5, search = "random")


modelo.ridge <- train(votos ~ .,data = eleicoes2,method = "ridge", preProcess = c("nzv"), trControl = fitControl, na.action = na.omit)
modelo.ridge
## Ridge Regression 
## 
## 404 samples
##  21 predictor
## 
## Pre-processing: remove (192) 
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 324, 324, 323, 322, 323 
## Resampling results across tuning parameters:
## 
##   lambda        RMSE      Rsquared   MAE     
##   1.326686e-05  82227.83  0.2101408  44223.81
##   2.894778e-05  82140.42  0.2123556  44166.20
##   3.935297e-02  75813.66  0.2452695  41817.80
## 
## RMSE was used to select the optimal model using  the smallest value.
## The final value used for the model was lambda = 0.03935297.
modelo.lasso <- train(votos ~ .,data = eleicoes2,method = "lasso", preProcess = c("nzv"), trControl = fitControl, na.action = na.omit)
modelo.lasso
## The lasso 
## 
## 404 samples
##  21 predictor
## 
## Pre-processing: remove (192) 
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 323, 322, 323, 324, 324 
## Resampling results across tuning parameters:
## 
##   fraction   RMSE      Rsquared   MAE     
##   0.6021285  96553.09  0.1253072  50062.84
##   0.7302828  96818.12  0.1244204  50176.38
##   0.9849050  97410.76  0.1225982  50423.71
## 
## RMSE was used to select the optimal model using  the smallest value.
## The final value used for the model was fraction = 0.6021285.
modelo.knn <- train(votos ~ .,data = eleicoes2,method = "knn", preProcess = c("nzv"), trControl = fitControl, na.action = na.omit)
modelo.knn
## k-Nearest Neighbors 
## 
## 404 samples
##  21 predictor
## 
## Pre-processing: remove (192) 
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 323, 323, 323, 324, 323 
## Resampling results across tuning parameters:
## 
##   k    RMSE       Rsquared   MAE     
##     1  104570.22  0.1307593  49702.62
##    59   69531.55  0.3076183  35170.34
##   132   70519.92  0.2890000  37706.30
## 
## RMSE was used to select the optimal model using  the smallest value.
## The final value used for the model was k = 59.

Compare os três modelos em termos do erro RMSE de validação cruzada.

Queremos um modelo com um erro RSME baixo, que terá um trade-off bias-variância ótimo.O RMSE é usado para medir a diferença entre valores previstos por um modelo e os valores realmente observados. Diferente do Rsquared, com o RMSE sabemos explicitamente quanto nossas previsões se desviam, em média, dos valores reais no conjunto de dados. Portanto, segundo o RMSE, o melhor modelo seria o KNN.

Quais as variáveis mais importantes segundo o modelo de regressão Ridge e Lasso? Variáveis foram descartadas pelo Lasso? Quais?

O gráfico abaixo classifica as variáveis em nível de importância.

ggplot(varImp(modelo.ridge))

ggplot(varImp(modelo.lasso))

O lambda é o parâmetro de encolhimento. Quando lambda é zero, nenhuma variável deve ser retirada do modelo, não há encolhimento. Quanto maior o lambda, mais variáveis devem ser descartadas.

Re-treine o melhor modelo (usando os melhores valores de parâmetros encontrados em todos os dados, sem usar validação cruzada).

A função abaixo escolherá os parâmetros de tuning associados aos melhores resultados, usando o parâmetro metric, que especifica qual métrica será usada para selecionar o modelo ótimo, nesse caso o RMSE.

modelo.best <- train(votos ~ .,data = eleicoes2,method = "knn", preProcess = c("nzv"), na.action = na.omit, metric = "RMSE")
modelo.best
## k-Nearest Neighbors 
## 
## 404 samples
##  21 predictor
## 
## Pre-processing: remove (192) 
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 404, 404, 404, 404, 404, 404, ... 
## Resampling results across tuning parameters:
## 
##   k  RMSE      Rsquared   MAE     
##   5  94003.00  0.1245654  43293.53
##   7  88608.46  0.1580403  40982.14
##   9  86952.57  0.1710041  40324.86
## 
## RMSE was used to select the optimal model using  the smallest value.
## The final value used for the model was k = 9.

Use esse último modelo treinado para prever os dados de teste disponíveis no challenge que criamos na plataforma Kaggle

eleicoes.teste <- eleicoes2 %>%
  select(-recursos_de_pessoas_físicas, -setor_economico_receita, -setor_economico_despesa, -grau, -estado_civil)

eleicoes.teste[is.na(eleicoes.teste)] <- 0

modelo.final <- train(votos ~ .,data = eleicoes.teste,method = "knn", preProcess = c("nzv"), metric = "RMSE")

teste[is.na(teste)] <- 0

predictions <- predict(modelo.final, newdata = teste)

predicao <- teste %>%
  select(ID)

predicaofinal <- cbind(predicao, predictions)

write.csv(predicaofinal, file = "lab3_final.csv", row.names = FALSE)