library(tidyverse)
library(here)
library(plotly)
library(corrplot)
theme_set(theme_minimal())
options(max.print = .Machine$integer.max)

Introdução

A seguinte análise tem como objetivo utilizar a regressão linear para explicar as votações para deputado nas eleições de 2006 e 2010. Os dados foram extraídos do Tribunal Superior Eleitoral e contém informações sobre aproximadamente 7300 candidatos.

Inicialmente vamos importar nossos dados, cuidando para que cada coluna seja importada com o tipo correto.

# lê o csv com os dados a serem utilizados com os tipos corretos para cada coluna
eleicoes <- read_csv(here("data/eleicoes_2006_e_2010.csv"),
                     progress = FALSE,
                     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()))

Para cada observação na base de dados, temos as seguintes informações:

eleicoes %>% names()
##  [1] "ano"                                  
##  [2] "sequencial_candidato"                 
##  [3] "nome"                                 
##  [4] "uf"                                   
##  [5] "partido"                              
##  [6] "quantidade_doacoes"                   
##  [7] "quantidade_doadores"                  
##  [8] "total_receita"                        
##  [9] "media_receita"                        
## [10] "recursos_de_outros_candidatos.comites"
## [11] "recursos_de_pessoas_fisicas"          
## [12] "recursos_de_pessoas_juridicas"        
## [13] "recursos_proprios"                    
## [14] "recursos_de_partido_politico"         
## [15] "quantidade_despesas"                  
## [16] "quantidade_fornecedores"              
## [17] "total_despesa"                        
## [18] "media_despesa"                        
## [19] "cargo"                                
## [20] "sexo"                                 
## [21] "grau"                                 
## [22] "estado_civil"                         
## [23] "ocupacao"                             
## [24] "votos"
  1. sequencial_candidato: identificador de um candidato
  2. nome: nome do candidato
  3. uf: estado do candidato
  4. partido: partido ao qual o candidatao é afiliado
  5. quantidade_doacoes: quantidade de doaces recebidas
  6. quantidade_doadores: quantidade de diferentes doadores
  7. total_receita: soma de todas as doações recebidas, em reais
  8. media_receita: média das doações recebidas
  9. recursos_de_outros_candidatos.comites: quantia doada por outros candidatos ou comitê partidário
  10. recursos_de_pessoas_fisicas: quantia doada por pessoas físicas
  11. recursos_de_pessoas_juridicas: quantia doada por empresas
  12. recursos_proprios: doações providas pelo próprio candidato
  13. recursos_de_partido_politico: doações providas pelo partido político do candidato
  14. quantidade_despesas: quantidade de diferentes despesas
  15. quantidade_fornecedores: quantidade de fornecedores diferentes
  16. total_despesa: soma das despesas da campanha, em reais
  17. media_despesa: media das despesas da campanha
  18. cargo: cargo ao qual o candidato se candidatou
  19. sexo: sexo do candidato
  20. grau: grau de instrução do candidato
  21. estado_civil: estado civil do candidato
  22. ocupacao: profissão do candidato
  23. votos: total de votos recebidos pelo candidato

Vamos, agora, tratar os valores NAs da nossa base de dados. Considerando a possível perda de informação ao remover as linhas que contenham esses valores, iremos substituir esses valores pelo valor da mediana da coluna à qual estes pertencem. Utilizaremos a mediana para isto, pois a mesma não é afetada por valores extremos, como a média.

# função que substitui os valores NAs pela mediana da coluna à qual este valor pertence
trataNa <- function(variavel) {
  novosValores <- replace(variavel,
                          is.na(variavel),
                          median(variavel, na.rm = TRUE))
  return(novosValores)
}

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

Com os tipos corretos e os valores NAs devidamente tratados, vamos utilizar estas bases para responder algumas perguntas.

Perguntas

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? E para 2010?

Antes de criarmos nossos modelos de regressão múltipla, vamos transformar nossas variáveis categóricas para que possam ser utilizadas como variáveis preditoras. Algumas variáveis na nossa base de dados servem apenas para identificar um candidato, por isso não as utilizaremos em nosso modelo. A variável cargo também não será utilizada, pois possui o mesmo valor para todas as observações. E algumas categóricas, geram fatores com muitos níveis, então ignoraremos estas também. Transformemos, então, somente as variáveis categóricas que iremos utilizar.

