library(readr)
library(leaps)
library(ggplot2)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(knitr)
library(caret)
## Loading required package: lattice
library(elasticnet)
## Loading required package: lars
## Loaded lars 1.2
library(lars)
df <- read.csv("C:/Users/João Lucas/Desktop/eleicoes2014.csv",fileEncoding = "latin1")
colnames(df)[13] <- "recursos_pessoas_fisicas"

Para tratar os dados, vamos olhar primeiro as colunas que contém na ao longo dos seus dados. Esses dados são erros na hora de se montar o csv e, por isso, não é de bom uso para nós. Podemos arrumar isso substituindo esses valores NA, setando esses números para a média de cada coluna em que esses valores se encontram.

media_partidos <- mean(df$recursos_de_partidos, na.rm = TRUE)
df$recursos_de_partidos[is.na(df$recursos_de_partidos)] <- media_partidos

media_comites <- mean(df$recursos_de_outros_candidatos.comites, na.rm = TRUE)
df$recursos_de_outros_candidatos.comites[is.na(df$recursos_de_outros_candidatos.comites)] <- media_comites

media_proprios <- mean(df$recursos_proprios, na.rm = TRUE)
df$recursos_proprios[is.na(df$recursos_proprios)] <- media_proprios

media_fisicas <- mean(df$recursos_pessoas_fisicas, na.rm = TRUE)
df$recursos_pessoas_fisicas[is.na(df$recursos_pessoas_fisicas)] <- media_fisicas

media_juridicas <- mean(df$recursos_de_pessoas_juridicas, na.rm = TRUE)
df$recursos_de_pessoas_juridicas[is.na(df$recursos_de_pessoas_juridicas)] <- media_juridicas

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.

Para ‘tunar’ nossas variáveis vamos usar validação cruzada. ‘Tuná-las’ significa que vamos ter que fazer uma buscar para encontrar os melhores valores para que o teste seja melhor. Como visto no tutorial, existem várias maneiras de se fazer validação cruzada:holdout, k-fold e leave-one-out. Para essa questão, ultilizaremos a k-fold nas 3 tunagens.

Nesse processo de tunagem, vamos tirar as variaveis cargo,pelo fato de que essa variável tem poucos fatores, e a variável nome, para não nos atrapalhar no processo, tomando um longo tempo para isso.

RIDGE

Ridge regression é um método de regularização que tem como principal objetivo suavizar os atributos que aumentem o ruído no modelo, evitando o overffiting.

Como vamos procurar pelos lambdas, temos que ter a consiência de que: Lambda grande:Bias grande e baixa variância Lambda pequeno: Bias pequeno e alta variância,

Tiraremos a variavel nome nos nossos modelos para não ser tão demorado o processo de “geramento” dos dados

fitControl <- trainControl(method = "repeatedcv", repeats = 5, number = 5)
lambda.grid <- expand.grid(lambda = seq(0, 2, by=0.1))

ridge <- train(votos ~ ., data = df %>% select(-cargo) %>% select(-nome),
               method='ridge',
               tuneGrid = lambda.grid,
               trControl = fitControl, 
               metric='RMSE',
               preProcess=c('scale', 'center','nzv')) # nzv para resolver o 0 variance


ridge
## Ridge Regression 
## 
## 4152 samples
##   23 predictor
## 
## Pre-processing: scaled (34), centered (34), remove (192) 
## Resampling: Cross-Validated (5 fold, repeated 5 times) 
## Summary of sample sizes: 3321, 3322, 3321, 3322, 3322, 3323, ... 
## Resampling results across tuning parameters:
## 
##   lambda  RMSE      Rsquared   MAE     
##   0.0     33412.96  0.4684819  12883.05
##   0.1     33316.95  0.4729721  12561.73
##   0.2     33718.29  0.4739317  12825.29
##   0.3     34256.31  0.4751010  13218.46
##   0.4     34916.56  0.4761412  13702.34
##   0.5     35682.01  0.4770003  14256.46
##   0.6     36535.38  0.4776928  14861.25
##   0.7     37460.76  0.4782459  15506.83
##   0.8     38444.07  0.4786858  16185.12
##   0.9     39473.15  0.4790346  16891.05
##   1.0     40537.63  0.4793103  17612.22
##   1.1     41628.79  0.4795271  18341.93
##   1.2     42739.28  0.4796962  19073.14
##   1.3     43862.99  0.4798268  19806.84
##   1.4     44994.82  0.4799261  20542.57
##   1.5     46130.54  0.4799996  21277.21
##   1.6     47266.62  0.4800522  22006.30
##   1.7     48400.15  0.4800875  22728.34
##   1.8     49528.74  0.4801086  23446.35
##   1.9     50650.40  0.4801179  24160.13
##   2.0     51763.51  0.4801176  24864.10
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was lambda = 0.1.

