library(tidyverse)
library(ggbeeswarm)
library(modelr)
library(broom)
theme_set(theme_bw())
parlamentares = read_csv(here::here("data/atividade-por-perfil-20190322.csv"),
col_types = "dcccccddddddddddddd")
glimpse(parlamentares)
## Observations: 608
## Variables: 19
## $ id_parlamentar <dbl> 204554, 204521, 204379, 204560, 204528, 12…
## $ casa <chr> "câmara", "câmara", "câmara", "câmara", "c…
## $ nome_eleitoral <chr> "ABÍLIO SANTANA", "ABOU ANNI", "ACÁCIO FAV…
## $ partido <chr> "PR", "PSL", "PROS", "PSDB", "NOVO", "PP",…
## $ UF <chr> "BA", "SP", "AP", "BA", "SP", "GO", "MG", …
## $ twitter <chr> "AbilioSantana_", "abouannipv", "FavachoAc…
## $ seguidores <dbl> NA, NA, NA, NA, 4652, NA, NA, NA, NA, NA, …
## $ segue <dbl> NA, NA, NA, NA, 315, NA, NA, NA, NA, NA, N…
## $ n_proprio <dbl> 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, NA, 4…
## $ n_retweet <dbl> 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, NA, 1,…
## $ engaj_total <dbl> 0, 0, 0, 0, 7090, 0, 0, 0, 0, 0, 0, 0, NA,…
## $ engaj_total_proprio <dbl> 0, 0, 0, 0, 6701, 0, 0, 0, 0, 0, 0, 0, NA,…
## $ engaj_total_retweet <dbl> 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, NA, …
## $ engaj_mediano <dbl> 0.0, 0.0, 0.0, 0.0, 26.5, 0.0, 0.0, 0.0, 0…
## $ engaj_mediano_proprio <dbl> 0.0, 0.0, 0.0, 0.0, 22.5, 0.0, 0.0, 0.0, 0…
## $ engaj_mediano_retweet <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.…
## $ engaj_max <dbl> 0, 0, 0, 0, 1031, 0, 0, 0, 0, 0, 0, 0, NA,…
## $ engaj_max_proprio <dbl> 0, 0, 0, 0, 1031, 0, 0, 0, 0, 0, 0, 0, NA,…
## $ engaj_max_retweet <dbl> 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, NA, 4…
parla = parlamentares %>%
filter(n_proprio >= 10, !is.na(twitter), !is.na(seguidores), segue > 0, seguidores > 0, n_proprio > 0, n_retweet > 0, engaj_mediano > 0) %>%
mutate(segueLog = log10(segue),
seguidoresLog = log10(seguidores),
n_proprioLog = log10(n_proprio),
n_retweetLog = log10(n_retweet),
engaj_totalLog = log10(engaj_total),
engaj_medianoLog = log10(engaj_mediano))
glimpse(parla)
## Observations: 272
## Variables: 25
## $ id_parlamentar <dbl> 204528, 178836, 160559, 204545, 204501, 20…
## $ casa <chr> "câmara", "câmara", "câmara", "câmara", "c…
## $ nome_eleitoral <chr> "ADRIANA VENTURA", "ALAN RICK", "ALCEU MOR…
## $ partido <chr> "NOVO", "DEM", "MDB", "PSL", "PT", "PSL", …
## $ UF <chr> "SP", "AC", "RS", "MG", "SP", "SP", "SP", …
## $ twitter <chr> "adrianasounovo", "Alan_Rick", "Alceu_More…
## $ seguidores <dbl> 4652, 3983, 6370, 464, 6447, 161745, 14708…
## $ segue <dbl> 315, 995, 434, 267, 3253, 2015, 1035, 384,…
## $ n_proprio <dbl> 99, 49, 214, 39, 346, 830, 485, 201, 290, …
## $ n_retweet <dbl> 9, 1, 30, 4, 100, 169, 204, 95, 45, 50, 10…
## $ engaj_total <dbl> 7090, 4286, 6852, 10231, 69348, 566011, 11…
## $ engaj_total_proprio <dbl> 6701, 284, 2239, 186, 47967, 320063, 89409…
## $ engaj_total_retweet <dbl> 389, 4002, 4613, 10045, 21381, 245948, 228…
## $ engaj_mediano <dbl> 26.5, 4.0, 8.0, 4.0, 16.5, 134.0, 49.0, 67…
## $ engaj_mediano_proprio <dbl> 22.5, 4.0, 8.0, 4.0, 12.0, 60.0, 27.0, 22.…
## $ engaj_mediano_retweet <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ engaj_max <dbl> 1031, 4002, 4227, 8171, 12335, 20348, 3643…
## $ engaj_max_proprio <dbl> 1031, 38, 136, 14, 12335, 7271, 3643, 1834…
## $ engaj_max_retweet <dbl> 99, 4002, 4227, 8171, 8623, 20348, 3302, 1…
## $ segueLog <dbl> 2.498311, 2.997823, 2.637490, 2.426511, 3.…
## $ seguidoresLog <dbl> 3.667640, 3.600210, 3.804139, 2.666518, 3.…
## $ n_proprioLog <dbl> 1.995635, 1.690196, 2.330414, 1.591065, 2.…
## $ n_retweetLog <dbl> 0.9542425, 0.0000000, 1.4771213, 0.6020600…
## $ engaj_totalLog <dbl> 3.850646, 3.632052, 3.835817, 4.009918, 4.…
## $ engaj_medianoLog <dbl> 1.4232459, 0.6020600, 0.9030900, 0.6020600…
parla %>%
ggplot(aes(x = segueLog, y = engaj_totalLog)) +
geom_point()
modelo_total = lm(engaj_totalLog ~ n_proprioLog + n_retweetLog + casa + segueLog + seguidoresLog,
data = parla)
tidy(modelo_total,
conf.int = TRUE)
glance(modelo_total)
Regressão linear múltipla foi utilizada para analisar a associação entre casa de atuação do parlamentar, quantos perfis ele/a segue, quantos perfis seguem o/a parlamentar, número de tweets próprios, número de retweets e o engajamento total obtido. Os resultados da regressão indicam que um modelo no formato:
engaj_totalLog = -0,134.casa - 0,239.segueLog + 0,602.seguidoresLog + 0,562.n_proprioLog + 0,803.n_retweetLog + 0,251
explicam 70,94% da variância da variável de resposta (R2 = 0,7094).
Se o parlamentar for do senado produz uma mudança de 0,134 a menos em engaj_total do que se ele for da câmara.
O aumento de 1 unidade de segueLog medida em perfis produz uma mudança de -0,239 em engaj_total.
O aumento de 1 unidade de seguidoresLog medida em perfis produz uma mudança de 0,602 em engaj_total.
O aumento de 1 unidade de n_proprioLog medida em perfis produz uma mudança de 0,562 em engaj_total.
O aumento de 1 unidade de n_retweetLog medida em perfis produz uma mudança de 0,803 em engaj_total.
Portanto, percebi que, dentre os aspectos estudados para o modelo, a quantidade de retweets, de seguidores e de tweets próprios são os fatores que mais colaboram positivamente para o engajamento total de um parlamentar, além disso, vi também que, estranhamente, a quantidade de pessoas que o parlamentar segue afeta negativamente o seu engajamento total.
plot_modelo_total = parla %>%
data_grid(n_proprioLog = mean(n_proprioLog), # todos na média
n_retweetLog = mean(n_retweetLog),
casa = c("senado", "câmara"),
segueLog = seq_range(segueLog, 20), # Crie um vetor de 20 valores no range
seguidoresLog = mean(seguidoresLog)) %>%
add_predictions(modelo_total)
glimpse(plot_modelo_total)
## Observations: 40
## Variables: 6
## $ n_proprioLog <dbl> 2.013187, 2.013187, 2.013187, 2.013187, 2.013187, …
## $ n_retweetLog <dbl> 1.213797, 1.213797, 1.213797, 1.213797, 1.213797, …
## $ casa <chr> "câmara", "câmara", "câmara", "câmara", "câmara", …
## $ segueLog <dbl> 1.146128, 1.315386, 1.484644, 1.653902, 1.823160, …
## $ seguidoresLog <dbl> 3.935894, 3.935894, 3.935894, 3.935894, 3.935894, …
## $ pred <dbl> 4.458516, 4.418009, 4.377502, 4.336995, 4.296488, …
ggplot(data = parla, aes(x = segueLog)) +
geom_point(aes(y = engaj_totalLog)) +
geom_line(data = plot_modelo_total, aes(y = pred), color = "pink", size = 1.5) +
facet_wrap(~ casa) +
labs(x = "Pessoas seguidas em log10",
y = "Engajamento total em log10")
Escolhi nessa visualização observar o número de pessoas seguidas por parlamentares, da câmara e do senado, e comparar com seus engajamentos totais, ambos em log10. A linha rosa representa o padrão achado pelo modelo, onde em ambos decai com o crescimento do número de pessoas seguidas.
ggplot(data = parla, aes(x = 10**segueLog)) +
geom_line(data = plot_modelo_total, aes(y = 10**pred), color = "pink", size = 1.5) +
facet_wrap(~casa) +
labs(x = "Pessoas seguidas",
y = "Previsão de engajamento total")
Aqui podemos ver a linha de previsão, de acordo com o modelo criado, de engajamento total para o número de pessoas seguidas para um parlamentar. Existe uma grande queda nas primeiras 2500 pessoas seguidas e depois alivia a queda.
modelo_mediano = lm(engaj_medianoLog ~ casa + segueLog + seguidoresLog + n_proprioLog + n_retweetLog,
data = parla)
tidy(modelo_mediano,
conf.int = TRUE)
glance(modelo_mediano)
Regressão linear múltipla foi utilizada para analisar a associação entre casa de atuação do parlamentar, quantos perfis ele/a segue, quantos perfis seguem o/a parlamentar, número de tweets próprios, número de retweets e o engajamento mediano obtido. Os resultados da regressão indicam que um modelo no formato:
engaj_medianoLog = -0,187.casa - 0,319.segueLog + 0,763.seguidoresLog - 0,192.n_proprioLog + 0,288.n_retweetLog - 0,825
explicam 57,83% da variância da variável de resposta (R2 = 0,5783).
Se o parlamentar for do senado produz uma mudança de 0,187 a menos em engaj_total do que se ele for da câmara.
O aumento de 1 unidade de segueLog medida em perfis produz uma mudança de -0,319 em engaj_total.
O aumento de 1 unidade de seguidoresLog medida em perfis produz uma mudança de 0,763 em engaj_total.
O aumento de 1 unidade de n_proprioLog medida em perfis produz uma mudança de -0,192 em engaj_total.
O aumento de 1 unidade de n_retweetLog medida em perfis produz uma mudança de 0,288 em engaj_total.
Portanto, se mantiveram parecidas algumas das métricas do estudo passado, porém tendo como diferença, para engajamento mediano, o número de tweets próprios, que agora afeta negativamente o engajamento do parlamentar.
plot_modelo_mediano = parla %>%
data_grid(n_proprioLog = mean(n_proprioLog), # todos na média
n_retweetLog = mean(n_retweetLog),
casa = c("senado", "câmara"),
segueLog = seq_range(segueLog, 20), # Crie um vetor de 20 valores no range
seguidoresLog = mean(seguidoresLog)) %>%
add_predictions(modelo_mediano)
glimpse(plot_modelo_mediano)
## Observations: 40
## Variables: 6
## $ n_proprioLog <dbl> 2.013187, 2.013187, 2.013187, 2.013187, 2.013187, …
## $ n_retweetLog <dbl> 1.213797, 1.213797, 1.213797, 1.213797, 1.213797, …
## $ casa <chr> "câmara", "câmara", "câmara", "câmara", "câmara", …
## $ segueLog <dbl> 1.146128, 1.315386, 1.484644, 1.653902, 1.823160, …
## $ seguidoresLog <dbl> 3.935894, 3.935894, 3.935894, 3.935894, 3.935894, …
## $ pred <dbl> 1.7767116, 1.7226880, 1.6686645, 1.6146409, 1.5606…
ggplot(data = parla, aes(x = segueLog)) +
geom_point(aes(y = engaj_medianoLog)) +
geom_line(data = plot_modelo_mediano, aes(y = pred), color = "pink", size = 1.5) +
facet_wrap(~ casa) +
labs(x = "Pessoas seguidas em log10",
y = "Engajamento mediano em log10")
Escolhi nessa visualização observar o número de pessoas seguidas por parlamentares, da câmara e do senado, e comparar com seus engajamentos medianos, ambos em log10. A linha rosa representa o padrão achado pelo modelo, onde em ambos decai com o crescimento do número de pessoas seguidas.
ggplot(data = parla, aes(x = 10**segueLog)) +
geom_line(data = plot_modelo_mediano, aes(y = 10**pred), color = "pink", size = 1.5) +
facet_wrap(~casa) +
labs(x = "Pessoas seguidas",
y = "Previsão de engajamento mediano")
Aqui podemos ver a linha de previsão, de acordo com o modelo criado, de engajamento mediano para o número de pessoas seguidas para um parlamentar. Nesse caso, a queda maior acontece até antes das 2500 pessoas seguidas e depois, assim como no passado, alivia a queda.