Preparació de les dades

S’utilitzarà el baròmetre del Centre d’Estudis d’Opinió realitzat entre 13 a 21 de gener de 2021, dies abans de les eleccions catalanes del 14 de febrer. El baròmetre es pot descarregar aquí.

library("haven")
setwd("/Users/rodoncas/G.Drive UPF/Tutorials/Participació/")
df <- read_sav("Microdades anonimitzades -992.sav")

Netegem la base de dades per tal d’analitzar-la amb més facilitat.

library("dplyr")
df <- df %>% 
  mutate(part = replace(df$P11, df$P11 == 98 | df$P11 == 99, NA),
         gestio_pandemia = replace(df$P13_E, df$P13_E == 98 | df$P13_E == 99, NA),
         ideol = replace(df$P6, df$P6 == 98 | df$P6 == 99, NA),
         catalanisme = replace(df$P7, df$P7 == 98 | df$P7 == 99, NA),
         sexe = if_else(df$SEXE==2,0,1))

df$compol <- NA
df$compol[df$P18R_CENS==1] <- "PP"
df$compol[df$P18R_CENS==3] <- "ERC"
df$compol[df$P18R_CENS==4] <- "PSC"
df$compol[df$P18R_CENS==6] <- "Cs"
df$compol[df$P18R_CENS==10] <- "CUP"
df$compol[df$P18R_CENS==21] <- "JxCat"
df$compol[df$P18R_CENS==22] <- "ECP"
df$compol <- as.factor(df$compol)

df$compol  <- relevel(df$compol , "PSC")

df$simpatia <- NA
df$simpatia[df$P5==1] <- "PP"
df$simpatia[df$P5==3] <- "ERC"
df$simpatia[df$P5==4] <- "PSC"
df$simpatia[df$P5==6] <- "Cs"
df$simpatia[df$P5==10] <- "CUP"
df$simpatia[df$P5==21] <- "JxCat"
df$simpatia[df$P5==22] <- "ECP"
df$simpatia[df$P5==95] <- "Cap"
df$simpatia <- as.factor(df$simpatia)


df$part <- as.numeric(df$part)
df$part_binaria <- NA 
df$part_binaria[df$part>6] <-"Probablement votarà el 14-F"
df$part_binaria[df$part<7] <-"Probablement s'abstindrà el 14-F"
df$part_binaria <- as.factor(df$part_binaria)

df$ingressos <- df$P38
df$ingressos[df$ingressos==98] <- 7
df$ingressos[df$ingressos==99] <- 7

df$ingressos <- factor(df$ingressos,
                       levels = c(1,2,3,4,5,6,7),
                       labels = c("No té cap tipus d'ingrés",
                                  "Menys o igual a 300 €",
                                  "De 301 a 600 €",
                                  "De 601 a 900 €",
                                  "De 900 a 1000 €",
                                  "De 1001 a 1200 €",
                                  "Ns/Nc"))
df$size <- NA
df$size[df$HABITAT<4]<- 1
df$size[df$HABITAT==4]<- 2
df$size[df$HABITAT>4]<- 3

df$size <- factor(df$size,
                       levels=c(1,2,3),
                       labels=c("Menys de 50mil habitants",
                                "Entre 50mil i 150mil habitants",
                                "Més de 150mil habitants"))

df$edat_grups <- factor(df$EDAT_GR,
                       levels = c(1,2,3,4,5),
                       labels=c("De 18 a 24 anys",
                                "De 25 a 34 anys",
                                "De 35 a 49 anys",
                                "De 50 a 64 anys",
                                "Més de 64 anys"))

Resultats

El gràfic següent mostra la distribució de la probabilitat de participar en les eleccions.

library("ggplot2")
library("ggtext")
ggplot(df, aes(x=part)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) +
    geom_vline(xintercept = mean(df$part, na.rm = T), color="blue",lty = 2) +
ylab("Densitat") +
  xlab("Amb quina seguretat anirà a votar?<br>0=Amb tota seguretat no aniré a votar; 10=Amb tota seguretat aniré a votar")  +
  theme(axis.title.x = element_markdown()) +
 scale_y_continuous(labels=scales::percent) +
