Uma análise sobre a votação dos deputados

Esta análise foi feita para a atividade de Laboratório 2 da cadeira de Análise de Dados 2 da UFCG.

Configurando nosso dataset, referente aos dados das eleições para deputado de 2010 e 2006.

eleicoes_06_10 <- read_csv(here("./data/eleicoes_2006_e_2010.csv"),
                     local=readr::locale("br"),
                     col_types = cols(ano = col_integer(),
                                      sequencial_candidato = col_character(),
                                      quantidade_doacoes = col_integer(),
                                      quantidade_doadores = col_integer(),
                                      total_receita = col_double(),
                                      media_receita = col_double(),
                                      recursos_de_outros_candidatos.comites = col_double(),
                                      recursos_de_pessoas_fisicas = col_double(),
                                      recursos_de_pessoas_juridicas = col_double(),
                                      recursos_proprios = col_double(),
                                      recursos_de_partido_politico = col_double(),
                                      quantidade_despesas = col_integer(),
                                      quantidade_fornecedores = col_integer(),
                                      total_despesa = col_double(),
                                      media_despesa = col_double(),
                                      votos = col_integer(),
                                      .default = col_character()))

Ajustando os dados para evitar leituras incorretas:

correct <- function(value) {
  adjusted <- replace(value,
                          is.na(value),
                          median(value, na.rm = TRUE))
  return(adjusted)
}

eleicoes_06_10$votos <- correct(eleicoes_06_10$votos)
eleicoes_06_10$total_receita <- correct(eleicoes_06_10$total_receita)
eleicoes_06_10$media_receita <- correct(eleicoes_06_10$media_receita)
eleicoes_06_10$total_despesa <- correct(eleicoes_06_10$total_despesa)
eleicoes_06_10$media_despesa <- correct(eleicoes_06_10$media_despesa)
eleicoes_06_10$recursos_proprios <- correct(eleicoes_06_10$recursos_proprios)
eleicoes_06_10$quantidade_doacoes <- correct(eleicoes_06_10$quantidade_doacoes)
eleicoes_06_10$quantidade_doadores <- correct(eleicoes_06_10$quantidade_doadores)
eleicoes_06_10$quantidade_despesas <- correct(eleicoes_06_10$quantidade_despesas)
eleicoes_06_10$quantidade_fornecedores <- correct(eleicoes_06_10$quantidade_fornecedores)
eleicoes_06_10$recursos_de_pessoas_fisicas <- correct(eleicoes_06_10$recursos_de_pessoas_fisicas)
eleicoes_06_10$recursos_de_partido_politico <- correct(eleicoes_06_10$recursos_de_partido_politico)
eleicoes_06_10$recursos_de_pessoas_juridicas <- correct(eleicoes_06_10$recursos_de_pessoas_juridicas)
eleicoes_06_10$recursos_de_outros_candidatos.comites <- correct(eleicoes_06_10$recursos_de_outros_candidatos.comites)

1. Um modelo de regressão múltipla com todas as variáveis é plausível para explicar a variação em y (número de votos) em 2006? Mesma pergunta para 2010.

Nesse caso, é necessário entender qua algumas variáveis não podem ser incluídas no modelo. Levaremos em conta as variáveis categóricas, gerando fatores para as que são possíveis.

eleicoes_06_10$sexo <- as.factor(eleicoes_06_10$sexo)
eleicoes_06_10$grau <- as.factor(eleicoes_06_10$grau)
eleicoes_06_10$estado_civil <- as.factor(eleicoes_06_10$estado_civil)

eleicoes_06_10_clean <- eleicoes_06_10 %>% 
  select(-sequencial_candidato,
         -nome,
         -cargo,
         -uf,
         -ocupacao,
         -partido)

eleicoes_06 <- eleicoes_06_10_clean %>% 
  filter(ano == 2006) %>% 
  select(-ano)

