library(readr)
library(ggplot2)
library(leaps)
df <- read.csv("/home/joaolaf/Área de Trabalho/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
Levando em consideração que muitas campanhas são ganhas com muito envolvimento de dinheiro, pelo menos aqui no Brasil, vou considerar as variáveis numéricas e relacionadas a dinheiro como sendo as variáveis que irão ser estudadas para sabermos se elas vão nos apresentar um bom modelo ou não.
data <- lm(votos~ recursos_de_partidos + quantidade_doacoes + quantidade_doadores + total_receita + media_receita + recursos_de_outros_candidatos.comites + recursos_pessoas_fisicas + recursos_de_pessoas_juridicas + recursos_proprios + quantidade_despesas + quantidade_fornecedores + total_despesa + media_despesa,df)
summary(data)
##
## Call:
## lm(formula = votos ~ recursos_de_partidos + quantidade_doacoes +
## quantidade_doadores + total_receita + media_receita + recursos_de_outros_candidatos.comites +
## recursos_pessoas_fisicas + recursos_de_pessoas_juridicas +
## recursos_proprios + quantidade_despesas + quantidade_fornecedores +
## total_despesa + media_despesa, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -312908 -6759 -1939 2783 1243441
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 1.014e+04 1.541e+03 6.580
## recursos_de_partidos -3.562e-02 4.247e-03 -8.387
## quantidade_doacoes -1.532e+01 2.641e+01 -0.580
## quantidade_doadores 2.723e+02 3.851e+01 7.072
## total_receita 7.302e-02 8.776e-03 8.321
## media_receita 3.836e-01 5.144e-02 7.458
## recursos_de_outros_candidatos.comites 5.651e-02 7.659e-03 7.379
## recursos_pessoas_fisicas -3.323e-02 8.932e-03 -3.720
## recursos_de_pessoas_juridicas -2.877e-02 4.402e-03 -6.535
## recursos_proprios -5.011e-02 5.568e-03 -9.001
## quantidade_despesas 4.952e+01 4.281e+00 11.568
## quantidade_fornecedores -5.558e+01 6.163e+00 -9.018
## total_despesa -2.688e-02 7.441e-03 -3.613
## media_despesa 2.083e+00 3.954e-01 5.267
## Pr(>|t|)
## (Intercept) 5.29e-11 ***
## recursos_de_partidos < 2e-16 ***
## quantidade_doacoes 0.561883
## quantidade_doadores 1.78e-12 ***
## total_receita < 2e-16 ***
## media_receita 1.07e-13 ***
## recursos_de_outros_candidatos.comites 1.92e-13 ***
## recursos_pessoas_fisicas 0.000202 ***
## recursos_de_pessoas_juridicas 7.12e-11 ***
## recursos_proprios < 2e-16 ***
## quantidade_despesas < 2e-16 ***
## quantidade_fornecedores < 2e-16 ***
## total_despesa 0.000306 ***
## media_despesa 1.45e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 32590 on 4138 degrees of freedom
## Multiple R-squared: 0.4838, Adjusted R-squared: 0.4822
## F-statistic: 298.3 on 13 and 4138 DF, p-value: < 2.2e-16
Para esses valores, podemos tirar alguams conclusões sobre nossa análise. Primeiro de tudo, vemos que a variável F-statistic tem um valor alto, que é 298.3.Essa variável indica a adequabilidade do modelo, ou seja, ela é um preditor que mede se as variáveis estudadas possam ser boas ou não. Quando esse valor é maior do que 1, é muito provável e normal que algum dos valores vão predizer bem essa regressão.
Outras variáveis que podemos observar são a R-squared: 0.4838 e a Adjusted R-squared: 0.4822. O R-squared define o quanto um modelo é explicativo com aqueles dados.Nesses dados, com esse valor de R, temos que 48.38% da variável dependente, que é o voto, pode ser explicada pelas variáveis presentes no modelo.Já o adjusted R-squared significa a mesma coisa, mas é ajustado para combater tendências de variáveis, sendo menor.
Podemos observar também a estatística do p-valor. Esse dado nos mostra a probabilidade de que o objeto que contém o valor seja tão grande ou maior do que a estatística analisada. Geralmente, probabilidades menores do que 5% nos mostram isso. Nas métricas apresentadas, a linha “Signif. codes” mostra a importância das variáveis em função de seu p-valor para o modelo. Ou seja, todas essas variáveis, menos quantidade_doacoes, são bons valores para a análise.
Para esse questionamento, teremos que fazer uma seleção de variáveis, que consiste em selecionar as melhores variáveis para predizer o sistema. Para isso, iremos usar a função regsubsets, que lista os K melhores modelos, segundo o critério de menor soma de quadrados residual.
rs = summary(regsubsets(votos ~recursos_de_partidos + quantidade_doacoes + quantidade_doadores + total_receita + media_receita + recursos_de_outros_candidatos.comites + recursos_pessoas_fisicas + recursos_de_pessoas_juridicas + recursos_proprios + quantidade_despesas + quantidade_fornecedores + total_despesa + media_despesa,nvmax = NULL,data = df))
rs
## Subset selection object
## Call: regsubsets.formula(votos ~ recursos_de_partidos + quantidade_doacoes +
## quantidade_doadores + total_receita + media_receita + recursos_de_outros_candidatos.comites +
## recursos_pessoas_fisicas + recursos_de_pessoas_juridicas +
## recursos_proprios + quantidade_despesas + quantidade_fornecedores +
## total_despesa + media_despesa, nvmax = NULL, data = df)
## 13 Variables (and intercept)
## Forced in Forced out
## recursos_de_partidos FALSE FALSE
## quantidade_doacoes FALSE FALSE
## quantidade_doadores FALSE FALSE
## total_receita FALSE FALSE
## media_receita FALSE FALSE
## recursos_de_outros_candidatos.comites FALSE FALSE
## recursos_pessoas_fisicas FALSE FALSE
## recursos_de_pessoas_juridicas FALSE FALSE
## recursos_proprios FALSE FALSE
## quantidade_despesas FALSE FALSE
## quantidade_fornecedores FALSE FALSE
## total_despesa FALSE FALSE
## media_despesa FALSE FALSE
## 1 subsets of each size up to 13
## Selection Algorithm: exhaustive
## recursos_de_partidos quantidade_doacoes quantidade_doadores
## 1 ( 1 ) " " " " " "
## 2 ( 1 ) " " " " " "
## 3 ( 1 ) " " " " "*"
## 4 ( 1 ) " " " " "*"
## 5 ( 1 ) " " " " "*"
## 6 ( 1 ) " " " " "*"
## 7 ( 1 ) " " " " "*"
## 8 ( 1 ) " " " " "*"
## 9 ( 1 ) "*" " " "*"
## 10 ( 1 ) "*" " " "*"
## 11 ( 1 ) "*" " " "*"
## 12 ( 1 ) "*" " " "*"
## 13 ( 1 ) "*" "*" "*"
## total_receita media_receita
## 1 ( 1 ) "*" " "
## 2 ( 1 ) "*" " "
## 3 ( 1 ) "*" " "
## 4 ( 1 ) "*" "*"
## 5 ( 1 ) " " "*"
## 6 ( 1 ) "*" "*"
## 7 ( 1 ) "*" "*"
## 8 ( 1 ) "*" "*"
## 9 ( 1 ) "*" "*"
## 10 ( 1 ) "*" "*"
## 11 ( 1 ) "*" "*"
## 12 ( 1 ) "*" "*"
## 13 ( 1 ) "*" "*"
## recursos_de_outros_candidatos.comites recursos_pessoas_fisicas
## 1 ( 1 ) " " " "
## 2 ( 1 ) "*" " "
## 3 ( 1 ) "*" " "
## 4 ( 1 ) "*" " "
## 5 ( 1 ) "*" " "
## 6 ( 1 ) "*" " "
## 7 ( 1 ) "*" " "
## 8 ( 1 ) "*" " "
## 9 ( 1 ) "*" " "
## 10 ( 1 ) "*" " "
## 11 ( 1 ) "*" "*"
## 12 ( 1 ) "*" "*"
## 13 ( 1 ) "*" "*"
## recursos_de_pessoas_juridicas recursos_proprios
## 1 ( 1 ) " " " "
## 2 ( 1 ) " " " "
## 3 ( 1 ) " " " "
## 4 ( 1 ) " " " "
## 5 ( 1 ) " " " "
## 6 ( 1 ) " " " "
## 7 ( 1 ) " " " "
## 8 ( 1 ) " " "*"
## 9 ( 1 ) "*" "*"
## 10 ( 1 ) "*" "*"
## 11 ( 1 ) "*" "*"
## 12 ( 1 ) "*" "*"
## 13 ( 1 ) "*" "*"
## quantidade_despesas quantidade_fornecedores total_despesa
## 1 ( 1 ) " " " " " "
## 2 ( 1 ) " " " " " "
## 3 ( 1 ) " " " " " "
## 4 ( 1 ) " " " " " "
## 5 ( 1 ) "*" "*" " "
## 6 ( 1 ) "*" "*" " "
## 7 ( 1 ) "*" "*" " "
## 8 ( 1 ) "*" "*" " "
## 9 ( 1 ) "*" "*" " "
## 10 ( 1 ) "*" "*" " "
## 11 ( 1 ) "*" "*" " "
## 12 ( 1 ) "*" "*" "*"
## 13 ( 1 ) "*" "*" "*"
## media_despesa
## 1 ( 1 ) " "
## 2 ( 1 ) " "
## 3 ( 1 ) " "
## 4 ( 1 ) " "
## 5 ( 1 ) " "
## 6 ( 1 ) " "
## 7 ( 1 ) "*"
## 8 ( 1 ) "*"
## 9 ( 1 ) " "
## 10 ( 1 ) "*"
## 11 ( 1 ) "*"
## 12 ( 1 ) "*"
## 13 ( 1 ) "*"
Por padrão, temos que o K no qual falamos no início da questão é 13, tendo em vista que no parâmetro nvmax, botamos NULL para não existir limite de predição, mostrando a lista dos 13 melhores modelos.
Para continuarmos a mostrar as melhores variáveis, vamos ver qual tem o maior adjusted R-squared e selecioná-las:
which.max(rs$adjr2)
## [1] 12
rs$which[12,]
## (Intercept)
## TRUE
## recursos_de_partidos
## TRUE
## quantidade_doacoes
## FALSE
## quantidade_doadores
## TRUE
## total_receita
## TRUE
## media_receita
## TRUE
## recursos_de_outros_candidatos.comites
## TRUE
## recursos_pessoas_fisicas
## TRUE
## recursos_de_pessoas_juridicas
## TRUE
## recursos_proprios
## TRUE
## quantidade_despesas
## TRUE
## quantidade_fornecedores
## TRUE
## total_despesa
## TRUE
## media_despesa
## TRUE
Vendo essas informações, temos que apenas uma variável(quantidade_doacoes) não prediz bem o modelo.
Como vimos na questão anterior, apenas uma variável não predizia bem o modelo. Para este caso, vamos tirar essa variável e fazer um novo estudo:
data <- lm(votos~ recursos_de_partidos + quantidade_doadores + total_receita + media_receita + recursos_de_outros_candidatos.comites + recursos_pessoas_fisicas + recursos_de_pessoas_juridicas + recursos_proprios + quantidade_despesas + quantidade_fornecedores + total_despesa + media_despesa,df)
summary(data)
##
## Call:
## lm(formula = votos ~ recursos_de_partidos + quantidade_doadores +
## total_receita + media_receita + recursos_de_outros_candidatos.comites +
## recursos_pessoas_fisicas + recursos_de_pessoas_juridicas +
## recursos_proprios + quantidade_despesas + quantidade_fornecedores +
## total_despesa + media_despesa, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -311377 -6747 -1922 2805 1244886
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 9.990e+03 1.519e+03 6.575
## recursos_de_partidos -3.553e-02 4.244e-03 -8.372
## quantidade_doadores 2.547e+02 2.354e+01 10.817
## total_receita 7.291e-02 8.773e-03 8.311
## media_receita 3.925e-01 4.910e-02 7.995
## recursos_de_outros_candidatos.comites 5.590e-02 7.586e-03 7.369
## recursos_pessoas_fisicas -3.293e-02 8.916e-03 -3.693
## recursos_de_pessoas_juridicas -2.837e-02 4.349e-03 -6.524
## recursos_proprios -4.999e-02 5.563e-03 -8.986
## quantidade_despesas 4.910e+01 4.217e+00 11.642
## quantidade_fornecedores -5.492e+01 6.057e+00 -9.067
## total_despesa -2.728e-02 7.408e-03 -3.683
## media_despesa 2.080e+00 3.954e-01 5.261
## Pr(>|t|)
## (Intercept) 5.48e-11 ***
## recursos_de_partidos < 2e-16 ***
## quantidade_doadores < 2e-16 ***
## total_receita < 2e-16 ***
## media_receita 1.67e-15 ***
## recursos_de_outros_candidatos.comites 2.06e-13 ***
## recursos_pessoas_fisicas 0.000224 ***
## recursos_de_pessoas_juridicas 7.67e-11 ***
## recursos_proprios < 2e-16 ***
## quantidade_despesas < 2e-16 ***
## quantidade_fornecedores < 2e-16 ***
## total_despesa 0.000233 ***
## media_despesa 1.51e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 32580 on 4139 degrees of freedom
## Multiple R-squared: 0.4838, Adjusted R-squared: 0.4823
## F-statistic: 323.2 on 12 and 4139 DF, p-value: < 2.2e-16
Diferente da nossa primeira análise, podemos ver que o valor-p se apresenta forte em todas as amostras, mostrando que esse é um modelo mais forte, visto desse parâmetro.
Outra amostra que podemos pegar é o valor F-statistic. Esse valor, como já sabemos, se ela for maior do que 1, vai nos dar a informação de que,em qualquer estudo, é muito provável que alguma das variáveis venha a fazer sentido na predição. No nosso caso, esse valor é de 323.2, sendo maior do que a da primeira análise.
Já quando vamos ver o R-squared e o adjusted R-squared não teremos nenhuma surpresa. Como na questão anterior, tínhamos uma variável que não predizia bem o modelo. Essa variável foi retirada do estudo. Como ela não significava muita coisa, os valores de R² e R² ajustado não mudaram, já que a variável que saiu não era importante.
Assim como os valores de R² e R² ajustado, o valor do RSE também não mudou.
ggplot(df,aes(x=votos,y=quantidade_doacoes)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=quantidade_doadores)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=total_receita)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=media_receita)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=recursos_de_outros_candidatos.comites)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=recursos_de_partidos)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=recursos_pessoas_fisicas)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=recursos_de_pessoas_juridicas)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=recursos_proprios)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=quantidade_despesas)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=quantidade_fornecedores)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=total_despesa)) + geom_point(size = 2,shape =23 )
ggplot(df,aes(x=votos,y=media_despesa)) + geom_point(size = 2,shape =23 )
Nesse tipo de análise, podemos falar sobre a predição do modelo. Cada plot desse, sendo cada um uma variável em relação a votos, mostra a o estudo de como as variáveis irão predizer a regressão. Nesses casos, podemos observar que, em todos os modelos, existe um certo montante concentrado. Esse montante mostra que, naquela variável, a dispersão é pequena e tem pouca tendência a erros
Para selecionar as variáveis que vão ser estudadas, vamos pegar os menores p-valores do estudo que, na teoria, seriam as variáveis que melhor explicariam o modelo.Vamos partir da questão 1:
total_data <- lm(votos~ total_receita,df)
summary(total_data)
##
## Call:
## lm(formula = votos ~ total_receita, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -200492 -7188 -6572 -3524 1431317
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.292e+03 5.879e+02 12.40 <2e-16 ***
## total_receita 4.384e-02 8.701e-04 50.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 35670 on 4150 degrees of freedom
## Multiple R-squared: 0.3795, Adjusted R-squared: 0.3794
## F-statistic: 2539 on 1 and 4150 DF, p-value: < 2.2e-16
recursos_data <- lm(votos~ recursos_de_partidos,df)
summary(recursos_data)
##
## Call:
## lm(formula = votos ~ recursos_de_partidos, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -252026 -16359 -7311 -3478 1512299
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.571e+03 7.381e+02 8.902 <2e-16 ***
## recursos_de_partidos 5.491e-02 1.885e-03 29.126 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41270 on 4150 degrees of freedom
## Multiple R-squared: 0.1697, Adjusted R-squared: 0.1695
## F-statistic: 848.3 on 1 and 4150 DF, p-value: < 2.2e-16
proprios_data <- lm(votos~ recursos_proprios,df)
summary(proprios_data)
##
## Call:
## lm(formula = votos ~ recursos_proprios, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -157073 -16459 -14039 -6999 1509201
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.488e+04 7.283e+02 20.43 <2e-16 ***
## recursos_proprios 5.325e-02 4.985e-03 10.68 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 44680 on 4150 degrees of freedom
## Multiple R-squared: 0.02675, Adjusted R-squared: 0.02652
## F-statistic: 114.1 on 1 and 4150 DF, p-value: < 2.2e-16
Apenas para enfatizar, os p-valores das 3 variáveis acima realmente são bons, vendo assim que elas são, na teoria, umas das melhores variáveis para predizer o estudo.
Agora poderemos analisar as demais variáveis. O R-squared da primeira variável, que é total_receita, tem o valor de 0.3795, ou seja, ela sozinha explica 37% do estudo, quase 40%. Podemos ver, juntamente com seu p-valor, que ela é realmente uma boa variável para se fazer um estudo sobre esse modelo.
As demais variáveis não são tão surpreendentes quando falamos sobre o R-squared: O valor dessa variável em recursos_de_partidos é de 16%; Já o valor dessa variável em recursos_proprios é maior, totalizando 26%.
Para essa amostra, bons valores para R-squared e adjusted R-squared foram apresentados, vendo que o estudo pode ser bem predito a partir de alguns valores, que foram mostrados acima.
Outra valor que nos ajudou ao longo desse estudo foi o p-valor. Ela nos mostrou quais as variáveis que mais se encaixariam no nosso estudo e nos ajudou a formar a maioria das conclusões.
O único ponto preocupando é o RSE. Essa variável mede o erro padrão naquele estudo. Em todos os nosso estudos esses números deram muito altos, mostrando assim que esse estudo pode não ser tão bom como as duas variáveis acima mostram.