Com o resultado final do lambda = 0 vemos um lambda muito pequeno, ou seja, Bias baixo e variância alta.

ridge_prediction <- predict(ridge,df %>% select(-cargo) %>% select(-nome) %>% select(-votos))

ridge_data <- data.frame(pred = ridge_prediction, obs = df$votos)

ridge_cv <- round(defaultSummary(ridge_data),digits = 4)

ridge_cv
##       RMSE   Rsquared        MAE 
## 32880.1752     0.4745 12231.4245

Em termos de predição no teste, o modelo Ridge tem um R² de 0.4889, nos mostrando que tem um valor maior nos dados de teste do que no de treino.

LASSO

O lasso, que é mais um método de análise de regressão, executa a seleção e regularização de variáveis para aumentar a precisão da predição, podendo selecionar as variáveis para 0 se necessário.

lasso <- train(votos ~ ., data = df %>% select(-setor_economico_receita) %>% select(-cargo) %>% select(-nome) %>% select(-setor_economico_despesa),
               method='lasso',
               trControl = fitControl, 
               metric='RMSE',
               tuneLength = 50, 
               preProcess=c('scale', 'center')) 
               

lasso
## The lasso 
## 
## 4152 samples
##   21 predictor
## 
## Pre-processing: scaled (84), centered (84) 
## Resampling: Cross-Validated (5 fold, repeated 5 times) 
## Summary of sample sizes: 3321, 3320, 3323, 3321, 3323, 3323, ... 
## Resampling results across tuning parameters:
## 
##   fraction   RMSE      Rsquared   MAE     
##   0.1000000  33202.88  0.4699227  13027.45
##   0.1163265  33186.70  0.4711520  12998.76
##   0.1326531  33185.66  0.4720565  13003.51
##   0.1489796  33193.26  0.4727895  13037.43
##   0.1653061  33195.88  0.4734932  13079.50
##   0.1816327  33203.72  0.4739339  13132.06
##   0.1979592  33217.09  0.4741213  13190.70
##   0.2142857  33228.42  0.4743065  13246.57
##   0.2306122  33233.76  0.4745987  13292.67
##   0.2469388  33238.86  0.4747882  13326.46
##   0.2632653  33251.48  0.4747200  13360.49
##   0.2795918  33261.76  0.4746373  13391.10
##   0.2959184  33272.46  0.4745297  13420.19
##   0.3122449  33283.65  0.4744078  13446.52
##   0.3285714  33292.95  0.4743096  13467.40
##   0.3448980  33302.84  0.4741970  13487.60
##   0.3612245  33311.06  0.4741002  13503.36
##   0.3775510  33317.41  0.4740160  13513.77
##   0.3938776  33322.54  0.4739442  13523.19
##   0.4102041  33326.40  0.4738902  13531.14
##   0.4265306  33329.22  0.4738428  13537.57
##   0.4428571  33331.55  0.4737944  13543.02
##   0.4591837  33333.63  0.4737544  13547.17
##   0.4755102  33335.29  0.4737134  13550.55
##   0.4918367  33336.92  0.4736652  13553.59
##   0.5081633  33338.50  0.4736149  13556.18
##   0.5244898  33339.62  0.4735766  13558.22
##   0.5408163  33340.94  0.4735359  13559.90
##   0.5571429  33342.52  0.4734892  13561.69
##   0.5734694  33344.16  0.4734404  13563.76
##   0.5897959  33345.86  0.4733902  13565.78
##   0.6061224  33347.84  0.4733326  13567.92
##   0.6224490  33348.70  0.4733059  13569.43
##   0.6387755  33349.40  0.4732835  13570.93
##   0.6551020  33349.48  0.4732771  13572.14
##   0.6714286  33349.60  0.4732716  13573.20
##   0.6877551  33349.72  0.4732672  13573.98
##   0.7040816  33349.82  0.4732638  13574.67
##   0.7204082  33349.94  0.4732599  13575.36
##   0.7367347  33350.10  0.4732550  13576.05
##   0.7530612  33350.26  0.4732504  13576.73
##   0.7693878  33350.43  0.4732453  13577.46
##   0.7857143  33350.62  0.4732396  13578.23
##   0.8020408  33350.81  0.4732339  13579.00
##   0.8183673  33351.02  0.4732278  13579.78
##   0.8346939  33351.24  0.4732215  13580.60
##   0.8510204  33351.46  0.4732150  13581.43
##   0.8673469  33351.69  0.4732081  13582.29
##   0.8836735  33351.95  0.4732008  13583.18
##   0.9000000  33352.20  0.4731933  13584.08
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was fraction = 0.1326531.