eleicoes_10 <- eleicoes_06_10_clean %>% 
  filter(ano == 2010) %>% 
  select(-ano)

eleicoes_06_10_clean <- eleicoes_06_10_clean %>% 
  select(-ano)

Criando os modelos para cada ano:

2006

modelo_06 <- lm(votos ~ ., data = eleicoes_06)
summary(modelo_06)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_06)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -229609   -7765   -4269     316  639006 
## 
## Coefficients: (1 not defined because of singularities)
##                                          Estimate  Std. Error t value
## (Intercept)                           -2344.54018  2854.04594  -0.821
## quantidade_doacoes                      -81.16645   124.31520  -0.653
## quantidade_doadores                     344.76013   134.27772   2.568
## total_receita                            -0.10483     0.02190  -4.786
## media_receita                             1.18178     0.10479  11.278
## recursos_de_outros_candidatos.comites     0.04085     0.02354   1.735
## recursos_de_pessoas_fisicas               0.16117     0.02227   7.238
## recursos_de_pessoas_juridicas             0.07479     0.01821   4.106
## recursos_proprios                         0.01125     0.01871   0.601
## recursos_de_partido_politico                   NA          NA      NA
## quantidade_despesas                     -22.28036     9.83209  -2.266
## quantidade_fornecedores                  -5.84784    13.04464  -0.448
## total_despesa                             0.13556     0.01305  10.390
## media_despesa                             0.83273     0.41977   1.984
## sexoMASCULINO                          3576.19710  1697.55002   2.107
## grauENSINO FUNDAMENTAL INCOMPLETO       173.87759  3935.00516   0.044
## grauENSINO MÉDIO COMPLETO              2285.18281  2575.75139   0.887
## grauENSINO MÉDIO INCOMPLETO            -221.33777  4107.14899  -0.054
## grauLÊ E ESCREVE                       7934.71063 13107.77656   0.605
## grauSUPERIOR COMPLETO                  5268.28286  2381.95860   2.212
## grauSUPERIOR INCOMPLETO                3566.32817  2807.76079   1.270
## estado_civilDIVORCIADO(A)             -2416.05028  1841.46343  -1.312
## estado_civilSEPARADO(A) JUDICIALMENTE -1207.23588  2542.75582  -0.475
## estado_civilSOLTEIRO(A)               -1088.09107  1464.20827  -0.743
## estado_civilVIÚVO(A)                  -2462.36999  4409.18550  -0.558
##                                                   Pr(>|t|)    
## (Intercept)                                         0.4114    
## quantidade_doacoes                                  0.5139    
## quantidade_doadores                                 0.0103 *  
## total_receita                            0.000001769467371 ***
## media_receita                         < 0.0000000000000002 ***
## recursos_de_outros_candidatos.comites               0.0828 .  
## recursos_de_pessoas_fisicas              0.000000000000561 ***
## recursos_de_pessoas_juridicas            0.000041118601874 ***
## recursos_proprios                                   0.5479    
## recursos_de_partido_politico                            NA    
## quantidade_despesas                                 0.0235 *  
## quantidade_fornecedores                             0.6540    
## total_despesa                         < 0.0000000000000002 ***
## media_despesa                                       0.0474 *  
## sexoMASCULINO                                       0.0352 *  
## grauENSINO FUNDAMENTAL INCOMPLETO                   0.9648    
## grauENSINO MÉDIO COMPLETO                           0.3750    
## grauENSINO MÉDIO INCOMPLETO                         0.9570    
## grauLÊ E ESCREVE                                    0.5450    
## grauSUPERIOR COMPLETO                               0.0271 *  
## grauSUPERIOR INCOMPLETO                             0.2041    
## estado_civilDIVORCIADO(A)                           0.1896    
## estado_civilSEPARADO(A) JUDICIALMENTE               0.6350    
## estado_civilSOLTEIRO(A)                             0.4575    
## estado_civilVIÚVO(A)                                0.5766    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 31620 on 3412 degrees of freedom
## Multiple R-squared:  0.5198, Adjusted R-squared:  0.5166 
## F-statistic: 160.6 on 23 and 3412 DF,  p-value: < 0.00000000000000022

