20  CHES data

20.1 Introducció

La Chapel Hill Expert Survey (CHES) (Bakker et al., 2020) és una base de dades que ofereix informació detallada sobre el posicionament polític dels partits d’arreu d’Europa en diversos àmbits, com l’eix esquerra-dreta, la integració europea i la immigració, entre altres. Aquesta base de dades és una iniciativa de la Universitat de Chapel Hill, als Estats Units, i porta més de dues dècades classificant sistemàticament els partits polítics. Va començar el 1999 amb 14 països, va ampliar-se a 24 països el 2006 i va arribar a cobrir 31 països el 2019, augmentant el nombre de partits avaluats de 143 a 277.

La metodologia utilitzada es basa en enquestes a experts. Aquest procés implica que cada partit polític és avaluat per diversos experts en ciències polítiques, que puntuen el posicionament ideològic del partit en diferents àmbits. Els experts seleccionats per participar en les enquestes són acadèmics i investigadors reconeguts en el camp de la política comparada, amb un coneixement profund dels sistemes polítics i dels partits dels països analitzats. Els resultats obtinguts de les enquestes són després agregats i analitzats per proporcionar una visió clara i sistemàtica del panorama polític europeu, permetent comparacions entre països i al llarg del temps.

20.2 Descàrrega de dades

Per treballar les dades de CHES, ens descarregarem el llibre de codis (Codebook) i els dos conjunts de dades del 2019. Aquestes dades proporcionen la mateixa informació, però en dos nivells d’anàlisi diferents:

  • Partits polítics (versió en csv de Dataset): la unitat d’observació és el partit polític.
  • Experts (versió en CSV d’Expert-level Dataset): la unitat d’observació és l’avaluació d’un partit polític per part d’un expert.

Una vegada descarregats els dos conjunts de dades en format CSV, situarem els arxius al directori de treball i importarem les dades a R a través del codi següent. Haurem d’utilitzar la funció read_csv() del paquet readr, que carregarem juntament amb tots els altres paquets que farem servir en aquesta activitat (Wickham, François, et al., 2023; Wickham, Hester, et al., 2023; Wickham, 2023; Wickham et al., 2024).

library(readr)
library(dplyr)
library(ggplot2)
library(stringr)
ches <- read_csv("CHES2019V3.csv")
ches_exp <- read_csv("CHES2019_experts.csv")

Una opció alternativa és descarregar les dades directament de la seva localització a internet. Només caldrà indicar l’enllaç com a valor de caràcter dins de la funció.

ches <- read_csv("https://www.chesdata.eu/s/CHES2019V3.csv")
ches_exp <- read_csv("https://www.chesdata.eu/s/CHES2019_experts.csv")

20.3 Dades a nivell de partit polític

En el conjunt de dades que hem emmagatzemat a l’objecte ches, cada observació correspon a un partit polític diferent. Les primeres observacions corresponen al país 1 (que si el busquem al llibre de codis, veurem que corresponen a Bèlgica) i té partits polítics com el PS, l’SP/SPA, etc. Cada partit polític té un codi numèric d’identificació, especificat a la columna party_id i del cinquè vector en endavant observem el posicionament ideològic de cada partit polític en determinats temes. Per exemple, eu_position classifica els partits en funció del seu posicionament envers la Unió Europea (UE), sent 1 molt desfavorable i 7 molt favorable. Com veiem, el partit que té un posicionament més desfavorable a la UE és VB (Vlaams Belang), amb una puntuació de 2,25.

ches
## # A tibble: 277 × 55
##    country eastwest party   party_id eu_position eu_position_sd eu_salience
##      <dbl>    <dbl> <chr>      <dbl>       <dbl>          <dbl>       <dbl>
##  1       1        1 PS           102        6.08          0.289        4.27
##  2       1        1 SP/SPA       103        6             0.426        4.18
##  3       1        1 ECOLO        104        6.58          0.515        4.82
##  4       1        1 AGALEV       105        6.58          0.515        4.82
##  5       1        1 PRL/MR       106        6.5           0.674        5.09
##  6       1        1 VLD/PVV      107        6.83          0.389        5.09
##  7       1        1 PSC/CDH      108        6.42          0.793        4.36
##  8       1        1 CDV          109        6.58          0.669        4.73
##  9       1        1 VU/NVA       110        4.25          0.965        4.27
## 10       1        1 VB           112        2.25          0.622        4.73
## # ℹ 267 more rows
## # ℹ 48 more variables: eu_dissent <dbl>, eu_blur <dbl>, eu_cohesion <dbl>,
## #   eu_foreign <dbl>, eu_intmark <dbl>, eu_budgets <dbl>, eu_asylum <dbl>,
## #   lrgen <dbl>, lrecon <dbl>, lrecon_sd <dbl>, lrecon_salience <dbl>,
## #   lrecon_dissent <dbl>, lrecon_blur <dbl>, galtan <dbl>, galtan_sd <dbl>,
## #   galtan_salience <dbl>, galtan_dissent <dbl>, galtan_blur <dbl>,
## #   immigrate_policy <dbl>, immigrate_salience <dbl>, …