Podemos ver que, no treino, a fração 0 0.1979592 nos mostra onde o R² é melhor, sendo 0.4693216.

lasso_prediction <- predict(lasso,df %>% select(-setor_economico_receita) %>% select(-cargo) %>% select(-nome) %>% select(-setor_economico_despesa))

lasso_data <- data.frame(pred = lasso_prediction, obs = df$votos)

lasso_cv<- round(defaultSummary(lasso_data),digits = 4)

lasso_cv
##       RMSE   Rsquared        MAE 
## 32000.5435     0.5005 12901.1672

E novamente temos que, no treino, o R²(0.5005) é maior do que a o R² no teste. Se compararmos um teste com o outro, vemos que existe uma pequena diferença do lasso com o Ridge.

KNN

Para esse modelo de regressão, o nome já dá uma dica boa sobre como o algoritmo funciona. As tunagens do “vizinho proximo” se dará exatamente como o nome fala. O knn vai buscar os elementos que estão mais próximos para dar um match em seus resultados, ou seja, se uma icógnita x está mais perto de y do que de z, ela terá o valor y.

Abaixo, vamos tunar o modelo 15 vezes, tirando do estudo as variáveis CARGO, NOME, SETOR_ECONOMICO_RECEITA E SETOR_ECONOMICO_DESPESA:

trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)


knn <- train(votos ~ ., data = df %>% select(-cargo) %>% select(-nome) %>% select(-setor_economico_receita) %>% select(-setor_economico_despesa), 
             method = "knn",
             trControl=trctrl,
             metric='RMSE',
             na.action = na.exclude,
             preProcess = c("center", "scale","nzv"),
             tuneLength = 15)  

knn
## k-Nearest Neighbors 
## 
## 4152 samples
##   21 predictor
## 
## Pre-processing: centered (32), scaled (32), remove (52) 
## Resampling: Cross-Validated (10 fold, repeated 3 times) 
## Summary of sample sizes: 3737, 3737, 3736, 3738, 3738, 3736, ... 
## Resampling results across tuning parameters:
## 
##   k   RMSE      Rsquared   MAE     
##    5  33490.31  0.4470408  11439.13
##    7  32622.26  0.4679075  11282.96
##    9  31931.57  0.4875367  11112.57
##   11  31479.24  0.5012138  11002.69
##   13  31296.52  0.5084339  10967.83
##   15  31279.65  0.5097686  11002.91
##   17  31337.62  0.5081951  11040.33
##   19  31281.23  0.5112507  11052.14
##   21  31331.68  0.5101257  11107.88
##   23  31322.92  0.5114274  11124.55
##   25  31316.18  0.5128829  11133.33
##   27  31376.86  0.5116602  11167.61
##   29  31343.42  0.5141074  11168.97
##   31  31381.90  0.5139913  11191.00
##   33  31393.16  0.5146784  11209.86
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 15.

Fazendo busca pelos vizinhos, uso do knn nos deu K = 21, que nos mostra um RMSE de 31246.24 e um R² de 0.5136776.

knn_prediction <- predict(knn,df %>% select(-setor_economico_receita) %>% select(-cargo) %>% select(-nome) %>% select(-setor_economico_despesa))

knn_data <- data.frame(pred = knn_prediction, obs = df$votos)