2010

modelo_10 <- lm(votos ~ ., data = eleicoes_10)
summary(modelo_10)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_10)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -214872   -8966   -5717   -1208 1259110 
## 
## Coefficients: (1 not defined because of singularities)
##                                           Estimate   Std. Error t value
## (Intercept)                            5000.561102  2812.429116   1.778
## quantidade_doacoes                       33.791192    54.008889   0.626
## quantidade_doadores                     -17.559335    62.633273  -0.280
## total_receita                            -0.007507     0.009485  -0.791
## media_receita                            -0.187087     0.053851  -3.474
## recursos_de_outros_candidatos.comites     0.005524     0.006080   0.909
## recursos_de_pessoas_fisicas               0.046215     0.010023   4.611
## recursos_de_pessoas_juridicas            -0.004655     0.005551  -0.838
## recursos_proprios                        -0.030676     0.004974  -6.167
## recursos_de_partido_politico                    NA           NA      NA
## quantidade_despesas                      13.244731     9.108243   1.454
## quantidade_fornecedores                 -30.471272    11.120555  -2.740
## total_despesa                             0.085623     0.009973   8.586
## media_despesa                             0.143830     0.089486   1.607
## sexoMASCULINO                          2259.128142  1632.707232   1.384
## grauENSINO FUNDAMENTAL INCOMPLETO     -1651.436972  4488.464503  -0.368
## grauENSINO MÉDIO COMPLETO               -28.190337  2671.315461  -0.011
## grauENSINO MÉDIO INCOMPLETO           -1309.276787  4118.825047  -0.318
## grauLÊ E ESCREVE                      46293.012979  7644.068148   6.056
## grauSUPERIOR COMPLETO                  5072.342928  2482.955003   2.043
## grauSUPERIOR INCOMPLETO                 689.543616  2922.177140   0.236
## estado_civilDIVORCIADO(A)             -3376.715682  1974.878361  -1.710
## estado_civilSEPARADO(A) JUDICIALMENTE -4171.562479  3185.752880  -1.309
## estado_civilSOLTEIRO(A)               -3745.531781  1484.916728  -2.522
## estado_civilVIÚVO(A)                  -6211.927331  4426.146028  -1.403
##                                                   Pr(>|t|)    
## (Intercept)                                       0.075476 .  
## quantidade_doacoes                                0.531574    
## quantidade_doadores                               0.779222    
## total_receita                                     0.428715    
## media_receita                                     0.000518 ***
## recursos_de_outros_candidatos.comites             0.363576    
## recursos_de_pessoas_fisicas                 0.000004137622 ***
## recursos_de_pessoas_juridicas                     0.401838    
## recursos_proprios                           0.000000000766 ***
## recursos_de_partido_politico                            NA    
## quantidade_despesas                               0.145984    
## quantidade_fornecedores                           0.006169 ** 
## total_despesa                         < 0.0000000000000002 ***
## media_despesa                                     0.108071    
## sexoMASCULINO                                     0.166536    
## grauENSINO FUNDAMENTAL INCOMPLETO                 0.712945    
## grauENSINO MÉDIO COMPLETO                         0.991581    
## grauENSINO MÉDIO INCOMPLETO                       0.750595    
## grauLÊ E ESCREVE                            0.000000001523 ***
## grauSUPERIOR COMPLETO                             0.041131 *  
## grauSUPERIOR INCOMPLETO                           0.813469    
## estado_civilDIVORCIADO(A)                         0.087374 .  
## estado_civilSEPARADO(A) JUDICIALMENTE             0.190459    
## estado_civilSOLTEIRO(A)                           0.011695 *  
## estado_civilVIÚVO(A)                              0.160556    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37060 on 4016 degrees of freedom
## Multiple R-squared:  0.4439, Adjusted R-squared:  0.4407 
## F-statistic: 139.4 on 23 and 4016 DF,  p-value: < 0.00000000000000022

