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"
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
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.
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)
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.
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
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")