eleicoes$sexo = as.factor(eleicoes$sexo)
eleicoes$grau = as.factor(eleicoes$grau)
eleicoes$estado_civil = as.factor(eleicoes$estado_civil)

Criaremos agora uma base de dados apenas com as variáveis que utilizaremos, aproveitando para divir esta base em uma para cada ano de eleição.

eleicoes_selecionadas <- eleicoes %>% 
  select(-sequencial_candidato,
         -nome,
         -cargo,
         -uf,
         -ocupacao,
         -partido)

eleicoes_2006 <- eleicoes_selecionadas %>% 
  filter(ano == 2006) %>% 
  select(-ano)

eleicoes_2010 <- eleicoes_selecionadas %>% 
  filter(ano == 2010) %>% 
  select(-ano)

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

Vamos, agora, criar nossos modelos.

Para o ano de 2006:

modelo_2006 <- lm(votos ~ ., eleicoes_2006)
summary(modelo_2006)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_2006)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -229609   -7765   -4269     316  639006 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value
## (Intercept)                           -2.345e+03  2.854e+03  -0.821
## quantidade_doacoes                    -8.117e+01  1.243e+02  -0.653
## quantidade_doadores                    3.448e+02  1.343e+02   2.568
## total_receita                         -1.048e-01  2.190e-02  -4.786
## media_receita                          1.182e+00  1.048e-01  11.278
## recursos_de_outros_candidatos.comites  4.085e-02  2.354e-02   1.735
## recursos_de_pessoas_fisicas            1.612e-01  2.227e-02   7.238
## recursos_de_pessoas_juridicas          7.479e-02  1.821e-02   4.106
## recursos_proprios                      1.125e-02  1.871e-02   0.601
## recursos_de_partido_politico                  NA         NA      NA
## quantidade_despesas                   -2.228e+01  9.832e+00  -2.266
## quantidade_fornecedores               -5.848e+00  1.304e+01  -0.448
## total_despesa                          1.356e-01  1.305e-02  10.390
## media_despesa                          8.327e-01  4.198e-01   1.984
## sexoMASCULINO                          3.576e+03  1.698e+03   2.107
## grauENSINO FUNDAMENTAL INCOMPLETO      1.739e+02  3.935e+03   0.044
## grauENSINO MÉDIO COMPLETO              2.285e+03  2.576e+03   0.887
## grauENSINO MÉDIO INCOMPLETO           -2.213e+02  4.107e+03  -0.054
## grauLÊ E ESCREVE                       7.935e+03  1.311e+04   0.605
## grauSUPERIOR COMPLETO                  5.268e+03  2.382e+03   2.212
## grauSUPERIOR INCOMPLETO                3.566e+03  2.808e+03   1.270
## estado_civilDIVORCIADO(A)             -2.416e+03  1.841e+03  -1.312
## estado_civilSEPARADO(A) JUDICIALMENTE -1.207e+03  2.543e+03  -0.475
## estado_civilSOLTEIRO(A)               -1.088e+03  1.464e+03  -0.743
## estado_civilVIÚVO(A)                  -2.462e+03  4.409e+03  -0.558
##                                       Pr(>|t|)    
## (Intercept)                             0.4114    
## quantidade_doacoes                      0.5139    
## quantidade_doadores                     0.0103 *  
## total_receita                         1.77e-06 ***
## media_receita                          < 2e-16 ***
## recursos_de_outros_candidatos.comites   0.0828 .  
## recursos_de_pessoas_fisicas           5.61e-13 ***
## recursos_de_pessoas_juridicas         4.11e-05 ***
## recursos_proprios                       0.5479    
## recursos_de_partido_politico                NA    
## quantidade_despesas                     0.0235 *  
## quantidade_fornecedores                 0.6540    
## total_despesa                          < 2e-16 ***
## 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: < 2.2e-16

Nosso modelo explica aproximadamente 51% (R² = 0.5198) da variação dos dados. Observamos que, mesmo retirando algumas variáveis, ainda há variáveis que não significativas (p-valor alto) para explicar a quantidade de votos.

Para o ano de 2010:

modelo_2010 <- lm(votos ~ ., eleicoes_2010)
summary(modelo_2010)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_2010)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -214872   -8966   -5717   -1208 1259110 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value
## (Intercept)                            5.001e+03  2.812e+03   1.778
## quantidade_doacoes                     3.379e+01  5.401e+01   0.626
## quantidade_doadores                   -1.756e+01  6.263e+01  -0.280
## total_receita                         -7.507e-03  9.485e-03  -0.791
## media_receita                         -1.871e-01  5.385e-02  -3.474
## recursos_de_outros_candidatos.comites  5.524e-03  6.080e-03   0.909
## recursos_de_pessoas_fisicas            4.621e-02  1.002e-02   4.611
## recursos_de_pessoas_juridicas         -4.655e-03  5.551e-03  -0.838
## recursos_proprios                     -3.068e-02  4.974e-03  -6.167
## recursos_de_partido_politico                  NA         NA      NA
## quantidade_despesas                    1.324e+01  9.108e+00   1.454
## quantidade_fornecedores               -3.047e+01  1.112e+01  -2.740
## total_despesa                          8.562e-02  9.973e-03   8.586
## media_despesa                          1.438e-01  8.949e-02   1.607
## sexoMASCULINO                          2.259e+03  1.633e+03   1.384
## grauENSINO FUNDAMENTAL INCOMPLETO     -1.651e+03  4.488e+03  -0.368
## grauENSINO MÉDIO COMPLETO             -2.819e+01  2.671e+03  -0.011
## grauENSINO MÉDIO INCOMPLETO           -1.309e+03  4.119e+03  -0.318
## grauLÊ E ESCREVE                       4.629e+04  7.644e+03   6.056
## grauSUPERIOR COMPLETO                  5.072e+03  2.483e+03   2.043
## grauSUPERIOR INCOMPLETO                6.895e+02  2.922e+03   0.236
## estado_civilDIVORCIADO(A)             -3.377e+03  1.975e+03  -1.710
## estado_civilSEPARADO(A) JUDICIALMENTE -4.172e+03  3.186e+03  -1.309
## estado_civilSOLTEIRO(A)               -3.746e+03  1.485e+03  -2.522
## estado_civilVIÚVO(A)                  -6.212e+03  4.426e+03  -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           4.14e-06 ***
## recursos_de_pessoas_juridicas         0.401838    
## recursos_proprios                     7.66e-10 ***
## recursos_de_partido_politico                NA    
## quantidade_despesas                   0.145984    
## quantidade_fornecedores               0.006169 ** 
## total_despesa                          < 2e-16 ***
## 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                      1.52e-09 ***
## 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: < 2.2e-16

Para o ano de 2010, a variação explicada pelo modelo diminui para aproximadamente 44.4% (R² = 0.4439). Aqui, também, ainda existem variáveis que não são significativas para explicar a quantidade de votos.

Comparando as regressões criadas para 2006 e 2010, quais as diferenças e semelhanças percebidas?

Como dito anteriormente, ambos os modelos de regressão explicam em torno da metade da variação dos dados, e ainda possuem algumas variáveis que não são significativas para prever a quantidade de votos. Podemos comparar esses dois modelos em relação à seus resíduos, que representam a diferença entre o valor real e o previsto pelo modelo. Supõe-se que estes devem possuir uma média 0, variação constante e distribuição normal.

Verificando as médias dos resíduos para cada modelo, temos:

Para o ano de 2006:

mean(modelo_2006$residuals)
## [1] -1.285028e-12

Para o ano de 2010:

mean(modelo_2010$residuals)
## [1] -2.042342e-12

Para ambos os modelos, a média de seus resíduos aproximam-se de 0.

Quanto à variação constante dos erros, podemos observar o comportamento dos erros em um gráfico de dispersão entre os resíduos e os valores ajustados.

Para o ano de 2006:

modelo_2006 %>% 
  ggplot(aes(.fitted, .resid)) +
  geom_point(alpha = .3) +
  geom_hline(yintercept = 0, col = "red", linetype = "dashed") +
  labs(x = "Valores ajustados",
       y = "Resíduos",
       title = "Resíduos x Ajustamento")

Para o ano de 2010:

modelo_2010 %>% 
  ggplot(aes(.fitted, .resid)) +
  geom_point(alpha = .3) +
  geom_hline(yintercept = 0, col = "red", linetype = "dashed") +
  labs(x = "Valores ajustados",
       y = "Resíduos",
       title = "Resíduos x Ajustamento")