Para os valores de p-valor nos dois modelos construídos, precebe-se que y depende de muitas das outras variáveis, mas algumas não são significativas nesse processo. Além disso, o R² é baixo, o que indica que o modelo com todas as variáveis não é tão bom para explicar y.

2. Compare as regressões construídas para 2006 e 2010. Quais as diferenças/semelhanças percebidas?

Modelo do ano de 2006

plot_06 <- ggplot(modelo_06, aes(.fitted, .resid)) + geom_point()
plot_06 <- plot_06 + geom_hline(yintercept=0, col="red")
plot_06 <- plot_06 + xlab("Valores Ajustados") + ylab("Resíduos")
plot_06 <- plot_06 + ggtitle("Resíduos vs Ajustamento") + theme_bw()
plot_06

Modelo do ano de 2010

plot_10 <- ggplot(modelo_10, aes(.fitted, .resid)) + geom_point()
plot_10 <- plot_10 + geom_hline(yintercept=0, col="blue")
plot_10 <- plot_10 + xlab("Valores Ajustados") + ylab("Resíduos")
plot_10 <- plot_10 + ggtitle("Resíduos vs Ajustamento") + theme_bw()
plot_10

É possível identificar tendências nos dois modelos, embora os erros não sejam distribuídos uniformemente nos dois casos.

3. Todas as variáveis são úteis para os modelos de regressão? Há variáveis redudantes? Faça análises para 2006 e 2010 separadamente.

Analisando o sumário podemos identificar o nível de significãncia das variáveis.

sequencia_candidato, nome, uf, partido, quantidade_doacoes, quantidadade_fornecedores, recursos_proprios, recursos_de_partido_politico, cargo e estado_civil tem pouca influência sobre o resultado do voto nas duas eleições.


Agora utilizaremos um correlograma para identificar as variáveis redundantes:

## 
## Attaching package: 'GGally'
## The following object is masked from 'package:dplyr':
## 
##     nasa

2006

ggcorr(eleicoes_06)
## Warning in ggcorr(eleicoes_06): data in column(s) 'sexo', 'grau',
## 'estado_civil' are not numeric and were ignored

2010

ggcorr(eleicoes_10)
## Warning in ggcorr(eleicoes_10): data in column(s) 'sexo', 'grau',
## 'estado_civil' are not numeric and were ignored

Analisando os gráficos, percebe-se que total_receita, recursos_pessoa_jurídica e total_despesas são redundantes.

4. No caso de haver variáveis pouco explicativas e/ou redudantes, construa um novo modelo sem essas variáveis e o compare ao modelo com todas as variáveis (e.g. em termos de R2 e RSE). Faça isso para 2006 e 2010 separadamente.

Para isso analisamos o sumário dos dois modelos a fim de encontrar as variáveis mais relevantes.

2006

Para prever os votos, percebe-se-se que total_receita, media_receita e recurso_de_pessoas_fisicas são mais significativas.

otimizado_06 <- lm(votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, eleicoes_06)

summary(otimizado_06)
## 
## Call:
## lm(formula = votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, 
##     data = eleicoes_06)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -280717   -8739   -7584   -1273  650503 
## 
## Coefficients:
##                                Estimate  Std. Error t value
## (Intercept)                 8388.638769  669.772798  12.525
## total_receita                  0.078913    0.003344  23.601
## media_receita                  0.615930    0.091587   6.725
## recursos_de_pessoas_fisicas    0.152786    0.014098  10.837
##                                         Pr(>|t|)    
## (Intercept)                 < 0.0000000000000002 ***
## total_receita               < 0.0000000000000002 ***
## media_receita                    0.0000000000205 ***
## recursos_de_pessoas_fisicas < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 34410 on 3432 degrees of freedom
## Multiple R-squared:  0.428,  Adjusted R-squared:  0.4275 
## F-statistic:   856 on 3 and 3432 DF,  p-value: < 0.00000000000000022