20.3.1 Exploració de les dades

En lloc d’estudiar el posicionament dels partits polítics de Bèlgica, en aquest tutorial examinarem més a fons els partits polítics a Espanya. Amb el codi següent, crearem un nou objecte anomenat ches_es, on haurem de:

  • Filtrar pel número de país, segons la classificació del llibre de codis. Veiem que Espanya està identificada amb el número 5.
  • Seleccionar les variables que ens interessen.
ches_es <- ches |> 
  filter(country == 5) |> 
  select(party, eu_position, lrecon, galtan, multiculturalism, environment) 
Revisa el llibre de codis

Recorda que és important tenir a mà el llibre de codis de la base de dades CHES. Dins del document trobaràs més informació de les variables que acabem de seleccionar, com EU_POSITION o LRECON.

Exercici 1

Ara que has vist com filtrar només les dades per a Espanya, filtra la base de dades perquè només tingui dades de França fent els canvis que toquen al codi següent:

ches_fr <- ches |> 
  filter(country == ?) |> 
  select(party, eu_position, lrecon, galtan, multiculturalism, environment)

Si hem fet bé l’operació anterior, l’objecte haurà de contenir només les dades dels partits d’Espanya. Reproduirem l’objecte per comprovar-ho.

ches_es
## # A tibble: 13 × 6
##    party   eu_position lrecon galtan multiculturalism environment
##    <chr>         <dbl>  <dbl>  <dbl>            <dbl>       <dbl>
##  1 PSOE           6.80   3.8    2.93             4.33        3.8 
##  2 PPP            6.47   7.93   8                7.87        7.33
##  3 IU             5.29   1.8    2.2              3.2         3.2 
##  4 PNV            6.40   5.80   5.67             5.25        4.92
##  5 ERC            5.53   3.40   2.87             4           3.77
##  6 BNG            5.55   2.92   3.08             3.3         3.78
##  7 CC             6.38   6.36   6.31             6.25        5.45
##  8 EHB            4.5    1.47   1.75             2.90        2.40
##  9 Podemos        5.27   2.13   1.33             2.27        2.27
## 10 Cs             6.73   7.40   5.47             6.64        6.71
## 11 Vox            3.27   9.33   9.67             8.67        8.80
## 12 Pais           5.87   2.8    1.67             2.64        2.07
## 13 PdeCat         5.13   6.87   5.87             6.62        6.07

Fem-nos, ara, algunes preguntes sobre les dades, amb funcions que coneixem:

  • Quina és la mitjana en el posicionament esquerra-dreta? Si ens fixem en el llibre de codis, el valor 0 correspondria a l’extrema esquerra (anomenada també esquerra radical) i el valor 10, a l’extrema dreta (anomenada també dreta radical).
mean(ches_es$lrecon)
## [1] 4.770273
  • Quin és el partit que té una posició més desfavorable a la Unió Europea? Si ens fixem en el llibre de codis, el valor 1 correspondria a fortament desfavorable i el valor 7, a fortament favorable.
ches_es[ches_es$eu_position == min(ches_es$eu_position), ]
## # A tibble: 1 × 6
##   party eu_position lrecon galtan multiculturalism environment
##   <chr>       <dbl>  <dbl>  <dbl>            <dbl>       <dbl>
## 1 Vox          3.27   9.33   9.67             8.67        8.80
  • I el partit que té una posició més favorable al multiculturalisme? Si ens fixem en el llibre de codis, el valor 0 significa que el partit està a favor del multiculturalisme i el valor 10, que hi està en contra.
