Nesse laboratório iremos explorar dados sobre as votações de candidatos a deputados federais em eleições, mais especificamenente nos anos de 2006 e 2010. Os dados servirão como base para utilizarmos regressão linear e tentar explicar essas votações. Eles foram extraídos do TSE e englobam cerca de 7300 candidatos. As variáveis serão listadas abaixo e a maioria é auto explicativa, mas quando necessário examinaremos melhor determinada característica. O objetivo é responder um conjunto de cinco perguntas, todas referente ao conjunto de dados descrito.

Entendendo os dados


O conjunto de dados é descrito por:

  • sequencial_candidato: (character) id do candidato
  • nome: (character)
  • uf: (character)
  • partido: (character)
  • quantidade_doacoes: (integer)
  • quantidade_doadores: (integer) número de doadores diferentes
  • total_receita: (double) soma em R$ das doações
  • media_receita: (double) média das doações
  • recursos_de_outros_candidatos/comites: (double) quantia em R$ das doações provenientes de outros candidatos ou comite partidário
  • recursos_de_pessoas_fisicas: (double) quantia em R$ das doações provenientes de outros CPFs
  • recursos_de_pessoas_juridicas: (double) quantia em R$ das doações provenientes de outros CNPJ
  • recursos_proprios: (double) quantia em R$ das doações provenientes do próprio candidato
  • recursos_de_partido_politico: (double) quantia em R$ das doações provenientes do partido político do candidato
  • votos: (integer) variável alvo. Se refere ao número de votos na campanha de 2006 e 2010
  • quantidade_despesas: (integer)
  • quantidade_fornecedores: (integer) número de fornecedores/despesas diferentes
  • total_despesa: (double) soma em R$ das despesas de campanha
  • media_despesa: (double) média das despesas de campanha
  • cargo: (character)
  • Sexo: (character)
  • grau: (character) grau de instrução do candidato
  • estado_civil: (character)
  • ocupacao: (character) ocupação do candidato

Os dados serão importados e os valores faltantes serão tratados. Após isso, serão gerados histogramas para ajudar o entendimento da distribuição de algumas variáveis, nesse caso serão obervadas apenas as numéricas. Esses dados serão dispostos com o eixo x na escala logarítmica, minimizando a situação de concentração de valores em uma determinada porção do gráfico. Assim, é possível visualizar a disposição dos dados em torno de algum valor (ou não).

eleicoes_all %>% 
  select(-ano) %>% 
  melt() %>% 
  ggplot(aes(x = value)) +
  facet_wrap(~variable, scales = "free_x") +
  geom_histogram() + scale_x_log10()

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.


Um modelo de regressão linear múltipla será gerado utilizando todas as variavéis para tentar explicar o número de votos, excluindo as variáveis categoricas.

eleicoes.2006.input <- eleicoes_all %>% 
  filter(ano == 2006) %>% 
  select(-ano) %>% 
  select_if(is.numeric)

model.2006 <- lm(votos ~., data = eleicoes.2006.input)

summary(model.2006)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes.2006.input)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -230946   -7027   -4513    -755  640474 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                           3849.23177  711.29486   5.412 6.68e-08 ***
## quantidade_doacoes                     -78.17668  124.32531  -0.629  0.52952    
## quantidade_doadores                    348.53029  134.28877   2.595  0.00949 ** 
## total_receita                           -0.10614    0.02189  -4.849 1.30e-06 ***
## media_receita                            1.21160    0.10431  11.616  < 2e-16 ***
## recursos_de_outros_candidatos.comites    0.04121    0.02354   1.751  0.08003 .  
## recursos_de_pessoas_fisicas              0.16280    0.02227   7.309 3.33e-13 ***
## recursos_de_pessoas_juridicas            0.07512    0.01821   4.126 3.78e-05 ***
## recursos_proprios                        0.01165    0.01871   0.623  0.53348    
## recursos_de_partido_politico                  NA         NA      NA       NA    
## quantidade_despesas                    -24.82152    9.77795  -2.539  0.01118 *  
## quantidade_fornecedores                 -2.55591   12.98837  -0.197  0.84401    
## total_despesa                            0.13696    0.01305  10.497  < 2e-16 ***
## media_despesa                            0.85615    0.41968   2.040  0.04143 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 31650 on 3423 degrees of freedom
## Multiple R-squared:  0.5173, Adjusted R-squared:  0.5156 
## F-statistic: 305.7 on 12 and 3423 DF,  p-value: < 2.2e-16