Analisando os resíduos:

plot_otimizado_06 <- ggplot(otimizado_06, aes(.fitted, .resid)) + geom_point()
plot_otimizado_06 <- plot_otimizado_06 + geom_hline(yintercept=0, col="red")
plot_otimizado_06 <- plot_otimizado_06 + xlab("Valores Ajustados") + ylab("Resíduos")
plot_otimizado_06 <- plot_otimizado_06 + ggtitle("Resíduos vs Ajustamento") + theme_bw()
plot_otimizado_06

Para 2006, é possível ver uma distribuição não aleatória de residuos.

2010

Para prever os votos, percebe-se-se que total_receita, media_receita e recurso_de_pessoas_fisicas são mais significativas.

otimizado_10 <- lm(votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, eleicoes_10)

summary(otimizado_10)
## 
## Call:
## lm(formula = votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, 
##     data = eleicoes_10)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -230341   -8620   -7853   -3663 1309732 
## 
## Coefficients:
##                                Estimate  Std. Error t value
## (Intercept)                 8813.795569  670.745440  13.140
## total_receita                  0.052267    0.001562  33.458
## media_receita                 -0.064782    0.042015  -1.542
## recursos_de_pessoas_fisicas    0.068261    0.009266   7.366
##                                         Pr(>|t|)    
## (Intercept)                 < 0.0000000000000002 ***
## total_receita               < 0.0000000000000002 ***
## media_receita                              0.123    
## recursos_de_pessoas_fisicas    0.000000000000211 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 38350 on 4036 degrees of freedom
## Multiple R-squared:  0.4015, Adjusted R-squared:  0.4011 
## F-statistic: 902.6 on 3 and 4036 DF,  p-value: < 0.00000000000000022

Analisando os resíduos:

plot_otimizado_10 <- ggplot(otimizado_10, aes(.fitted, .resid)) + geom_point()
plot_otimizado_10 <- plot_otimizado_10 + geom_hline(yintercept=0, col="blue")
plot_otimizado_10 <- plot_otimizado_10 + xlab("Valores Ajustados") + ylab("Resíduos")
plot_otimizado_10 <- plot_otimizado_10 + ggtitle("Resíduos vs Ajustamento") + theme_bw()
plot_otimizado_10

Em 2010, também é possível ver uma distribuição não aleatória de residuos.


Em 2006, o RSE era 31620, com o modelo otimizado passou a ser 34410. O R² era 0.5166, passou a ser 0.4275. No caso de 2010, o RSE era 37060, com o modelo otimizado passou a ser 38350. O R² era 0.4407, passou ser 0.4011.

5. Construa agora uma regressão considerando os anos 2006 e 2010 em conjunto. Que diferenças/semelhanças você percebe em relação aos modelos individuais por ano? Veja a questão 2 para sugestões que você usar para comparação.

modelo_final <- lm(votos ~ ., data = eleicoes_06_10_clean)