Em nenhum dos modelos observa-se uma variação constante. O esperado seria que os resíduos tivessem uma distribuição aleatória, mas observamos que há uma tendência nos resíduos para ambos os modelos.

Quanto à distruibuição normal, podemos usar um gráfico Q-Q, que irá comparar as distribuições de probabilidade dos nossos modelos com a distribuição de probabilidade normal.

Para o ano de 2006:

qqnorm(modelo_2006$residuals)
qqline(modelo_2006$residuals, col = 2, lwd = 2, lty = 2)

Para o ano de 2010:

qqnorm(modelo_2010$residuals)
qqline(modelo_2010$residuals, col = 2, lwd = 2, lty = 2)

No gráfico, a linha vermelha tracejada representa a distribuição normal. O ideal seria que todos os resíduos aproximassem-se da linha vermelha, mas, para ambos os modelos, apenas uma parte deles aproxima-se da linha.

Todas as variáveis são úteis para os modelos de regressão? Há variáveis redundantes?

Podemos utilizar do sumário dos modelos para identificar as variáveis com maior significância, e um correlograma para identificar as variáveis redundantes.

Para o modelo com dados do ano de 2006:

Os resultados da regressão para o ano de 2006 mostram que as variáveis quantidade_doacoes,quantidade_doadores, total_receita, recursos_de_outros_candidatos.comites, recursos_proprios, recuros_partido, quantidade_despesas, quantidade_fornecedores, media_despesa, sexo, grau e estado_civil possuem um menor nível de significância. Vejamos agora as variáveis redundantes. Para isto, utilizaremos apenas as variáveis quantitativas.

# funcao que retorna a base de dados apenas com variáveis quantitativas e modifica seus nomes para nomes mais curtos a fim de melhorar as visualizações.
variaveis_numericas <- function(dados) {
  nova = dados %>% 
    select(doacoes = quantidade_doacoes,
         doadores = quantidade_doadores,
         receita = total_receita,
         md_receita = media_receita,
         rec_comites = recursos_de_outros_candidatos.comites,
         rec_fisica = recursos_de_pessoas_fisicas,
         rec_juridica = recursos_de_pessoas_juridicas,
         rec_proprios = recursos_proprios,
         rec_partido = recursos_de_partido_politico,
         despesas = quantidade_despesas,
         fornecedores = quantidade_fornecedores,
         tot_despesa = total_despesa,
         md_despesa = media_despesa,
         votos = votos)
  return(nova)
}
eleicoes_2006_num <- variaveis_numericas(eleicoes)

Plotando o correlograma, temos:

plota_correlograma <- function(dados, ano) {
  col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
  correlacoes <- dados %>%
    cor()
  return(corrplot(correlacoes, 
         method = "color", 
         col = col(200),
         type = "lower",
         number.cex = .6,
         addCoef.col = "black",
         tl.col = "black",
         diag = FALSE,
         tl.cex = .7,
         title = paste("Eleições ", ano)))
}

plota_correlograma(eleicoes_2006_num, 2006)

Considerando que duas variáveis são redundantes se o valor da correlação linear entre si é maior que 0.8, identificamos o seguinte:

  • total_receita, total_despesa e recursos_de_pessoas_juridicas são redundantes entre si
  • fornecedores e quantidade_despesas são redundantes.

Logo, concluímos que estas variáveis não são úteis para o modelo de regressão para o ano de 2006.

Para o modelo com dados do ano de 2010

Os resultados da regressão indicam que as variáveis quantidade_doacoes,quantidade_doadores, total_receita, recursos_de_outros_candidatos.comites, recursos_de_pessoas_juridicas, recursos_proprios, recuros_partido, quantidade_despesas, quantidade_fornecedores, media_despesa, sexo, grau e estado_civil possuem um menor nível de significância.

Em comparação com o modelo de regressão para o ano de 2006, a variável recursos_de_pessoas_juridicas se encontrava entre as variáveis significativas.

Novamente, para identificar as variáveis redundantes, vamos selecionar apenas as variáveis quantitativas.

eleicoes_2010_num <- variaveis_numericas(eleicoes)

Plotando o correlograma:

plota_correlograma(eleicoes_2010_num, 2010)

Utilizando o mesmo critério que o utilizado para o ano de 2006, identificamos:

  • total_receita, total_despesa e recursos_de_pessoas_juridicas são redundantes entre si.
  • fornecedores e quantidade_despesas são redundantes.