Considerando os dados de votação do ano de 2006, o modelo gerado apresenta um R² ajustado de 0.5156. Como trata-se se um modelo de regressão múltipla, a utilização dessa estatística é mais adequada do que o o R² normal, já que esse valor sofrerá penalizações de acordo com a quantidade de variáveis incluídas no modelo. Essa medida descreve a proporção de variação do modelo, em um intervalo fechado de 0 e 1. Para esse exemplo, o valor observado diz respeito a quão bem o modelo utilizando todas as variáveis consegue explicar o número de votos. Quanto mais próximo a 1 forem os valores do R², melhor o modelo explica a variação na variável dependente. Então podemos dizer que o modelo com todas as variáveis explica cerca de 51% do número de votos de um candidato, o que não é nem ruim nem muito bom.
Outro ponto de observação é o alto valor para os p-valores de algumas variáveis. O p-valor refere-se a probabilidade de existir uma relação por chance entre variável dependente e a variável independente do modelo (ou alguma delas). Nesse caso é desejável que esse número seja baixo, indicando que a relação não ocorre por chance e é relevante para o modelo. quantidade_doacoes, recursos_proprios, recursos_de_partido_politico e quantidade_fornecedores apresentam medidas relativamente altas, demonstrando que esses parâmetros não são expressivos para o modelo, enquanto os outros são representativos.

eleicoes.2010.input <- eleicoes_all %>% 
  filter(ano == 2010) %>% 
  select(-ano) %>% 
  select_if(is.numeric)

model.2010 <- lm(votos ~., data = eleicoes.2010.input)

summary(model.2010)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes.2010.input)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -219016   -8139   -7332   -3207 1303897 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                            8.280e+03  6.576e+02  12.591  < 2e-16 ***
## quantidade_doacoes                     3.620e+01  5.437e+01   0.666  0.50557    
## quantidade_doadores                   -1.950e+01  6.305e+01  -0.309  0.75716    
## total_receita                         -9.492e-03  9.537e-03  -0.995  0.31964    
## media_receita                         -1.782e-01  5.413e-02  -3.292  0.00100 ** 
## recursos_de_outros_candidatos.comites  5.289e-03  6.116e-03   0.865  0.38715    
## recursos_de_pessoas_fisicas            4.937e-02  1.006e-02   4.908 9.57e-07 ***
## recursos_de_pessoas_juridicas         -4.065e-03  5.583e-03  -0.728  0.46661    
## recursos_proprios                     -3.052e-02  5.004e-03  -6.099 1.17e-09 ***
## recursos_de_partido_politico                  NA         NA      NA       NA    
## quantidade_despesas                    1.452e+01  9.158e+00   1.585  0.11303    
## quantidade_fornecedores               -3.209e+01  1.118e+01  -2.871  0.00411 ** 
## total_despesa                          8.840e-02  1.002e-02   8.821  < 2e-16 ***
## media_despesa                          1.418e-01  9.005e-02   1.575  0.11540    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37320 on 4027 degrees of freedom
## Multiple R-squared:  0.4345, Adjusted R-squared:  0.4328 
## F-statistic: 257.8 on 12 and 4027 DF,  p-value: < 2.2e-16

De maneira análoga, o modelo gerado para o ano de 2010 produz os resultados acima. Nesse caso, o R² ajustado explica cerca de 43% dos dados e é menos representativo do que o modelo anterior. Em relação aos p-valores das variáveis, observa-se que a quantidade de variáveis que não são utéis aumentou em relação ao modelo para a votação de 2006. Nesse caso, o recomendável é a produção de um novo modelo e a seleção de novos parâmetros.

2.

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


Comparação utilizando p-valor

  • Algumas informações de p-valores foram produzidas na questão anterior e utilizaremos essas informações de modo a determinar quais variáveis explicam melhor o número de votos. Comprarando esses valores em relação a cada um dos modelos, temos que media_receita, recursos_de_pessoas_fisicas e total_despesa são as variáveis/parâmetros que melhor explicam a quantidade de votos, para ambos os casos. Entretanto, algumas variáveis deixaram ou se tornaram úteis de uma eleição para a outra: quantidade_doadores, total_receita e recursos_de_pessoas_juridicas são exemplos de parâmetros úteis para explicar a quantidade de votos em 2006 e que na eleição seguinte perderam a importância. Da mesma forma, quantidade_fornecedores e recursos_proprios são exemplos de variáveis que tornaram-se importantes.

