eleicoes <- read.csv("eleicoes2014.csv", encoding = "latin1")
teste <- read.csv("test.csv", encoding = "latin1")
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.
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.
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.
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.
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)