Diferentemente do que aconteceu utilizando os resultados da regressão para identificar as variáveis com pouca significância, os resultados para as variáveis reduntates utilizando o correlograma são os mesmos para ambos os modelos.

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.

Para o ano de 2006, utilizaremos apenas as variáveis total_receita, media_receita e recurso_de_pessoas_fisicas para prever votos. Essas variáveis foram escolhidas entre as mais significativas no modelo para o ano de 2006 utilizando todas as variáveis que não eram redundantes entre si.

modelo_2006_novo <- lm(votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, eleicoes_2006)
summary(modelo_2006_novo)
## 
## Call:
## lm(formula = votos ~ total_receita + media_receita + recursos_de_pessoas_fisicas, 
##     data = eleicoes_2006)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -280717   -8739   -7584   -1273  650503 
## 
## Coefficients:
##                              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 8.389e+03  6.698e+02  12.525  < 2e-16 ***
## total_receita               7.891e-02  3.344e-03  23.601  < 2e-16 ***
## media_receita               6.159e-01  9.159e-02   6.725 2.05e-11 ***
## recursos_de_pessoas_fisicas 1.528e-01  1.410e-02  10.837  < 2e-16 ***
## ---
## 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: < 2.2e-16

O modelo com essas variáveis, explica 42.8% (R² = 0.428) da variação dos dados. Vejamos como se comportam os resíduos.

mean(modelo_2006_novo$residuals)
## [1] -1.147629e-12

A média aproxima-se de 0, como esperado.

modelo_2006_novo %>% 
  ggplot(aes(.fitted, .resid)) +
  geom_point(alpha = .3) +
  geom_hline(yintercept = 0, col = "red", linetype = "dashed") +
  labs(x = "Valores ajustados",
       y = "Resíduos",
       title = "Resíduos x Ajustamento")

A distribuição dos resíduos continua não aleatória.

qqnorm(modelo_2006_novo$residuals)
qqline(modelo_2006_novo$residuals, col = 2, lwd = 2, lty = 2)

E ainda há alguns dos resíduos que não se aproximam da distribuição normal.

Para o ano de 2010, utilizaremos as variáveis media_receita, recursos_de_pessoas_fisicas, recursos_proprios, total_despesa

modelo_2010_novo <- lm(votos ~ media_receita + recursos_de_pessoas_fisicas + recursos_proprios + total_despesa, eleicoes_2010)
summary(modelo_2010_novo)
## 
## Call:
## lm(formula = votos ~ media_receita + recursos_de_pessoas_fisicas + 
##     recursos_proprios + total_despesa, data = eleicoes_2010)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -193052   -8289   -7503   -3329 1303336 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  8.495e+03  6.569e+02  12.933  < 2e-16 ***
## media_receita               -9.179e-02  4.143e-02  -2.215   0.0268 *  
## recursos_de_pessoas_fisicas  4.656e-02  9.204e-03   5.059  4.4e-07 ***
## recursos_proprios           -3.462e-02  3.541e-03  -9.777  < 2e-16 ***
## total_despesa                6.882e-02  1.881e-03  36.579  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37530 on 4035 degrees of freedom
## Multiple R-squared:  0.4272, Adjusted R-squared:  0.4266 
## F-statistic: 752.2 on 4 and 4035 DF,  p-value: < 2.2e-16

Com estas variáveis, nosso modelo explica 42.72% (R² = 0.4272) da variação dos dados. A variável media_receita, que era bastante significativa no modelo com todas as variáveis, não ficou tão significativa neste, devido ao aumento do seu p-valor.

Vejamos os resíduos.

mean(modelo_2010_novo$residuals)
## [1] 7.422802e-13

A média continua sendo um valor próximo a 0.

modelo_2010_novo %>% 
  ggplot(aes(.fitted, .resid)) +
  geom_point(alpha = .3) +
  geom_hline(yintercept = 0, col = "red", linetype = "dashed") +
  labs(x = "Valores ajustados",
       y = "Resíduos",
       title = "Resíduos x Ajustamento")

Há uma clara tendência nos resíduos.

qqnorm(modelo_2010_novo$residuals)
qqline(modelo_2010_novo$residuals, col = 2, lwd = 2, lty = 2)

Os resíduos ainda não se aproximam muito de uma distribuição normal.

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?

