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.
O conjunto de dados é descrito por:
sequencial_candidato: (character) id do candidatonome: (character)uf: (character)partido: (character)quantidade_doacoes: (integer)quantidade_doadores: (integer) número de doadores diferentestotal_receita: (double) soma em R$ das doaçõesmedia_receita: (double) média das doaçõesrecursos_de_outros_candidatos/comites: (double) quantia em R$ das doações provenientes de outros candidatos ou comite partidáriorecursos_de_pessoas_fisicas: (double) quantia em R$ das doações provenientes de outros CPFsrecursos_de_pessoas_juridicas: (double) quantia em R$ das doações provenientes de outros CNPJrecursos_proprios: (double) quantia em R$ das doações provenientes do próprio candidatorecursos_de_partido_politico: (double) quantia em R$ das doações provenientes do partido político do candidatovotos: (integer) variável alvo. Se refere ao número de votos na campanha de 2006 e 2010quantidade_despesas: (integer)quantidade_fornecedores: (integer) número de fornecedores/despesas diferentestotal_despesa: (double) soma em R$ das despesas de campanhamedia_despesa: (double) média das despesas de campanhacargo: (character)Sexo: (character)grau: (character) grau de instrução do candidatoestado_civil: (character)ocupacao: (character) ocupação do candidatoOs 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()
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.
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.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.
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.
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.
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.