ches_es[ches_es$multiculturalism == min(ches_es$multiculturalism), ]
## # A tibble: 1 × 6
##   party   eu_position lrecon galtan multiculturalism environment
##   <chr>         <dbl>  <dbl>  <dbl>            <dbl>       <dbl>
## 1 Podemos        5.27   2.13   1.33             2.27        2.27
Exercici 2

Quin és el partit a Espanya amb posicions més desfavorables respecte al medi ambient? Recorda fer aquests passos:

  • Consultar com està construïda la variable al llibre de codis.
  • Buscar quin és el nom de la variable en qüestió en el marc de dades.
  • Modificar el codi anterior per obtenir-ne el resultat.

20.3.2 Visualització de dades

Un exercici interessant amb les dades de partits polítics és veure com estan alineats els eixos en dues temàtiques determinants. Per això podem crear un diagrama de dispersió, que ens mostra com estan relacionades dues variables numèriques entre si. A continuació, veurem la ubicació ideològica de tots els partits espanyols en l’eix econòmic (0, extrema dreta – 10, extrema esquerra) i en la posició respecte a la integració dels immigrants o refugiats (0 a favor de la multiculturalitat i 10 a favor de l’assimilació).

Per fer-ho, utilitzarem les funcions del paquet ggplot2 de la manera següent:

  • A l’eix de les \(x\) hi ubiquem lrecon (la ubicació en l’eix econòmic).
  • A l’eix de les \(y\) hi ubiquem multiculturalism (la posició integració/multiculturalitat).
  • Com a geometria, farem servir el geom_text(), que permet graficar amb els noms dels partits (party). Aquesta geometria només es pot fer servir quan els noms de les observacions són de pocs caràcters, com és el cas.
  • Com que són variables on el mínim és 0 i el màxim és 10, també especificarem els límits dels eixos del gràfic amb la funció lims().
ches_es |> 
  ggplot(aes(x = lrecon, y = multiculturalism)) +
  geom_text(aes(label = party)) +
  lims(x = c(0, 10), y = c(0, 10))

Com podem veure en aquest gràfic, sembla que hi ha una correlació bastant forta entre la preferència de multiculturalitat i l’eix econòmic. Veiem que VOX queda al marge superior dret (dreta econòmica i assimilació cultural), mentre que Bildu i Podemos queden al marge esquerra (esquerra econòmica i multiculturalitat).

Exercici 3

Ara prova tu de fer un gràfic de dispersió amb dues variables diferents del conjunt de dades.

ches_es |> 
  ggplot(aes(x = ?, y = ?)) +
  geom_text(aes(label = party))

20.4 Dades a nivell de codificador

Vegem l’altre conjunt de dades que hem descarregat. Concretament, el que hem emmagatzemat a l’objecte ches_exp, on cada observació correspon a la valoració que fa un expert d’un determinat partit polític. La primera observació de les dades, per exemple, correspon a la valoració que fa l’expert amb codi d’identificació 1 del partit GERB. Aquest expert va puntuar aquest partit amb un 7 en el seu posicionament vers la UE.

ches_exp
## # A tibble: 3,823 × 63
##       id party party_name     party_id position eu_salience eu_dissent eu_blur
##    <dbl> <dbl> <chr>             <dbl>    <dbl>       <dbl>      <dbl>   <dbl>
##  1     1     1 GERB               2010        7           9          1      NA
##  2     1     2 BSP                2003        5           6          4      NA
##  3     1     3 DPS                2004        7           9          2      NA
##  4     1     4 Volya              2017        3           6          4      NA
##  5     1     5 NFSB               2014        3           6          4      NA
##  6     1     6 Ataka              2007        3           6          4      NA
##  7     1     7 BMRO               2005        5           6          2      NA
##  8     1     8 DB                 2018        7          10          0      NA
##  9     1     9 DSB                2008        7          10          0      NA
## 10     1    10 Slavi Trifonov     2019        6           9          1      NA
## # ℹ 3,813 more rows
## # ℹ 55 more variables: lrecon <chr>, lrecon_blur <chr>, lrecon_dissent <dbl>,
## #   lrecon_salience <dbl>, galtan <chr>, galtan_blur <dbl>,
## #   galtan_dissent <dbl>, galtan_salience <dbl>, lrgen <dbl>,
## #   immigrate_policy <dbl>, immigra_salience <dbl>, immigrate_dissent <dbl>,
## #   multiculturalism <dbl>, multicult_salience <dbl>, multicult_dissent <dbl>,
## #   redistribution <dbl>, redist_salience <dbl>, environment <dbl>, …