knn_show_cv <- round(defaultSummary(knn_data),digits = 4)

knn_show_cv
##       RMSE   Rsquared        MAE 
## 32451.6048     0.4982 10298.6324

Para os dados de teste, o modelo KNN apresenta o R² de 0.4837, sendo um pouco menor que o resultado do lasso e praticamente igual ao resultado do ridge, mas não mostra nenhuma grande diferença entre os dois modelos usados anteriormente.

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

Podemos plotar os gráficos dos três modelos em função de seus RMSE e compará-los:

plot(knn,ylab ="RMSE")

plot(lasso,xlab="Lambda",ylab = "RMSE")

plot(ridge,xlab="Lambda",ylab = "RMSE")

Pelos resultados dos RMES’s dos modelos(32368.5680(RIDGE),33020.6592(KNN),32000.5405(LASSO)) podemos observar que o resultado não apresenta nenhuma grande diferença. Apesar de todos serem muito altos, os modelos se equiparam e não parecem mostrar grande diferença entre um e outro.

Também podemos observar nos gráficos que eles se equiparam quase no mesmo ponto(na variável RMSE)

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

varImp(lasso)
## loess r-squared variable importance
## 
##   only 20 most important variables shown (out of 21)
## 
##                                        Overall
## total_receita                         100.0000
## total_despesa                          97.9650
## quantidade_despesas                    63.6618
## recursos_de_pessoas_juridicas          55.4757
## recursos_de_partidos                   52.1134
## quantidade_doacoes                     49.1278
## quantidade_fornecedores                44.3243
## media_receita                          40.2837
## quantidade_doadores                    37.8452
## recursos_pessoas_fisicas               28.2281
## media_despesa                          23.3008
## recursos_proprios                       9.7776
## sexo                                    5.0992
## grau                                    4.0425
## numero_cadidato                         3.8759
## estado_civil                            2.9368
## idade                                   1.8629
## recursos_de_outros_candidatos.comites   1.6231
## sequencial_candidato                    0.3681
## partido                                 0.2424

Para total_receita(100) temos um resultado interessante: essa é a variável mais importante do nosso modelo lasso(e muito provavelmente do nosso ridge). Vemos que, como no laboratório passado, variáveis que levam em conda arrecadação são as que aparecem no topo da nossa predição. O lasso tira 20 de 21 variáveis, deixando de fora variáveis que não afetam muito o nosso estudo no final de tudo(ficamos com 21 variáveis de 23 usadas)

varImp(ridge)
## loess r-squared variable importance
## 
##   only 20 most important variables shown (out of 23)
## 
##                                        Overall
## total_receita                         100.0000
## total_despesa                          97.9650
## quantidade_despesas                    63.6618
## recursos_de_pessoas_juridicas          55.4757
## recursos_de_partidos                   52.1134
## quantidade_doacoes                     49.1278
## quantidade_fornecedores                44.3243
## media_receita                          40.2837
## quantidade_doadores                    37.8452
## recursos_pessoas_fisicas               28.2281
## media_despesa                          23.3008
## recursos_proprios                       9.7776
## sexo                                    5.0992
## grau                                    4.0425
## numero_cadidato                         3.8759
## estado_civil                            2.9368
## idade                                   1.8629
## recursos_de_outros_candidatos.comites   1.6231
## setor_economico_despesa                 1.2200
## sequencial_candidato                    0.3681

Enquanto o lasso nos mostra 20 num total de 21, o Ridge mostra 20 de 23, ou seja, leva em consideração mais variáveis do que o lasso. Existe uma pequena diferença quando vemos as variáveis que foram escolhidas entre uma e outra, mas nenhuma das mais significativas foi alterada.

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

s

Levando em consideração o “melhor modelo”, como vimos que os resultados são muito similares, vamos usar o lasso sem validação cruzada.

lasso_no_cv <- train(votos ~ ., data = df %>% select(-cargo) %>% select(-nome),
               method='lasso',
               metric='RMSE',
               tuneLength= 50,
               preProcess=c('scale', 'center','nzv')) 