annotate("text", x = 7.2, y = 0.6, label = "Mitjana")

Quina és la probabilitat declarada de participar entre els votants de cadascun dels partits (record de vot a les eleccions del 2017)?

part2 <- df %>% 
  group_by(compol, part) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>% 
  na.omit()


ggplot(part2, aes(x=part, y = freq)) +
  geom_bar(stat = "identity") +
  facet_grid(~compol) +
  xlab("Amb quina seguretat anirà a votar?") +
  ggtitle("Amb quina seguretat aniran a votar els votants de diferents partits") +
  xlab("Amb quina seguretat anirà a votar?<br>0=Amb tota seguretat no aniré a votar; 10=Amb tota seguretat aniré a votar")  +
  theme(axis.title.x = element_markdown()) +
      geom_vline(xintercept = mean(df$part, na.rm = T), color="blue",lty = 2) +
   scale_y_continuous(labels=scales::percent) 

Quina és la probabilitat declara de participar entre els simpatitzants de cadascun dels partits (record de vot a les eleccions del 2017)?

part3 <- df %>% 
  group_by(simpatia, part) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>% 
  na.omit()

ggplot(part3, aes(x=part, y = freq)) +
  geom_bar(stat = "identity") +
  facet_grid(~simpatia) +
  xlab("Amb quina seguretat anirà a votar?") +
  ggtitle("Amb quina seguretat aniran a votar els simpatitzants de diferents partits") +
  xlab("Amb quina seguretat anirà a votar?<br>0=Amb tota seguretat no aniré a votar; 10=Amb tota seguretat aniré a votar")  +
  theme(axis.title.x = element_markdown()) +
      geom_vline(xintercept = mean(df$part, na.rm = T), color="blue",lty = 2) +
   scale_y_continuous(labels=scales::percent) 

El gràfic i la taula següents mostren la probabilitat de participar per record de vot. Per fer-ho més llegible, s’ha dividit la probabilitat de participar en dos valors: 1) Probablement votarà el 14-F: si la persona respon un valor més alt d’un 7 (aquest inclòs). 0) Tota la resta es considera que probablement s’abstindran.

library("sjPlot")
tab_xtab(var.row = df$part_binaria, var.col = df$compol, title = "Probabilitat de participar per record de vot", show.col.prc = TRUE, 
           show.obs = F, var.labels =c("Probabilitat de participar el 2021", "Record de vot 2017"))
Probabilitat de participar per record de vot
Probabilitat de
participar el 2021
Record de vot 2017 Total
PSC Cs CUP ECP ERC JxCat PP
Probablement
s’abstindrà el 14-F
16.9 % 23.8 % 6.4 % 11.4 % 12.3 % 5.5 % 33.3 % 12.9 %
Probablement votarà
el 14-F
83.1 % 76.2 % 93.6 % 88.6 % 87.7 % 94.5 % 66.7 % 87.1 %
Total 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 %
χ2=19.462 · df=6 · Cramer’s V=0.166 · Fisher’s p=0.001
library("CGPfunctions")
PlotXTabs(df,part_binaria,compol,"percent") 

La taula i el gràfic següents mostren la probabilitat de votar o abstenir-se, en aquest cas en funció de la ideologia de l’enquestat.

tab_xtab(var.row = df$part_binaria, var.col = df$ideol, title = "Probabilitat de participar per ideologia", show.col.prc = TRUE, 
           show.obs = F, var.labels =c("Probabilitat de participar el 2021", "Ideologia"))
Probabilitat de participar per ideologia
Probabilitat de
participar el 2021
Ideologia Total
Extrema esquerra Esquerra Centre-esquerra Centre Centre-dreta Dreta Extrema dreta
Probablement
s’abstindrà el 14-F
12.5 % 12.5 % 11.1 % 19.5 % 24 % 21.1 % 0 % 14 %
Probablement votarà
el 14-F
87.5 % 87.5 % 88.9 % 80.5 % 76 % 78.9 % 100 % 86 %
Total 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 %
χ2=11.711 · df=6 · Cramer’s V=0.112 · Fisher’s p=0.086
PlotXTabs(df,part_binaria,ideol,"percent")