Comparação analisando resíduos

Observando os gráficos 1 e 3, verifica-se que os dados estão dispersos e pouco simétricos em relação a linha pontilhada. Isso é um indicativo de que o modelo não está muito bom. Entretanto, se relembrarmos dos valores de R² encontrados anteriormente, há uma quantidade razoável de pontos que está próximo a linha e nos mostra que podem existir algumas variáveis que são adequadas para o modelo. Já analisando os gráficos 2 e 4, observamos que os dados estão aglomerados em uma faixa de valores. Isso indica a existência de algum padrão e evidenciando algum problema com relação ao modelo.
De maneira geral os gráficos por ano são parecidos, apesar dos gráfico 3 e 4 - correspondente ao ano de 2010 - indicarem que o modelo é um pouco melhor por não estar tão disperso.

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.

eleicoes.2006.input %>% 
  rename(rec_outros_cand.comites = recursos_de_outros_candidatos.comites) %>% 
  rename(rec_pess_jur = recursos_de_pessoas_juridicas) %>%
  rename(rec_pess_fis = recursos_de_pessoas_fisicas) %>% 
  rename(rec_part_pol = recursos_de_partido_politico) %>% 
  cor() %>% 
  corrplot(
    method = "number",
    type = "full",
    tl.srt = 45,
    tl.col = "black",
    tl.cex = 0.7,
    tl.offset = 0.5,
    number.cex = 0.70
  )

O gráfico da matriz de correlação para os dados de eleição do ano de 2006 incluem somente os valores utilizados na contrução do modelo. total_receita possui uma correção alta com boa parte das variáveis. O mesmo acontece com total_despesa. Essas variáveis são boas candidatas para não fazerem parte do modelo.

eleicoes.2010.input %>% 
  rename(rec_outros_cand.comites = recursos_de_outros_candidatos.comites) %>% 
  rename(rec_pess_jur = recursos_de_pessoas_juridicas) %>%
  rename(rec_pess_fis = recursos_de_pessoas_fisicas) %>% 
  rename(rec_part_pol = recursos_de_partido_politico) %>% 
  cor() %>% 
  corrplot(
    method = "number",
    type = "full",
    tl.srt = 45,
    tl.col = "black",
    tl.cex = 0.7,
    tl.offset = 0.5,
    number.cex = 0.70
  )

Para a matriz de 2010, total_receita e total_despesa continuam apresentando uma alta correlação com as outras variáveis. Entretanto, incluir quantidade_despesas e quantidade_fornecedorespode ser uma boa ideia, visto que elas também apresentam o mesmo problema das anteriores.

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.

Anteriormente observamos as variáveis que são candidatas a serem removidas do modelo de 2006. Isso foi observado por meio da matriz de correlação ou também por meio do p-valor próximo de 1.

eleicoes.2006.filtered <- eleicoes.2006.input %>% 
  select(-quantidade_doacoes, -recursos_proprios, -recursos_de_partido_politico, -quantidade_fornecedores, -total_receita, -total_despesa)

model.2006.filtered <- lm(votos ~., data = eleicoes.2006.filtered)

summary(model.2006.filtered)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes.2006.filtered)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -259142   -7309   -4417    -943  629971 
## 
## Coefficients:
##                                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                            3.297e+03  7.117e+02   4.632 3.76e-06 ***
## quantidade_doadores                    3.109e+02  1.707e+01  18.212  < 2e-16 ***
## media_receita                          1.330e+00  9.115e-02  14.594  < 2e-16 ***
## recursos_de_outros_candidatos.comites  3.401e-02  1.660e-02   2.049 0.040542 *  
## recursos_de_pessoas_fisicas            1.623e-01  1.419e-02  11.437  < 2e-16 ***
## recursos_de_pessoas_juridicas          7.897e-02  4.333e-03  18.228  < 2e-16 ***
## quantidade_despesas                   -2.266e+01  3.139e+00  -7.218 6.48e-13 ***
## media_despesa                          1.447e+00  4.198e-01   3.446 0.000576 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 32190 on 3428 degrees of freedom
## Multiple R-squared:    0.5,  Adjusted R-squared:  0.499 
## F-statistic: 489.8 on 7 and 3428 DF,  p-value: < 2.2e-16