Construindo nosso modelo.

modelo_tudo <- lm(votos ~ ., eleicoes_selecionadas)
summary(modelo_tudo)
## 
## Call:
## lm(formula = votos ~ ., data = eleicoes_selecionadas)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -346132  -10502   -6243    -846 1279363 
## 
## Coefficients: (1 not defined because of singularities)
##                                         Estimate Std. Error t value
## (Intercept)                            2.855e+03  2.105e+03   1.356
## quantidade_doacoes                    -8.053e+01  4.845e+01  -1.662
## quantidade_doadores                    1.349e+02  5.592e+01   2.413
## total_receita                         -4.267e-02  7.831e-03  -5.448
## media_receita                          1.444e-01  4.712e-02   3.065
## recursos_de_outros_candidatos.comites  1.744e-02  5.749e-03   3.033
## recursos_de_pessoas_fisicas            9.493e-02  8.534e-03  11.124
## recursos_de_pessoas_juridicas          4.092e-02  4.767e-03   8.585
## recursos_proprios                     -4.265e-03  4.561e-03  -0.935
## recursos_de_partido_politico                  NA         NA      NA
## quantidade_despesas                    1.408e+01  6.668e+00   2.111
## quantidade_fornecedores               -3.853e+01  8.311e+00  -4.636
## total_despesa                          9.524e-02  7.923e-03  12.022
## media_despesa                         -8.255e-02  8.448e-02  -0.977
## sexoMASCULINO                          3.411e+03  1.236e+03   2.760
## grauENSINO FUNDAMENTAL INCOMPLETO     -8.144e+02  3.152e+03  -0.258
## grauENSINO MÉDIO COMPLETO              1.816e+03  1.963e+03   0.925
## grauENSINO MÉDIO INCOMPLETO           -9.852e+02  3.070e+03  -0.321
## grauLÊ E ESCREVE                       3.999e+04  6.662e+03   6.002
## grauSUPERIOR COMPLETO                  7.679e+03  1.817e+03   4.226
## grauSUPERIOR INCOMPLETO                3.350e+03  2.143e+03   1.563
## estado_civilDIVORCIADO(A)             -3.472e+03  1.430e+03  -2.429
## estado_civilSEPARADO(A) JUDICIALMENTE -2.109e+03  2.134e+03  -0.988
## estado_civilSOLTEIRO(A)               -3.881e+03  1.099e+03  -3.530
## estado_civilVIÚVO(A)                  -5.426e+03  3.295e+03  -1.647
##                                       Pr(>|t|)    
## (Intercept)                           0.175099    
## quantidade_doacoes                    0.096523 .  
## quantidade_doadores                   0.015844 *  
## total_receita                         5.25e-08 ***
## media_receita                         0.002183 ** 
## recursos_de_outros_candidatos.comites 0.002430 ** 
## recursos_de_pessoas_fisicas            < 2e-16 ***
## recursos_de_pessoas_juridicas          < 2e-16 ***
## recursos_proprios                     0.349747    
## recursos_de_partido_politico                NA    
## quantidade_despesas                   0.034781 *  
## quantidade_fornecedores               3.61e-06 ***
## total_despesa                          < 2e-16 ***
## 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                      2.04e-09 ***
## grauSUPERIOR COMPLETO                 2.40e-05 ***
## 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: < 2.2e-16

O modelo considerando ambas as eleições explica aproximadamente 42% (R² = 0.4202) da variação dos dados. Esse valor é menor que os valores de R² dos outros modelos feitos para cada eleição separadamente.

Vejamos os resíduos.

mean(modelo_tudo$residuals)
## [1] -1.215466e-12

A média dos resíduos aproxima-se de 0, como esperado.

modelo_tudo %>% 
  ggplot(aes(.fitted, .resid)) +
  geom_point(alpha = .3) +
  geom_hline(yintercept = 0, col = "red", linetype = "dashed") +
  labs(x = "Valores ajustados",
       y = "Resíduos",
       title = "Resíduos x Ajustamento")

A distruibuição dos resíduos, como os modelos anteriores, continua tendenciosa, não aleatória.

qqnorm(modelo_tudo$residuals)
qqline(modelo_tudo$residuals, col = 2, lwd = 2, lty = 2)

E, como os outros, a distruibuição dos resíduos não aproxima-se totalmente de uma distruibuição normal.