Abans de continuar, cal advertir que hi ha un error en aquesta base de dades. La variable país no existeix, i la variable més semblant és la de cname (que es troba en les últimes columnes), que no ens serveix perquè molts països no tenen identificador en aquesta variable. Per resoldre-ho, aplicarem el següent codi, que ens permetrà crear una variable numèrica amb codi de país en els mateixos termes que tenim al llibre de codis.

ches_exp$country <- as.numeric(str_sub(ches_exp$party_id, end = -3))

20.4.1 Exploració de les dades

A continuació, farem el mateix procediment que en l’apartat anterior i explorarem les dades d’Espanya. Per a aquest propòsit, farem servir un codi molt semblant i el guardarem a l’objecte ches_exp_es:

ches_exp_es <- ches_exp |> 
  filter(country == 5) |>
  select(id, party_name, position, lrecon, multiculturalism, russian_interference)

L’objecte ches_exp_es conté l’avaluació de cada un dels experts que han codificat els partits polítics a Espanya. En les primeres observacions veiem les codificacions al PSOE. L’expert amb número d’identificació 11 va considerar que el PSOE tenia un posicionament envers la UE (position) de 6 sobre 7 (per tant, molt favorable), mentre que a l’eix esquerra-dreta (lrecon) el va puntuar amb un 4 (per tant, al centre, lleugerament a l’esquerra). Veiem que hi ha una forta coincidència entre els experts, ja que la majoria ubiquen el PSOE amb un 4 a l’eix esquerra-dreta. També observem un altre fet destacable: alguns experts no s’atreveixen a dir (segurament perquè ho desconeixen) quin és el nivell d’importància que donen les elits del partit a la interferència russa en els afers domèstics.

ches_exp_es
## # A tibble: 195 × 6
##       id party_name position lrecon multiculturalism russian_interference
##    <dbl> <chr>         <dbl> <chr>             <dbl>                <dbl>
##  1    11 PSOE              6 4                     5                    1
##  2     3 PSOE              7 4                     4                    0
##  3    15 PSOE              7 4                     2                    0
##  4    12 PSOE              7 4                     3                   NA
##  5     5 PSOE              7 4                     3                    0
##  6     6 PSOE              7 4                     3                   NA
##  7    13 PSOE              6 4                     5                   NA
##  8     8 PSOE              7 3                     1                   NA
##  9     2 PSOE              7 3                     5                    0
## 10     4 PSOE              7 3                     4                    7
## # ℹ 185 more rows
Exercici 4

Busca quins partits polítics hi ha a Dinamarca. Per fer això només cal que busquis quin valor numèric té Dinamarca al llibre de codis i l’incloguis a la funció filter. No oblidis les cometes!

Quins partits hi ha a Espanya? Els podem examinar amb unique().

unique(ches_exp_es$party_name)
##  [1] "PSOE"    "PP/A-PP" "IU/PCE"  "PNV"     "ERC"     "BNG"     "CC"     
##  [8] "EHB"     "Podemos" "Cs"      "Vox"     "PdCAT"   "Pais"

Llavors, podem veure com els experts han puntuat un partit concret. Per exemple, el PP (segons la categorització de CHES, "PP/A-PP"). Els experts ubiquen el PP de manera molt semblant al PSOE en l’eix europeu (entre el 6 i el 7), mentre que l’ubiquen entre el 7 i el 9 en l’eix esquerra-dreta. També observem que molts experts no saben respondre sobre la interferència russa, i els que ho fan emeten judicis força diferents entre ells.

ches_exp_es |> 
  filter(party_name == "PP/A-PP")