La taula i el gràfic següents mostren la probabilitat de votar o abstenir-se en funció del sentiment catalanista de l’enquestat.

tab_xtab(var.row = df$part_binaria, var.col = df$catalanisme, title = "Probabilitat de participar per sentiment catalanista", show.col.prc = TRUE, weight.by = df$PONDERA,
           show.obs = F, var.labels =c("Probabilitat de participar el 2021", "Sentiment catalanista"))
Probabilitat de participar per sentiment catalanista
Probabilitat de
participar el 2021
Sentiment
catalanista
Total
Mínim catalanisme 1 2 3 4 5 6 7 8 9 Màxim catalanisme
Probablement
s’abstindrà el 14-F
44.8 % 22.2 % 13.3 % 13.6 % 28.2 % 26.4 % 22.1 % 16.7 % 12.3 % 8.7 % 4.9 % 17.9 %
Probablement votarà
el 14-F
55.2 % 77.8 % 86.7 % 86.4 % 71.8 % 73.6 % 77.9 % 83.3 % 87.7 % 91.3 % 95.1 % 82.1 %
Total 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 % 100 %
χ2=76.247 · df=10 · Cramer’s V=0.271 · Fisher’s p=0.000
PlotXTabs(df,part_binaria,catalanisme,"percent")

Model multivariant

S’estudia la probabilitat de participar en les eleccions del 14-F en funció de la ideologia d’una persona, el seu sentiment catalanista, la percepció de la gestió de la pandèmia (0 = No tindré gens en compte l’actuació de cada partit durant la pandèmia de la COVID-19; 10 = Ho tindré molt en compte), el sexe de l’enquestat (1=Home, 0=Dona) i l’edat. Un segon model incorpora el record de vot per veure si hi ha mobilització o desmobilització diferencial en funció del vot efectuat el 2017.

mod <- lm(part ~ ideol + catalanisme + gestio_pandemia + sexe + edat_grups + size, data=df)
mod2 <- lm(part ~ ideol + catalanisme + gestio_pandemia + sexe + edat_grups + size + compol, data=df)
library("jtools")
export_summs(mod,mod2, scale=T)
Model 1Model 2
(Intercept)8.03 ***8.96 ***
(0.30)   (0.46)   
ideol-0.07    -0.08    
(0.09)   (0.11)   
catalanisme0.52 ***0.49 ***
(0.08)   (0.12)   
gestio_pandemia0.25 ** 0.09    
(0.08)   (0.09)   
sexe-0.15    -0.30    
(0.16)   (0.17)   
edat_grupsDe 25 a 34 anys0.47    -0.03    
(0.36)   (0.44)   
edat_grupsDe 35 a 49 anys0.90 ** 0.19    
(0.31)   (0.41)   
edat_grupsDe 50 a 64 anys1.01 ** 0.61    
(0.32)   (0.41)   
edat_grupsMés de 64 anys0.79 *  0.23    
(0.32)   (0.42)   
sizeEntre 50mil i 150mil habitants-0.04    -0.30    
(0.22)   (0.23)   
sizeMés de 150mil habitants0.22    -0.05    
(0.18)   (0.19)   
compolCs       0.34    
       (0.41)   
compolCUP       -0.14    
       (0.41)   
compolECP       0.57    
       (0.32)   
compolERC       -0.12    
       (0.28)   
compolJxCat       0.18    
       (0.35)   
compolPP       -0.25    
       (0.93)   
N880       629       
R20.08    0.07    
All continuous predictors are mean-centered and scaled by 1 standard deviation. *** p < 0.001; ** p < 0.01; * p < 0.05.
plot_summs(mod,mod2, scale=T)

Explorem els valors predits de dues variables significatives.

library("ggeffects")
mydf <- ggpredict(mod, terms = "catalanisme")
ggplot(mydf, aes(x, predicted)) +
  geom_line() +
  geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .1) +
  xlab("Sentiment catalanista") +
  ylab("Probabilitat de participar el 14-F")