lasso_no_cv
## The lasso 
## 
## 4152 samples
##   23 predictor
## 
## Pre-processing: scaled (34), centered (34), remove (192) 
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 4152, 4152, 4152, 4152, 4152, 4152, ... 
## Resampling results across tuning parameters:
## 
##   fraction   RMSE      Rsquared   MAE     
##   0.1000000  38034.59  0.3887827  17138.22
##   0.1163265  37419.16  0.3906910  16389.84
##   0.1326531  36941.64  0.3945221  15719.39
##   0.1489796  36576.53  0.3982606  15105.98
##   0.1653061  36296.09  0.4019075  14541.66
##   0.1816327  36077.38  0.4060314  14024.75
##   0.1979592  35922.04  0.4097652  13580.15
##   0.2142857  35797.10  0.4132961  13243.43
##   0.2306122  35716.63  0.4161106  12976.78
##   0.2469388  35659.20  0.4184310  12754.50
##   0.2632653  35627.76  0.4206483  12599.66
##   0.2795918  35613.86  0.4225354  12508.02
##   0.2959184  35617.93  0.4239338  12466.14
##   0.3122449  35633.43  0.4250161  12457.16
##   0.3285714  35650.53  0.4257649  12463.05
##   0.3448980  35661.82  0.4263475  12475.61
##   0.3612245  35664.18  0.4269302  12484.48
##   0.3775510  35662.49  0.4275171  12493.83
##   0.3938776  35665.49  0.4279833  12508.37
##   0.4102041  35669.45  0.4284274  12524.40
##   0.4265306  35674.31  0.4288170  12542.98
##   0.4428571  35680.09  0.4291226  12564.33
##   0.4591837  35684.50  0.4294189  12586.32
##   0.4755102  35686.09  0.4297633  12608.00
##   0.4918367  35687.27  0.4300860  12630.75
##   0.5081633  35690.21  0.4303156  12652.66
##   0.5244898  35697.36  0.4304196  12676.75
##   0.5408163  35706.86  0.4304875  12701.65
##   0.5571429  35717.06  0.4305356  12728.64
##   0.5734694  35727.96  0.4305611  12757.32
##   0.5897959  35733.89  0.4306700  12784.15
##   0.6061224  35735.95  0.4308166  12809.35
##   0.6224490  35737.60  0.4309249  12832.86
##   0.6387755  35741.40  0.4309663  12856.28
##   0.6551020  35747.28  0.4309463  12880.77
##   0.6714286  35752.40  0.4309412  12904.28
##   0.6877551  35758.59  0.4309047  12928.87
##   0.7040816  35765.86  0.4308400  12954.54
##   0.7204082  35773.34  0.4307696  12980.66
##   0.7367347  35780.91  0.4306981  13006.14
##   0.7530612  35788.48  0.4306236  13029.82
##   0.7693878  35796.15  0.4305516  13052.47
##   0.7857143  35803.29  0.4304944  13073.81
##   0.8020408  35810.65  0.4304256  13095.31
##   0.8183673  35818.56  0.4303428  13117.55
##   0.8346939  35827.05  0.4302453  13140.44
##   0.8510204  35835.67  0.4301436  13163.24
##   0.8673469  35843.61  0.4300527  13184.85
##   0.8836735  35851.39  0.4299695  13205.86
##   0.9000000  35859.48  0.4298793  13226.98
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was fraction = 0.2795918.

Pelo resultado acima, temos um R² menor quando usamos lasso sem cv, sendo o resultado = 0.4306418.

lasso_pred_no_cv <- predict(lasso_no_cv,df %>% select(-cargo) %>% select(-nome) %>% select(-votos))

lasso.data_no_cv <- data.frame(pred = lasso_pred_no_cv, obs = df$votos)

lasso_show_no_cv <- round(defaultSummary(lasso.data_no_cv),digits = 4)

lasso_show_no_cv
##       RMSE   Rsquared        MAE 
## 33144.9490     0.4654 11903.1701

Como corriqueiro acontecimento no nosso estudo, temos um R² maior nos testes do que no treino.

LASSO R² COM CV = 0.4730139 LASSO R² SEM CV = 0.4306418.

vendo isso, chegamos a conclusão de que, no modelo lasso, quando usamos validação cruzada, os resultados aparentam ser melhores

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