## # A tibble: 15 × 6
##       id party_name position lrecon multiculturalism russian_interference
##    <dbl> <chr>         <dbl> <chr>             <dbl>                <dbl>
##  1     3 PP/A-PP           7 8                     8                    0
##  2    14 PP/A-PP           7 8                     4                   NA
##  3    13 PP/A-PP           6 8                     8                   NA
##  4    15 PP/A-PP           7 9                    10                    0
##  5     4 PP/A-PP           7 8                     6                    5
##  6     1 PP/A-PP           6 7                     9                    0
##  7     7 PP/A-PP           6 7                    10                    4
##  8    12 PP/A-PP           7 9                     8                   NA
##  9    11 PP/A-PP           6 8                     7                    1
## 10     5 PP/A-PP           6 7                     8                    0
## 11     2 PP/A-PP           7 8                     8                    0
## 12     9 PP/A-PP           6 8                    10                    2
## 13     6 PP/A-PP           6 8                     8                   NA
## 14     8 PP/A-PP           6 8                     9                   NA
## 15    10 PP/A-PP           7 8                     5                    6

20.4.2 Visualització de les dades

Seguidament, podem visualitzar més en detall les respostes dels experts. Ens fixarem en la seva resposta a la variable de la interferència russa (russian_interference). Aquesta variable, recordem-ho, jutja quin és el nivell d’importància que donen les elits d’un partit determinat a la interferència russa en els afers domèstics, on 0 és la mínima importància i 10, la màxima. Ja hem vist anteriorment que aquesta pregunta és problemàtica. Primer perquè és difícil d’entendre en el llibre de codis. Segon, perquè molts experts no responen. I, finalment, perquè les respostes són una mica disperses. Ara ho examinarem en detall.

A continuació, crearem un diagrama de barres que mostra quants experts han respost cada valor de l’escala. Per això, hem fet el següent:

  • Filtrem les dades de partit (party_name) per al PP i el PSOE.
  • Seleccionem les variables que es visualitzen a l’eix horitzontal (russian_intereference) i a fill (party_name, on indiquem que cada partit tindrà un color diferent).
  • La geometria serà un diagrama de barres (geom_bar()).
  • Establirem els límits màxim i mínim dels gràfics.
  • Crearem dos gràfics, un per a cada partit.
ches_exp_es |> 
  filter(party_name %in% c("PP/A-PP", "PSOE")) |> 
  ggplot(aes(x = russian_interference, fill = party_name)) + 
  geom_bar() +
  scale_x_continuous(limits = c(0, 10), breaks = 0:10) +
  facet_wrap(.~party_name)

Observem que només hi ha dos experts que coincideixen amb el fet que el PP va tenir un valor 1 en la variable d’interferència russa. La resta de respostes són molt disperses, la qual cosa ens fa pensar que aquesta variable probablement no tindrà gaire fiabilitat (ni gaire validesa).

20.5 Extra: característiques dels experts?

Moltes bases de dades publiquen també algunes de les característiques personals dels experts que realitzen les puntuacions. Per exemple, en el conjunt de dades d’experts s’inclou el gènere (gender), l’any de naixement (dob), l’autoubicació en l’eix esquerra-dreta (lrecon_self) i l’autoubicació en l’eix GALTAN (galtan_self).

En aquest codi, hem inclòs totes aquestes variables així com també el posicionament que cada expert dona al partit en qüestions europees. El primer expert, per exemple, que va puntuar amb un 6 el PSOE en el seu posicionament vers la UE, era una dona que al 2019 tenia 45 anys. El tercer expert va puntuar el PSOE amb un 7 i era un home de 39 anys.

ches_exp_es2 <- ches_exp |>
  filter(country == 5) |>
  select(id, party_name, position, gender:galtan_self) |>
  mutate(dob = 2019 - dob)
ches_exp_es2
## # A tibble: 195 × 7
##       id party_name position gender   dob lrecon_self galtan_self
##    <dbl> <chr>         <dbl>  <dbl> <dbl>       <dbl>       <dbl>
##  1    11 PSOE              6      2    45           4           4
##  2     3 PSOE              7      2    34           4           3
##  3    15 PSOE              7      1    39           3           1
##  4    12 PSOE              7      2    31           4           2
##  5     5 PSOE              7      2    39           4           5
##  6     6 PSOE              7      1    41           5           2
##  7    13 PSOE              6      1    31           3           1
##  8     8 PSOE              7      2    68           1           1
##  9     2 PSOE              7      2    71           4           3
## 10     4 PSOE              7      1    33           4           4
## # ℹ 185 more rows

Podrem fer una ullada a aquestes característiques de forma més detallada amb View().

View(ches_exp_es2)