mydf2 <- ggpredict(mod, terms = "gestio_pandemia")
ggplot(mydf2, aes(x, predicted)) +
  geom_line() +
  geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .1) +
  xlab("Importància de la pandèmia pel vot de l'enquestat") +
    ylab("Probabilitat de participar el 14-F")

Relació entre la incidència de la covid i la participació electoral

La Covid-19 ha afectat amb més intensitat aquelles zones que van participar més el 2017?

Obrim la base de dades.

dfvirus <- read.csv("casos_municipi.csv",sep = ";",encoding = "latin1", header=T)
library("stringr")
library("tidyr")
dfvirus$codi_unic <- str_pad(dfvirus$MUNICIPICODI, 5, pad = "0")
dfvirus <- dfvirus %>% 
    drop_na(codi_unic)

Calculem número de casos per municipi,

dfcasos <- dfvirus %>% 
  group_by(codi_unic,MUNICIPIDESCRIPCIO) %>% 
  summarise(casos = sum(NUMCASOS), .groups = 'drop')

Importem base de dades electoral i del padró. Fem la unió entre ambdues.

dfturnout <- read.csv("turnout_17.csv",sep = ",",encoding = "latin1", header=T, na.strings = "..")
dfturnout <- dfturnout %>% 
    mutate(codi_unic=str_pad(codi, 6, pad = "0"),
           part=((votants*100)/electors))

dfturnout$codi_unic <-   substr(dfturnout$codi_unic, 1, 5)

dfpadro <- read.csv("padro_20.csv",sep = ",",encoding = "latin1", header=T, na.strings = "..")
dfpadro <- dfpadro %>% 
    mutate(codi_unic=str_pad(Codi, 6, pad = "0"))

dfpadro$codi_unic <-  substr(dfpadro$codi_unic, 1, 5)

library("purrr")
dfcovid <- list(dfcasos, dfturnout, dfpadro) %>% 
  reduce(left_join, by = "codi_unic")

dfcovid <- dfcovid %>% 
  mutate(pcasos=(casos*100)/Total)

Aprofitem l’avinentesa per fer uns mapes.

library("sf")
muncat <- st_read("shp/Municipis.shp")
## Reading layer `Municipis' from data source `/Users/rodoncas/G.Drive UPF/Tutorials/Participació/shp/Municipis.shp' using driver `ESRI Shapefile'
## Simple feature collection with 946 features and 6 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 17720.01 ymin: 4942225 xmax: 370986 ymax: 5290896
## projected CRS:  WGS 84 / Pseudo-Mercator
muncat <- left_join(muncat, dfcovid, by = c("Codigo"= "codi_unic"))

Primer un mapa de la participació el 2017.

library("viridis")
map_part <- ggplot() +
  geom_sf(data=muncat, aes(fill = part)) +
  scale_fill_viridis(direction = -1) +
  theme(panel.background = element_blank(),                               
  line = element_blank(),                                                    
axis.text = element_blank(),                                             
axis.title = element_blank(),
legend.position = "bottom",
legend.title=element_blank()) +
  ggtitle("Participació a les eleccions\n catalanes del 2017")

Després un mapa del percentatge de casos per municipi

library("viridis")
map_casos<- ggplot() +
  geom_sf(data=muncat, aes(fill = pcasos)) +
 scale_fill_gradient(low="white",high="red3") +
theme(panel.background = element_blank(),                               
  line = element_blank(),                                                    
axis.text = element_blank(),                                             
axis.title = element_blank(),
legend.position = "bottom",
legend.title=element_blank()) +
  ggtitle("% de casos de Covid \nfins el febrer del 2021")

Ara els posem un al costat de l’altre.

library("gridExtra")
grid.arrange(map_part, map_casos, ncol = 2)

Hi ha relació entre el percentatge de casos de covid i la participació registrada el 2017?

ggplot(dfcovid, aes(pcasos, part)) +
  geom_point(shape = 16, size = 5, show.legend = FALSE, alpha = .4) +
  theme_minimal() +
  ylab("Participació a les eleccions catalanes del 2017") +
  xlab("% de casos de Covid fins el febrer del 2021") +
    geom_smooth(method="loess")