Para essa questão, como temos dois novos data frames para ler, iremos tratar os valores 0 de cada coluna que contenha esse valor, assim como fizemos para o primeiro data frame:

testeKaggle <- read.csv("C:/Users/João Lucas/Desktop/test.csv")



colnames(testeKaggle)[13] <- "recursos_pessoas_fisicas"

media_partidos_testeKaggle <- mean(testeKaggle$recursos_de_partidos, na.rm = TRUE)
testeKaggle$recursos_de_partidos[is.na(testeKaggle$recursos_de_partidos)] <- media_partidos_testeKaggle

media_comites_testeKaggle <- mean(testeKaggle$recursos_de_outros_candidatos.comites, na.rm = TRUE)
testeKaggle$recursos_de_outros_candidatos.comites[is.na(testeKaggle$recursos_de_outros_candidatos.comites)] <- media_comites_testeKaggle

media_proprios_testeKaggle <- mean(testeKaggle$recursos_proprios, na.rm = TRUE)
testeKaggle$recursos_proprios[is.na(testeKaggle$recursos_proprios)] <- media_proprios_testeKaggle

media_fisicas_testeKaggle <- mean(testeKaggle$recursos_pessoas_fisicas, na.rm = TRUE)
testeKaggle$recursos_pessoas_fisicas[is.na(testeKaggle$recursos_pessoas_fisicas)] <- media_fisicas_testeKaggle

media_juridicas_testeKaggle <- mean(testeKaggle$recursos_de_pessoas_juridicas, na.rm = TRUE)
testeKaggle$recursos_de_pessoas_juridicas[is.na(testeKaggle$recursos_de_pessoas_juridicas)] <- media_juridicas_testeKaggle


testeKaggle <-testeKaggle[,-c(6,20)]#tirando as colunas do teste
trainKaggle <- read.csv("C:/Users/João Lucas/Desktop/train.csv")


colnames(trainKaggle)[13] <- "recursos_pessoas_fisicas"

media_partidos_trainKaggle <- mean(trainKaggle$recursos_de_partidos, na.rm = TRUE)
trainKaggle$recursos_de_partidos[is.na(trainKaggle$recursos_de_partidos)] <- media_partidos_trainKaggle

media_comites_trainKaggle <- mean(trainKaggle$recursos_de_outros_candidatos.comites, na.rm = TRUE)
trainKaggle$recursos_de_outros_candidatos.comites[is.na(trainKaggle$recursos_de_outros_candidatos.comites)] <- media_comites_trainKaggle

media_proprios_trainKaggle <- mean(trainKaggle$recursos_proprios, na.rm = TRUE)
trainKaggle$recursos_proprios[is.na(trainKaggle$recursos_proprios)] <- media_proprios_trainKaggle

media_fisicas_trainKaggle <- mean(trainKaggle$recursos_pessoas_fisicas, na.rm = TRUE)
trainKaggle$recursos_pessoas_fisicas[is.na(trainKaggle$recursos_pessoas_fisicas)] <- media_fisicas_trainKaggle

media_juridicas_trainKaggle <- mean(trainKaggle$recursos_de_pessoas_juridicas, na.rm = TRUE)
trainKaggle$recursos_de_pessoas_juridicas[is.na(trainKaggle$recursos_de_pessoas_juridicas)] <- media_juridicas_trainKaggle

trainKaggle <-trainKaggle[,-c(6,21)] # tirando as colunas do train

Feito isso, também vamos tirar duas colunas que não ajudam na nossa predição e que dão erro nos comandos que iremos executar mais abaixo

Para o nosso teste, iremos usar o lasso(modelo mais usado pela sua rapidez e eficiência, além de seus resultados):

lasso_kaggle <- train(votos ~ ., trainKaggle %>% select(-nome) %>% select(-cargo) %>% select(-ID),
               method='lasso',
               metric='RMSE',
               tuneLength = 50,
               preProcess=c('scale', 'center','nzv')) 
               