summary(modelo_final)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_06_10_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -346132  -10502   -6243    -846 1279363 
## 
## Coefficients: (1 not defined because of singularities)
##                                           Estimate   Std. Error t value
## (Intercept)                            2854.746423  2105.066552   1.356
## quantidade_doacoes                      -80.533704    48.451294  -1.662
## quantidade_doadores                     134.928675    55.916600   2.413
## total_receita                            -0.042665     0.007831  -5.448
## media_receita                             0.144436     0.047120   3.065
## recursos_de_outros_candidatos.comites     0.017436     0.005749   3.033
## recursos_de_pessoas_fisicas               0.094933     0.008534  11.124
## recursos_de_pessoas_juridicas             0.040923     0.004767   8.585
## recursos_proprios                        -0.004265     0.004561  -0.935
## recursos_de_partido_politico                    NA           NA      NA
## quantidade_despesas                      14.078539     6.668226   2.111
## quantidade_fornecedores                 -38.532198     8.310766  -4.636
## total_despesa                             0.095243     0.007923  12.022
## media_despesa                            -0.082546     0.084481  -0.977
## sexoMASCULINO                          3411.082170  1235.990571   2.760
## grauENSINO FUNDAMENTAL INCOMPLETO      -814.373190  3151.679995  -0.258
## grauENSINO MÉDIO COMPLETO              1815.722410  1963.038042   0.925
## grauENSINO MÉDIO INCOMPLETO            -985.178511  3070.370421  -0.321
## grauLÊ E ESCREVE                      39987.370904  6662.166785   6.002
## grauSUPERIOR COMPLETO                  7679.069180  1816.930638   4.226
## grauSUPERIOR INCOMPLETO                3350.052739  2143.299632   1.563
## estado_civilDIVORCIADO(A)             -3471.939959  1429.550496  -2.429
## estado_civilSEPARADO(A) JUDICIALMENTE -2109.418498  2134.104574  -0.988
## estado_civilSOLTEIRO(A)               -3880.767083  1099.220665  -3.530
## estado_civilVIÚVO(A)                  -5425.602224  3294.711612  -1.647
##                                                   Pr(>|t|)    
## (Intercept)                                       0.175099    
## quantidade_doacoes                                0.096523 .  
## quantidade_doadores                               0.015844 *  
## total_receita                                0.00000005252 ***
## media_receita                                     0.002183 ** 
## recursos_de_outros_candidatos.comites             0.002430 ** 
## recursos_de_pessoas_fisicas           < 0.0000000000000002 ***
## recursos_de_pessoas_juridicas         < 0.0000000000000002 ***
## recursos_proprios                                 0.349747    
## recursos_de_partido_politico                            NA    
## quantidade_despesas                               0.034781 *  
## quantidade_fornecedores                      0.00000360534 ***
## total_despesa                         < 0.0000000000000002 ***
## media_despesa                                     0.328552    
## sexoMASCULINO                                     0.005798 ** 
## grauENSINO FUNDAMENTAL INCOMPLETO                 0.796110    
## grauENSINO MÉDIO COMPLETO                         0.355019    
## grauENSINO MÉDIO INCOMPLETO                       0.748321    
## grauLÊ E ESCREVE                             0.00000000204 ***
## grauSUPERIOR COMPLETO                        0.00002402968 ***
## grauSUPERIOR INCOMPLETO                           0.118087    
## estado_civilDIVORCIADO(A)                         0.015177 *  
## estado_civilSEPARADO(A) JUDICIALMENTE             0.322973    
## estado_civilSOLTEIRO(A)                           0.000417 ***
## estado_civilVIÚVO(A)                              0.099649 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 36390 on 7452 degrees of freedom
## Multiple R-squared:  0.4202, Adjusted R-squared:  0.4184 
## F-statistic: 234.8 on 23 and 7452 DF,  p-value: < 0.00000000000000022

Identifica-se que apesar de algumas variáveis pontuais possuirem um grau de significância maior, não hou uma grande alteração.

Agora analisaremos a distribuição dos resíduos:

plot_modelo_final <- ggplot(modelo_final, aes(.fitted, .resid)) + geom_point()
plot_modelo_final <- plot_modelo_final + geom_hline(yintercept=0, col="orange")
plot_modelo_final <- plot_modelo_final + xlab("Valores Ajustados") + ylab("Resíduos")
plot_modelo_final <- plot_modelo_final + ggtitle("Resíduos vs Ajustamento") + theme_bw()
plot_modelo_final

***

qqnorm(modelo_final$residuals)
qqline(modelo_final$residuals, col = "orange", lwd = 2, lty = 2)

A distribuição dos resíduos no modelo final não é aleatória nem normal, assim como nos modelos de cada ano.