Removendo esses parâmetros e criando um novo modelo, podemos dizer que o novo modelo é um pouco menos explicativo e agora ele explica por volta de 50% dos dados. Entretanto o p-valor das variáveis melhorou, com quase todas apresentando números próximos de 0, nos mostrando que elas são importantes para o modelo.

eleicoes.2010.filtered <- eleicoes.2010.input %>% 
  select(-quantidade_doacoes, -quantidade_doadores, -quantidade_despesas,
         -total_receita, -recursos_de_outros_candidatos.comites,
         -recursos_de_pessoas_juridicas, -recursos_de_partido_politico, -media_despesa)

model.2010.filtered <- lm(votos ~., data = eleicoes.2010.filtered)

summary(model.2010.filtered)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes.2010.filtered)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -208300   -8297   -7458   -3052 1304066 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  8.580e+03  6.553e+02  13.092  < 2e-16 ***
## media_receita               -1.368e-01  4.237e-02  -3.229  0.00125 ** 
## recursos_de_pessoas_fisicas  5.218e-02  9.253e-03   5.640 1.82e-08 ***
## recursos_proprios           -3.230e-02  3.565e-03  -9.061  < 2e-16 ***
## quantidade_fornecedores     -1.079e+01  2.246e+00  -4.807 1.59e-06 ***
## total_despesa                7.562e-02  2.350e-03  32.179  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37420 on 4034 degrees of freedom
## Multiple R-squared:  0.4304, Adjusted R-squared:  0.4297 
## F-statistic: 609.7 on 5 and 4034 DF,  p-value: < 2.2e-16

Para o modelo de 2010, foi adotado o mesmo padrão de remoção de variáveis. O resultado também foi similar, com o R² ajustado caindo um pouco em relação ao modelo com todas as variáveis e explicando cerca de 43%. E houve efeito similar com relação ao p-valor das variáveis, com cada uma delas sendo mais significativa para explicar o número de votos.

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?

A seleção dos parâmetros será similar a feita anteriormente, incluíndo os valores numéricos e excluíndo os categoricos.

eleicoes.all.input <- eleicoes_all %>% 
  select(-ano) %>% 
  select_if(is.numeric)

model.all <- lm(votos ~., data = eleicoes.all.input)

summary(model.all)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes.all.input)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -357286   -9302   -8305   -2590 1315939 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                            9.358e+03  4.769e+02  19.622  < 2e-16 ***
## quantidade_doacoes                    -8.307e+01  4.877e+01  -1.703 0.088559 .  
## quantidade_doadores                    1.396e+02  5.628e+01   2.481 0.013131 *  
## total_receita                         -4.505e-02  7.874e-03  -5.721  1.1e-08 ***
## media_receita                          1.657e-01  4.732e-02   3.502 0.000464 ***
## recursos_de_outros_candidatos.comites  1.783e-02  5.784e-03   3.083 0.002056 ** 
## recursos_de_pessoas_fisicas            9.930e-02  8.570e-03  11.587  < 2e-16 ***
## recursos_de_pessoas_juridicas          4.287e-02  4.789e-03   8.952  < 2e-16 ***
## recursos_proprios                     -3.065e-03  4.586e-03  -0.668 0.504012    
## recursos_de_partido_politico                  NA         NA      NA       NA    
## quantidade_despesas                    1.373e+01  6.710e+00   2.046 0.040817 *  
## quantidade_fornecedores               -3.830e+01  8.361e+00  -4.581  4.7e-06 ***
## total_despesa                          9.764e-02  7.969e-03  12.253  < 2e-16 ***
## media_despesa                         -9.222e-02  8.500e-02  -1.085 0.278028    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 36640 on 7463 degrees of freedom
## Multiple R-squared:  0.4115, Adjusted R-squared:  0.4105 
## F-statistic: 434.8 on 12 and 7463 DF,  p-value: < 2.2e-16

O modelo que considera os anos de 2006 e de 2010 tem R² ajustado similar aos anteriores, demonstrando que o modelo não é muito explicativo. Mas a quantidade de variáveis que são significativas para o modelo é quase igual ou até maior do que os exemplos passados. Talvez elas façam mais sentido em conjunto, interpretando melhor o número de votos por candidato.