lasso_kaggle
## The lasso 
## 
## 4152 samples
##   20 predictor
## 
## Pre-processing: scaled (31), centered (31), remove (52) 
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 4152, 4152, 4152, 4152, 4152, 4152, ... 
## Resampling results across tuning parameters:
## 
##   fraction   RMSE      Rsquared   MAE     
##   0.1000000  37986.19  0.3858474  17232.40
##   0.1163265  37342.60  0.3901797  16496.67
##   0.1326531  36838.76  0.3945872  15838.68
##   0.1489796  36458.88  0.3982363  15245.54
##   0.1653061  36153.76  0.4022661  14699.08
##   0.1816327  35923.79  0.4063163  14209.36
##   0.1979592  35741.67  0.4106286  13764.12
##   0.2142857  35611.54  0.4141794  13374.32
##   0.2306122  35525.54  0.4168602  13067.46
##   0.2469388  35463.55  0.4190592  12830.62
##   0.2632653  35422.67  0.4207186  12668.54
##   0.2795918  35398.27  0.4220901  12567.94
##   0.2959184  35369.58  0.4234071  12496.01
##   0.3122449  35341.26  0.4246935  12446.60
##   0.3285714  35315.62  0.4257629  12423.29
##   0.3448980  35295.65  0.4267302  12415.37
##   0.3612245  35281.45  0.4275760  12415.24
##   0.3775510  35273.66  0.4282565  12421.73
##   0.3938776  35267.42  0.4288955  12431.24
##   0.4102041  35265.22  0.4293901  12443.75
##   0.4265306  35263.75  0.4298268  12458.33
##   0.4428571  35257.43  0.4303160  12474.11
##   0.4591837  35248.92  0.4308295  12490.96
##   0.4755102  35242.26  0.4312792  12509.34
##   0.4918367  35234.80  0.4317593  12527.24
##   0.5081633  35223.89  0.4323201  12544.51
##   0.5244898  35215.13  0.4327908  12563.22
##   0.5408163  35207.81  0.4332264  12584.45
##   0.5571429  35201.59  0.4336371  12607.85
##   0.5734694  35196.37  0.4340099  12633.61
##   0.5897959  35191.63  0.4343509  12660.78
##   0.6061224  35190.72  0.4345772  12687.09
##   0.6224490  35190.69  0.4347709  12711.91
##   0.6387755  35188.39  0.4349836  12734.19
##   0.6551020  35185.86  0.4351966  12755.89
##   0.6714286  35184.28  0.4353754  12775.26
##   0.6877551  35185.74  0.4354653  12795.38
##   0.7040816  35188.05  0.4355332  12816.06
##   0.7204082  35190.69  0.4355949  12837.09
##   0.7367347  35192.49  0.4356713  12857.69
##   0.7530612  35194.38  0.4357407  12879.01
##   0.7693878  35197.53  0.4357824  12900.33
##   0.7857143  35200.35  0.4358170  12920.15
##   0.8020408  35203.05  0.4358568  12938.47
##   0.8183673  35205.88  0.4358936  12956.48
##   0.8346939  35208.89  0.4359271  12974.33
##   0.8510204  35212.37  0.4359489  12992.56
##   0.8673469  35216.20  0.4359617  13009.94
##   0.8836735  35220.50  0.4359629  13027.67
##   0.9000000  35225.31  0.4359520  13045.74
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was fraction = 0.6714286.

Na fração dada, o R² para os treino proposto no Kaggle é: 0.4361305. Se compararmos com o modelo da questão 4, veremos que o resultado é bastante próximo um do outro.

Abaixo, iremos usar o predict com os testes do kaggle, gerando um arquivo para ser submetido na competição sugerida pelo professor

lasso_kaggle_predict <- predict(lasso_kaggle,testeKaggle %>% select(-ID))

lasso_kaggle_data <- data.frame(id = testeKaggle$ID,votos = lasso_kaggle_predict)

write.csv(lasso_kaggle_data,"lasso_kaggle.csv",row.names = F)

exampleJoao_lasso <- read.csv("C:/Users/João Lucas/Documents/ad2/Lab4/lasso_kaggle.csv")

exampleVotos <-abs(exampleJoao_lasso$votos) #ajuste para poder upar o arquivo no kaggle

lasso_kaggle_example <- data.frame(id = testeKaggle$ID, votos = exampleVotos)

write.csv(lasso_kaggle_example,"lasso_kaggle_example.csv",row.names = F)

example_Joao_lasso <- read.csv("C:/Users/João Lucas/Documents/ad2/Lab4/lasso_kaggle_example.csv")