11  Variables

11.1 Introducció

Una variable és una característica del fenomen que volem estudiar que varia entre observacions i que, per tant, pren diversos valors. Si una determinada característica pren el mateix valor a totes les observacions del marc de dades, llavors no és una variable, simplement, perquè no varia. Tornem a explorar el marc de dades d’eleccions, però aquesta vegada veiem assenyalada en vermell una de les seves variables a la figura 11.1. La columna turnout és una característica del fenomen que estem estudiant, que són les eleccions. I és per tant una variable perquè adopta diferents valors: 54.98, 55.97, etc. El nom del país també és una característica de cada unitat, ja que ens indica el nom del país on s’han produït les eleccions. Totes elles, si ens hi fixem, són variables. En canvi, no seria una variable el planeta on s’han produït les eleccions, perquè totes s’han produït a la Terra. La gravetat també seria la mateixa i a cada observació també hi ha la mateixa presència d’oxigen, per la qual cosa aquestes dues característiques, si estiguessin en aquest conjunt de dades, no les podríem considerar variables.

Figura 11.1: La participació és un atribut de totes unitats que observem

Com podem veure, les variables acostumen a estar formades per nombres (com els valors de turnout o de year), o bé per categories (com els valors de country o de continent). Però al marge d’aquesta primera distinció, l’important és distingir-les per les operacions que permeten fer amb els seus valors. A la taula 11.1 observem els quatre tipus principals de variables. Amb les variables nominals, només podem saber si els seus valors són iguals o diferents. En canvi, amb les variables ordinals també podem ordenar els seus valors. A diferència de les ordinals, les variables d’interval tenen valors amb significat, per la qual cosa en algunes ocasions podrem fer operacions com sumes i restes. I finalment, amb les variables de ràtio podrem fer tot tipus d’operacions, com sumar, restar, multiplicar o dividir.

Taula 11.1: Tipus de variables
Tipus Característiques Vector Operacions
Categòrica nominal Categories no ordenables Caràcter o factor ==, !=
Categòrica ordinal Categories ordenables Factor ==, !=, <=, <, >, >=
Numèrica d’interval Nombres, zero sense significat Numèric o enter ==, !=, <=, <, >, >=, +, -
Numèrica de ràtio Nombres, zero amb significat Numèric ==, !=, <=, <, >, >=, +, -, *, /
Distinció entre columnes, variables i vectors

Fins ara hem estudiat la columna, la variable i el vector com tres conceptes que semblen idèntics. Però són el mateix? La resposta és que no, encara que és fàcil confondre’ls l’un per l’altre perquè sovint serveixen per al mateix propòsit. Per distingir-los, direm que:

  • La columna es refereix a la distribució vertical dels valors en una taula.
  • La variable és un constructe abstracte, una propietat del fenomen que estem estudiant que varia entre observacions.
  • El vector és una eina d’R que ens permet emmagatzemar dades en forma de concatenat.

Malgrat aquestes diferències, és ben cert que moltes vegades la columna, la variable i el vector se solapen. Per analitzar fenòmens, a R acostumem a guardar les variables en forma de vectors. I cada vector forma una columna d’un marc de dades. Més endavant veurem, però, que no sempre hi ha coincidència (vegeu per exemple el marc de dades tidyr::world_bank_pop, en què les variables són valors de la columna indicator i els anys són noms de variables en lloc de valors).

11.2 Variables nominals

Les variables categòriques nominals (també en podem dir simplement variables nominals) agrupen els seus valors en categories diferents assumint que no segueixen cap ordre concret. L’únic que podem fer és classificar-les. Podem, per exemple, classificar pel seu nom els estats que hi ha al món, els colors, les religions, la nacionalitat d’una persona, el lloc de naixement o el sexe. Però no podem ni ordenar ni quantificar aquestes característiques numèricament: no té sentit dir que el nom «groc» és superior a «blau» o multiplicar «Brasil» per «Hondures». L’únic que podem fer és dir si un valor de la variable és igual o diferent d’un altre.

A R, emmagatzemarem les variables nominals com a vectors de caràcter o com a factors. En essència, no hi ha cap diferència en guardar una variable nominal en un vector de caràcter o en un factor.

11.2.1 Operacions amb variables nominals

Per fer algunes operacions amb variables nominals, hem creat el marc de dades strings a partir d’una adaptació de les dades del paquet countrycode (Arel-Bundock, 2022). En l’argot d’R, la paraula string s’utilitza per denominar els vectors de caràcter:

strings <- tribble(~iso3c, ~country, ~currency, ~continent, ~region,
        "CMR", "Cameroon", "CFA Franc BEAC", "Africa", "Sub-Saharan Africa",
        "COL", "Colombia", "Colombian Peso", "Americas", "Latin America & Caribbean",
        "CUB", "Cuba", "Cuban Peso", "Americas", "Latin America & Caribbean",
        "FRA", "France", "Euro", "Europe", "Europe & Central Asia",
        "LSO", "Lesotho", "Loti", "Africa", "Sub-Saharan Africa",
        "QAT", "Qatar", "Qatari Rial", "Asia", "Middle East & North Africa",
        "TWN", "Taiwan", "New Taiwan Dollar", "Asia", "East Asia & Pacific",
        "TTO", "Trinidad & Tobago", "Trinidad & Tobago Dollar", "Americas", "Latin America & Caribbean")
strings
## # A tibble: 8 × 5
##   iso3c country           currency                 continent region             
##   <chr> <chr>             <chr>                    <chr>     <chr>              
## 1 CMR   Cameroon          CFA Franc BEAC           Africa    Sub-Saharan Africa 
## 2 COL   Colombia          Colombian Peso           Americas  Latin America & Ca…
## 3 CUB   Cuba              Cuban Peso               Americas  Latin America & Ca…
## 4 FRA   France            Euro                     Europe    Europe & Central A…
## 5 LSO   Lesotho           Loti                     Africa    Sub-Saharan Africa 
## 6 QAT   Qatar             Qatari Rial              Asia      Middle East & Nort…
## 7 TWN   Taiwan            New Taiwan Dollar        Asia      East Asia & Pacific
## 8 TTO   Trinidad & Tobago Trinidad & Tobago Dollar Americas  Latin America & Ca…

Amb les operacions que veiem al requadre de la dreta, podem respondre preguntes com les que fem a continuació:

Operacions

En tenir poques propietats matemàtiques, amb les variables nominals només podem fer operacions de:

  • Igualtat (==, %in%)
  • No igualtat (!=)
El símbol %in%

Amb operacions amb més d’un valor categòric, utilitzarem %in%. Per exemple, si del vector var volem que ens retorni v1, v2 i v3, utilitzarem el codi següent:

var %in% c("v1","v2","v3") 

Quina observació és Cameroon? Del marc de dades strings, seleccionem les observacions en què la variable country sigui igual a "Cameroon".

strings[strings$country == "Cameroon",]
## # A tibble: 1 × 5
##   iso3c country  currency       continent region            
##   <chr> <chr>    <chr>          <chr>     <chr>             
## 1 CMR   Cameroon CFA Franc BEAC Africa    Sub-Saharan Africa

Quins països estan a l’Àfrica o a Europa? Del marc de dades strings, seleccionem les observacions en què la variable continent sigui igual a "Africa" o "Europe".

strings[strings$continent %in% c("Africa", "Europe"),]
## # A tibble: 3 × 5
##   iso3c country  currency       continent region               
##   <chr> <chr>    <chr>          <chr>     <chr>                
## 1 CMR   Cameroon CFA Franc BEAC Africa    Sub-Saharan Africa   
## 2 FRA   France   Euro           Europe    Europe & Central Asia
## 3 LSO   Lesotho  Loti           Africa    Sub-Saharan Africa

Quins països no estan a la regió d’Amèrica Llatina i el Carib? Del marc de dades strings, seleccionem les observacions en què la variable region sigui no igual a "Latin America & Caribbean".

strings[strings$region != "Latin America & Caribbean",]
## # A tibble: 5 × 5
##   iso3c country  currency          continent region                    
##   <chr> <chr>    <chr>             <chr>     <chr>                     
## 1 CMR   Cameroon CFA Franc BEAC    Africa    Sub-Saharan Africa        
## 2 FRA   France   Euro              Europe    Europe & Central Asia     
## 3 LSO   Lesotho  Loti              Africa    Sub-Saharan Africa        
## 4 QAT   Qatar    Qatari Rial       Asia      Middle East & North Africa
## 5 TWN   Taiwan   New Taiwan Dollar Asia      East Asia & Pacific

Més endavant, veurem com amb altres variables podrem fer operacions més complexes. Com que les categories de les variables nominals no són ordenables, no permeten saber si una categoria és més gran que l’altra o sumar i restar categories. No obstant això, hem de saber que els vectors de caràcter i els factors tenen associada una ordenabilitat alfabètica1.

  • 1 Els vectors de caràcter, i també els factors, estan ordenats alfabèticament, on «A» és el valor més petit i «Z» el valor més gran. Aquesta ordenació ens pot convenir puntualment, però no haurem de concebre les variables nominals com a ordenables.

  • 11.2.2 Altres exemples de variables nominals

    A la base de dades següent veiem un fragment de la Global Terrorism Database (START, 2022), que té recomptats més de 200.000 atacs terroristes des de 1970 fins a l’actualitat, incloent-hi bombardejos, assassinats i segrestos. Com podem veure a la taula 11.2, les variables country_txt, provstate, city, attacktype1_txt, targtype1_txt i weapdetail són nominals2.

  • 2 Podríem pressuposar certa ordinalitat a attacktype1_txt i weapdetail.

  • Taula 11.2: Global Terrorism Database (v2021)
    iyear country_txt provstate city latitude longitude attacktype1 attacktype1_txt targtype1 targtype1_txt weapdetail
    1970 Dominican Republic National Santo Domingo 18.45679 -69.95116 1 Assassination 14 Private Citizens & Property NA
    1970 Mexico Federal Mexico city 19.37189 -99.08662 6 Hostage Taking (Kidnapping) 7 Government (Diplomatic) NA
    1970 Philippines Tarlac Unknown 15.47860 120.59974 1 Assassination 10 Journalists & Media NA
    1970 Greece Attica Athens 37.99749 23.76273 3 Bombing/Explosion 7 Government (Diplomatic) Explosive
    1970 Japan Fukouka Fukouka 33.58041 130.39636 7 Facility/Infrastructure Attack 7 Government (Diplomatic) Incendiary
    1970 United States Illinois Cairo 37.00511 -89.17627 2 Armed Assault 3 Police Several gunshots were fired.
    1970 Uruguay Montevideo Montevideo -34.89115 -56.18721 1 Assassination 3 Police Automatic firearm
    1970 United States California Oakland 37.79193 -122.22591 3 Bombing/Explosion 21 Utilities NA

    Exercici 11.1 (Variables nominals) Practica les variables nominals amb aquests exercicis.

    També hem vist anteriorment en bases de dades d’aquest capítol exemples de variables nominals:

    Altres variables nominals poden ser el municipi (Barcelona, Sant Cugat, Granollers…), la religió (musulmana, catòlica, sintoista…), la llengua (rus, català, suec…), la ideologia (conservadora, progressista, liberal…), l’organització internacional (Unió Europea, Mercosur, ASEAN…) o el tipus de mercaderia (transport, maquinària, tèxtil…).

    11.2.3 Variables binàries

    Les variables binàries (també dites dicotòmiques o dummy) són conceptualment un subtipus de variable categòrica nominal en què la característica de l’objecte que estem estudiant només pot adoptar dos valors: absència o presència (Goertz, 2020, pàg. 137–138). Operativament, però, podem tractar aquestes variables com a vector de caràcter, com a factor, com a vector numèric i fins i tot com a vector lògic. No hi ha cap norma clara de com guardar-les inicialment. El més normal és que més endavant les transformem d’un tipus de vector a un altre en funció del nostre propòsit3.

  • 3 Per exemple, si volem visualitzar dades, les acabarem transformant en vectors de caràcter o factors, mentre que si volem realitzar una anàlisi bivariant les acabarem transformant a vectors numèrics. Passar-la a vector lògic és factible, però poc habitual.

  • Quan importem dades a R, el més freqüent serà trobar-nos les variables binàries codificades en un vector numèric amb 1 i 0. El valor 1 indicarà la presència del concepte i el 0 l’absència. En la següent taula 11.3, observem un fragment de la Formal Alliances dataset (Gibler, 2009; Singer & Small, 1966), formada principalment per variables binàries. Cada unitat d’observació és l’aliança entre dos països. Entre les seves característiques, s’hi troba l’any de creació (dyad_st_year), l’any de finalització (dyad_end_year), si és una aliança de defensa (defense), de neutralitat (neutrality), un pacte de no-agressió (nonaggression) o una entente (entente).

    Taula 11.3: Formal Alliances dataset (v4.1)
    version4id state_name1 state_name2 dyad_st_year dyad_end_year defense neutrality nonaggression entente
    1 United Kingdom Portugal 1816 NA 1 0 1 0
    2 United Kingdom Sweden 1816 1911 0 0 0 1
    3 Hanover Bavaria 1838 1848 1 0 1 1
    3 Hanover Bavaria 1850 1866 1 0 1 1
    3 Hanover Germany 1850 1866 1 0 1 1
    3 Hanover Germany 1838 1848 1 0 1 1
    3 Hanover Baden 1838 1848 1 0 1 1
    3 Hanover Baden 1850 1866 1 0 1 1

    Quan ens trobem alguna variable binària en un marc de dades, el més recomanable és deixar-la com està. Normalment, això significarà deixar-la com a vector numèric i, en tot cas, ja recodificarem la variable més endavant si ho necessitem. En el cas que volguéssim passar la variable a categòrica, recomanem emmagatzemar-la en forma de factor. Si suposem que el marc de dades té com a nom ally, utilitzaríem el procediment següent per convertir la variable defense a factor4.

  • 4 El mateix podríem fer amb neutrality, nonaggression i entente.

  • ally$defense <- factor(ally$defense, 
                           labels = c("No", "Yes"))

    En aquest capítol hem vist diversos exemples de variables binàries. Per exemple:

    • Si el líder polític va ser o no elegit (elected) a la taula 10.8.
    • Si un cop d’estat va ser exitós o no (successful) a la taula 10.7.
    • Si el grup ètnic té autonomia regional o no (reg_aut) a la taula 10.6.

    El que és important és que el nom del vector numèric permeti identificar clarament quin sentit pren la variable en cas de presència. El vector male no tindria sentit posar-lo com a sex si està codificat amb 1 i 0, perquè no sabríem quin sexe és 1 i quin és 0. En canvi, si la recodifiquéssim com a factor, sí que tindria més sentit posar sex i que tingués com a possibles valors «Male» i «Female» o bé «Other».

    11.2.4 El paquet stringr

    Per manipular els vectors de caràcter, la millor eina que podem utilitzar és el paquet stringr (Wickham, 2023b). En aquest apartat no explicarem totes les funcions del paquet. El més adequat és consultar el seu Cheatsheet corresponent a la pàgina d’RStudio. Però a continuació veurem algunes funcions amb el mateix marc de dades strings que hem creat anteriorment:

    Amb str_remove() podem eliminar una sèrie de caràcters dels valors d’una variable. A continuació, eliminem "Latin " (pareu atenció a l’espai) de la variable region.

    str_remove(strings$region, "Latin ")
    ## [1] "Sub-Saharan Africa"         "America & Caribbean"       
    ## [3] "America & Caribbean"        "Europe & Central Asia"     
    ## [5] "Sub-Saharan Africa"         "Middle East & North Africa"
    ## [7] "East Asia & Pacific"        "America & Caribbean"

    Amb str_replace() podem substituir uns caràcters per uns altres. A continuació, substituïm «&» de la variable country per «and».

    str_replace(strings$country, "&", "and")
    ## [1] "Cameroon"            "Colombia"            "Cuba"               
    ## [4] "France"              "Lesotho"             "Qatar"              
    ## [7] "Taiwan"              "Trinidad and Tobago"

    Amb str_to_upper() posem tots els caràcters en majúscules. A continuació, posem el nom de la moneda de la variable currency en majúscules.

    str_to_upper(strings$currency)
    ## [1] "CFA FRANC BEAC"           "COLOMBIAN PESO"          
    ## [3] "CUBAN PESO"               "EURO"                    
    ## [5] "LOTI"                     "QATARI RIAL"             
    ## [7] "NEW TAIWAN DOLLAR"        "TRINIDAD & TOBAGO DOLLAR"

    D’una manera molt semblant, str_to_sentence() posa la primera lletra de la frase en majúscula, str_to_lower() totes les lletres en minúscules, str_to_title() la primera lletra de cada paraula en majúscules.

    Amb str_sub() traiem l’últim caràcter de la variable iso3c, de manera que ens queda un codi de país de dos caràcters.

    str_sub(strings$iso3c, end = 2)
    ## [1] "CM" "CO" "CU" "FR" "LS" "QA" "TW" "TT"

    11.3 Variables ordinals

    Les variables categòriques ordinals (o, simplement, variables ordinals) agrupen les observacions en categories diferents que segueixen un ordre lògic concret. Per exemple, podem ordenar les persones en funció de si són «infants», «joves» o «adults» o bé el seu nivell educatiu en «sense estudis», «estudis primaris», «estudis secundaris» o «estudis superiors». Així, podem saber si una categoria és superior o inferior a l’altra. El que no podem saber amb aquesta variable és la distància que hi ha entre categories. No sabem, per exemple, si hi ha la mateixa distància entre «sense estudis» i «estudis primaris» que entre «estudis primaris» i «estudis secundaris», simplement pel fet que no hi ha cap interval numèric associat a cada variable. L’únic que podem fer és comparar les categories entre elles en termes de ser més, menys, igual que o diferent a una altra.

    A R, emmagatzemarem les variables ordinals com a factors ordenables.

    11.3.1 Operacions amb variables ordinals

    Per fer algunes operacions amb variables ordinals hem creat el marc de dades ords, que conté una classificació d’agències donants d’ajuda al desenvolupament i la seva puntuació ordinal en el rànquing Aid Transparency Index (ATI) de 2022 que publica per l’ONG Publish What You Fund. Aquesta classificació ordinal estableix fins a quin punt l’agència donant publica de forma transparent què es gasta, qui ho gasta i a on es gasta. El marc de dades també inclou a quin tipus de règim pertany l’agència donant segons la classificació ordinal de democràcia de l’Economist Intelligence Unit de 2022.

    ords <- tibble(donor = c("US-MCC", "Canada-GAC", "Germany-BMZ-GIZ", "Korea-KOICA", "Australia-DFAT", "Spain-AECID", 
                             "Saudi Arabia-KSRelief", "Norway-MFA", "China-MOFCOM", "Turkey-TIKA"),
                   ati = factor(c("Very Good", "Good", "Good", "Good", "Good", "Fair",
                                  "Poor", "Poor", "Very Poor", "Very Poor"),
                                ordered = TRUE,
                                levels = c("Very Poor", "Poor", "Fair", "Good", "Very Good")),
                   regime_type = factor(c("Flawed Democracy", "Full Democracy", "Full Democracy", "Full Democracy", "Full Democracy", 
                                          "Flawed Democracy", "Authoritarian", "Full Democracy", "Authoritarian", "Hybrid Regime"), 
                                        ordered = TRUE,
                                        levels = c("Authoritarian", "Hybrid Regime", "Flawed Democracy", "Full Democracy")))
    ords
    ## # A tibble: 10 × 3
    ##    donor                 ati       regime_type     
    ##    <chr>                 <ord>     <ord>           
    ##  1 US-MCC                Very Good Flawed Democracy
    ##  2 Canada-GAC            Good      Full Democracy  
    ##  3 Germany-BMZ-GIZ       Good      Full Democracy  
    ##  4 Korea-KOICA           Good      Full Democracy  
    ##  5 Australia-DFAT        Good      Full Democracy  
    ##  6 Spain-AECID           Fair      Flawed Democracy
    ##  7 Saudi Arabia-KSRelief Poor      Authoritarian   
    ##  8 Norway-MFA            Poor      Full Democracy  
    ##  9 China-MOFCOM          Very Poor Authoritarian   
    ## 10 Turkey-TIKA           Very Poor Hybrid Regime

    Amb les operacions que veiem al requadre de la dreta, podem respondre preguntes com les que fem a continuació:

    Operacions

    Amb les variables ordinals podem fer operacions de:

    • Igualtat (==, %in%)
    • No igualtat (!=)
    • Més gran que (>)
    • Més gran o igual que (>=)
    • Més petit que (<)
    • Més petit o igual que (<=)

    Quines agències pertanyen a democràcies dèbils? Del marc de dades ords, seleccionem les observacions en què la variable regime_type sigui igual a "Flawed Democracy".

    ords[ords$regime_type == "Flawed Democracy",]
    ## # A tibble: 2 × 3
    ##   donor       ati       regime_type     
    ##   <chr>       <ord>     <ord>           
    ## 1 US-MCC      Very Good Flawed Democracy
    ## 2 Spain-AECID Fair      Flawed Democracy

    Quines agències tenen un ATI com a mínim bo? Del marc de dades ords, seleccionem les observacions en què la variable ati sigui major o igual que "Good".

    ords[ords$ati >= "Good",]
    ## # A tibble: 5 × 3
    ##   donor           ati       regime_type     
    ##   <chr>           <ord>     <ord>           
    ## 1 US-MCC          Very Good Flawed Democracy
    ## 2 Canada-GAC      Good      Full Democracy  
    ## 3 Germany-BMZ-GIZ Good      Full Democracy  
    ## 4 Korea-KOICA     Good      Full Democracy  
    ## 5 Australia-DFAT  Good      Full Democracy

    Quines agències tenen un ATI inferior a correcte? Del marc de dades ords, seleccionem les observacions en què la variable ati sigui menor que "Fair".

    ords[ords$ati < "Fair",]
    ## # A tibble: 4 × 3
    ##   donor                 ati       regime_type   
    ##   <chr>                 <ord>     <ord>         
    ## 1 Saudi Arabia-KSRelief Poor      Authoritarian 
    ## 2 Norway-MFA            Poor      Full Democracy
    ## 3 China-MOFCOM          Very Poor Authoritarian 
    ## 4 Turkey-TIKA           Very Poor Hybrid Regime

    A part de les operacions d’igualtat, doncs, les variables ordinals permeten saber si una categoria és més gran o més petita que l’altra. Però com que no coneixem la distància entre categories, per exemple entre «Fair» i «Poor», no podem fer operacions més complexes com sumar i restar. Aquestes operacions les podrem fer amb les variables numèriques.

    11.3.2 Importar dades ordinals

    Quan importem bases de dades a R, rarament ens trobarem les variables ordinals codificades com a factor ordinal. Normalment ens trobarem una de les situacions següents:

    Taula 11.4: Ingressos WB
    code income_group
    AFG Low income
    ALB Upper middle income
    DZA Upper middle income
    ASM Upper middle income
    AND High income
    AGO Lower middle income
    ATG High income
    ARG Upper middle income
    1. Les variables ordinals estan codificades com a vector de caràcter (1). Aquest és el cas, per exemple, de la variable income_group, una classificació produïda pel Banc Mundial que ordena grups de països segons nivells de renda per càpita. Observem un fragment d’aquestes dades a la taula 11.4 del lateral.

    2. Les variables ordinals ens arriben codificades com a vector numèric (2). Aquest és el cas de moltes dades d’enquesta, en què respostes que porten associades categories com «Molt», «Bastant», «Poc» o «Gens» acostumen a estar codificades numèricament (taula 11.5).

    En tots dos casos, les variables hauran de ser recodificades a factor ordinal amb un procediment molt semblant. Per ara, hem de saber que per fer la conversió utilitzarem la funció factor() i a dins hi introduirem tres arguments: el vector, la indicació que és ordinal en el vector ordrered i, en un tercer argument, els nivells (levels) o bé les etiquetes (labels) del factor.

    Taula 11.5: WVS 2017-2020 (v7)
    CCOW YEAR Q1 Q2 Q3 Q4
    AND 2018 1 1 1 3
    AND 2018 1 1 1 4
    AND 2018 1 2 2 2
    AND 2018 1 1 1 4
    AND 2018 1 1 1 3
    AND 2018 1 3 1 4
    factor(vector, 
           ordered = TRUE,
           levels = c("Baix", "Mig", "Alt"))

    A l’apartat Recodificacions de variables tractarem aquests dos casos en detall i veurem també la diferència entre levels i labels.

    Repàs d’operadors relacionals

    Un resum dels operadors relacionals que hem vist ara el trobem en aquest vídeo:

    11.3.3 El paquet forcats

    Per manipular els factors, la millor eina que podem utilitzar és el paquet forcats (Wickham, 2023a). En aquest apartat només veurem algunes de les seves funcions, però per explorar-lo més a fons podeu consultar el seu Cheatsheet corresponent a la pàgina d’RStudio. A continuació aplicarem algunes funcions al marc de dades ords que hem creat anteriorment. La majoria d’aquestes funcions van relacionades amb reordenar factors i són molt útils per a la visualització de gràfics.

    Amb fct_relevel() canviem ràpidament l’ordre dels nivells. En el primer argument indiquem el factor i en la resta d’arguments indiquem, en ordre ascendent, els nivells.

    fct_relevel(ords$regime_type, "Hybrid Regime", "Full Democracy", "Flawed Democracy", "Authoritarian")
    ##  [1] Flawed Democracy Full Democracy   Full Democracy   Full Democracy  
    ##  [5] Full Democracy   Flawed Democracy Authoritarian    Full Democracy  
    ##  [9] Authoritarian    Hybrid Regime   
    ## 4 Levels: Hybrid Regime < Full Democracy < ... < Authoritarian

    Amb fct_rev() capgirem l’ordre dels nivells.

    fct_rev(ords$ati)
    ##  [1] Very Good Good      Good      Good      Good      Fair      Poor     
    ##  [8] Poor      Very Poor Very Poor
    ## Levels: Very Good < Good < Fair < Poor < Very Poor

    Amb fct_other() creem un nivell format per diverses categories. En el primer argument indiquem el factor i en el segon indiquem les categories que volem conservar.

    fct_other(ords$ati, keep = c("Good", "Very Good"))
    ##  [1] Very Good Good      Good      Good      Good      Other     Other    
    ##  [8] Other     Other     Other    
    ## Levels: Good < Very Good < Other

    Amb fct_infreq() ordenem els nivells en funció del seu nombre de freqüències a la base de dades (és a dir, en funció de les vegades que hi apareixen). Aquesta funció és molt útil quan la combinem amb funcions que reprodueixen gràfics.

    plot(fct_infreq(ords$ati))

    Si combinem fct_infreq() i fct_rev(), obtindrem els nivells en l’ordre contrari.

    plot(fct_rev(fct_infreq(ords$ati)))

    Totes les funcions de forcats són útils per factors, tant per representar variables nominals com per representar variables ordinals.

    Exercici 11.2 (Variables ordinals) Practica les variables ordinals amb aquests exercicis.

    11.4 Variables d’interval

    A diferència de les variables categòriques, les variables numèriques agrupen les observacions en nombres. Les variables numèriques d’interval (o simplement variables d’interval) tenen com a principal propietat que la distància entre els seus valors té significat, però que el valor zero no indica l’absència del valor en concret. Així, amb les variables d’interval podem fer les mateixes operacions que amb les variables ordinals (saber si un valor és més gran o més petit que un altre) i, a més, també podem saber com de gran o com de petit és aquest valor perquè la distància numèrica és coneguda.

    Un exemple és la variable any, quan ens referim als anys de calendari5. Posem pel cas que tenim tres valors d’interval: 1919, 1945 i 1989. Podem saber si un any és més petit o més gran que l’altre, però també podem saber quina distància hi ha entre aquests valors. Per exemple, sabem que hi ha una diferència de 26 anys entre 1919 i 1945 i una diferència de 70 anys entre 1919 i 1989. Aquesta és una operació que no podríem fer amb variables ordinals.

  • 5 A diferència de la variable any quan ens referim als anys d’una persona o els anys de durada d’un determinat fenomen. En aquest cas, el zero sí que té significat.

  • Amb les variables d’interval, però, no podrem calcular la ràtio entre els seus valors, ja que una de les propietats que manca a aquest tipus de variables és que el valor zero no significa «absència de». En l’exemple dels anys del calendari, l’any zero no significa absència de res en concret, com l’absència d’anys o absència de temps. Ho entendrem millor amb un altre exemple: la temperatura en graus Celsius6: els zero graus no representen l’absència de calor ni l’absència de temperatura. Per tant, quan la temperatura puja de 10 a 20 graus, no podrem dir que la calor s’ha duplicat.

  • 6 L’exemple també val per graus Fahrenheit. En canvi, la temperatura en graus Kelvin sí que és una variable de ràtio, ja que el zero indica l’absència de calor i, per tant, passar de 100 a 200 graus Kelvin voldria dir que es duplica la calor.

  • A R, les variables d’interval s’emmagatzemen preferiblement com a vectors numèrics, encara que en alguns casos les podrem emmagatzemar com a vectors enters o vectors de data.

    11.4.1 Operacions amb variables d’interval

    Per fer algunes operacions amb variables d’interval hem creat el marc de dades polity, que mostra el nivell de democràcia que tenien diversos països en el seu any de fundació segons la base de dades Polity V (Marshall & Gurr, 2020). Aquesta base de dades assigna un nivell de democràcia als règims polítics entre -10 i 10, on 10 és el nivell màxim de democràcia. El zero, en aquest cas, no significa «absència de», sinó que és un nivell intermedi que adopta un règim polític en aquesta escala7.

  • 7 I encara que l’escala estigués construïda de 0 a 10, el zero tampoc significa «absència de» democràcia.

  • polity <- tibble(country = c("United States", "Bolivia", "Australia", "Azerbaijan",
                                 "USSR", "Timor Leste", "Eritrea", "Qatar", "Gambia"),
                     year = c(1776, 1825, 1901, 1991, 1922, 2002, 1993, 1971, 1965),
                     polity2 = c(0, -3, 10, -3, -7, 6, -6, -10, 8))
    polity
    ## # A tibble: 9 × 3
    ##   country        year polity2
    ##   <chr>         <dbl>   <dbl>
    ## 1 United States  1776       0
    ## 2 Bolivia        1825      -3
    ## 3 Australia      1901      10
    ## 4 Azerbaijan     1991      -3
    ## 5 USSR           1922      -7
    ## 6 Timor Leste    2002       6
    ## 7 Eritrea        1993      -6
    ## 8 Qatar          1971     -10
    ## 9 Gambia         1965       8

    Amb les operacions que veiem al requadre, podem respondre preguntes com les que fem a continuació:

    Operacions

    Amb les variables d’interval podem fer operacions de:

    • Igualtat (==, %in%)
    • No igualtat (!=)
    • Més gran que (>)
    • Més gran o igual que (>=)
    • Més petit que (<)
    • Més petit o igual que (<=)
    • Mínims (min()) i màxims (max()) I en alguns casos, sumes (+) i restes (-)

    Quants anys de diferència hi ha entre la fundació dels Estats Units i la fundació de la Unió Soviètica?

    polity$year[polity$country == "United States"] - polity$year[polity$country == "USSR"]
    ## [1] -146

    En els seus respectius anys de fundació, el nivell de democràcia de Bolívia era més gran que el d’Eritrea?

    polity$polity2[polity$country == "Bolivia"] > polity$polity2[polity$country == "Eritrea"]
    ## [1] TRUE

    Quins règims polítics tenien nivells de democràcia superiors als Estats Units en el seu any de fundació?

    polity$country[polity$polity2[polity$country == "United States"] > polity$polity2]
    ## [1] "Bolivia"    "Azerbaijan" "USSR"       "Eritrea"    "Qatar"

    11.4.2 Importar dades d’interval

    En la majoria dels casos, les variables d’interval s’importen a R com a vectors numèrics. Ja està bé que s’importin així i no haurem de fer cap transformació addicional. En alguns casos, és fàcil confondre les variables d’interval amb altres tipus de variables, com les ordinals o les de ràtio.

    També hem vist anteriorment exemples de bases de dades amb variables d’interval:

    L’eix esquerra-dreta és una variable d’interval?

    L’eix esquerra-dreta és una de les variables més emprades en Ciència Política. A la taula 11.6, que és un fragment de la Global Party Survey, la veiem a V4_Scale (Norris, 2020). A les enquestes, s’acostuma a preguntar: «Ubiqui’s ideològicament, on 0 és extrema esquerra i 10 extrema dreta». És aquesta una variable d’interval? Òbviament, el zero no té significat, perquè no significa absència d’ideologia, per la qual cosa podem descartar que sigui una variable de ràtio. Fixem-nos que podríem construir una escala on, per exemple, el zero indiqués el centre, -10 l’esquerra i +10 la dreta. O bé que fos 90 dreta i 100 esquerra. Com veiem, una de les propietats de l’escala d’interval és que podem ubicar el principi i el final de l’escala a qualsevol lloc. I això és així perquè el zero no té cap significat i els valors de les escales són completament mòbils i arbitraris.

    El que resulta més difícil de dir és si l’autoubicació ideològica és una variable d’interval o ordinal. La principal diferència entre les dues és que a les variables ordinals hi ha una distància coneguda i igual entre els nivells de l’escala. Passar de 4 a 5 a l’eix ideològic hauria de significar el mateix que passar de 5 a 6. I això és qüestionable. Per aquest motiu, alguns autors (veure Johnson et al., 2016, p. 351) defensen que la ideologia és tècnicament una construcció ordinal encara que a la pràctica les escales ordinals construïdes amb nombres es puguin acabar considerant variables d’interval. Una regla no escrita és que si una variable ordinal està formada per set o més valors es pot considerar d’interval (Goertz, 2020 pàg. 139, 144).

    Taula 11.6: Global Party Survey (v2.1)
    Partyname Partyabb V4_Scale V4_Ord
    Brexit Party BRX 8.653846 Strongly economically-right
    Conservative and Unionist Party CON 7.916667 Strongly economically-right
    Democratic Unionist Party DUP 7.000000 Center economically-right
    Green Party GRN 2.526316 Center economically-left
    Labour Party Lab 2.125000 Strongly economically-left
    Liberal Democrats LD 4.666667 Center economically-left
    Plaid Cymru PC 3.235294 Center economically-left
    Scottish National Party SNP 3.162162 Center economically-left
    Sinn Féin SF 2.708333 Center economically-left
    UK Independence Party UKIP 8.086956 Strongly economically-right

    11.4.3 El paquet lubridate

    Una de les principals variables d’interval és la de les dates de calendari. Amb això tant ens podem referir a variables com l’any (2013, 2014, 2015…) com a variables més concretes que tinguin com a valors dates exactes (per exemple, «1952-03-10», com hem vist a la variable date de la taula 10.7) o encara més concretes, com seria «1961-01-20 13:00:00». Quan només necessitem l’any com a variable, en tindrem prou amb emmagatzemar-ho com a vector numèric, sense necessitat de fer cap transformació especial. Però a mesura que el temps sigui un factor important del nostre estudi i necessitem jugar amb mesos, setmanes, dies o hores, més important serà utilitzar el paquet lubridate (Spinu et al., 2023).

    No entrarem en detall a explicar-lo en aquest mòdul, perquè és un paquet que s’utilitza per necessitats molt concretes. Però hem de saber que ens permet fer operacions com distingir quines dates cauen en cap de setmana, crear nivells ordinals entre dies de la setmana, calcular diferències entre dates o calcular diferències entre franges horàries.

    Exercici 11.3 (Variables d’interval) Practica les variables d’interval amb aquests exercicis.

    11.5 Variables de ràtio

    A diferència de les altres variables que hem vist, les variables numèriques de ràtio (o simplement, variables de ràtio) tenen totes les propietats matemàtiques. Podem dir si els nombres són iguals o diferents, si són més grans o més petits, quina distància hi ha entre ells i també podem saber la quantitat relativa de cada valor. La propietat distintiva de les variables de ràtio és que el zero té significat. Això vol dir que hi ha un punt de referència que marca l’absència del fenomen. El zero en l’edat d’una persona significa absència d’anys, així com el zero en la taxa d’atur significa l’absència d’atur i el zero en població significa que aquell país o territori no té població.

    Què vol dir 1.2e+07?

    Quan tractem amb variables numèriques, sovint veurem els valors representats amb notació científica:

    12000000
    ## [1] 1.2e+07

    Interpretar-los és més fàcil del que sembla, ja que simplement hem de moure els decimals tantes vegades a la dreta com ens indiqui l’últim nombre, si és positiu, o tantes vegades a l’esquerra si és negatiu. Per exemple, 2.50+e08 es traduirà com a 250.000.000.

    Com que el zero té significat, podem utilitzar-lo per establir relacions entre els valors de la variable a través d’operacions matemàtiques més complexes, com multiplicar, dividir, fer arrels quadrades, etc. Per exemple, podem dir que deu anys són el doble que cinc o que, si l’atur varia del 10 % al 5 %, s’ha reduït a la meitat. Aquestes són operacions que no podem fer amb els altres tipus de variables que hem vist. Per exemple, amb l’escala d’interval de Polity V no podem dir que un país és el doble de democràtic que un altre. Ni tampoc podem dir que un país categoritzat com a «Low Income» sigui la meitat que «Lower Middle Income». Això es deu al fet que el zero, que és un punt real de referència en les variables de ràtio, no existeix ni té significat propi en les altres variables. Des d’un punt de vista de l’anàlisi quantitativa, doncs, les variables de ràtio són preferibles als altres tipus de variables perquè permeten fer més operacions matemàtiques.

    A R, emmagatzemarem les variables de ràtio com a vectors numèrics. Algunes d’elles també les podríem emmagatzemar com a vectors enters.

    11.5.1 Operacions amb variables de ràtio

    Per fer algunes operacions amb variables de ràtio, hem recreat les capacitats materials de les principals potències participants en la Segona Guerra Mundial l’any 1939 a partir de les dades de la National Material Capabilities (NMC) dataset (Singer et al., 1972; Singer, 1987). El marc de dades ratios conté la variable despesa militar (milex, en milers de dòlars), personal militar (milper, en milers), total de població (tpop, en milers), i l’índex CINC (cinc)8, que és una mesura composta que calcula les capacitats materials relatives d’un país en un any determinat.

  • 8 Respon a l’acrònim Composite Index of National Capability. La variable milex respon a la despesa militar, milper a personal militar i tpop a població total. Aquestes i altres variables formen l’índex cinc.

  • ratio <- tibble(country = c("USA", "UKG", "FRN", "GMY", "ITA", "RUS", "JPN"),
                    milex = c(980000, 7895671, 1023651, 12000000, 669412, 5984123, 1699970),
                    milper = c(334, 394, 581, 2750, 581, 1789, 957),
                    tpop = c(131028, 47762, 41900, 79798, 44020, 170317, 71380),
                    cinc = c(0.182, 0.0997, 0.0396, 0.178, 0.0270, 0.138, 0.0591))
    ratio
    ## # A tibble: 7 × 5
    ##   country    milex milper   tpop   cinc
    ##   <chr>      <dbl>  <dbl>  <dbl>  <dbl>
    ## 1 USA       980000    334 131028 0.182 
    ## 2 UKG      7895671    394  47762 0.0997
    ## 3 FRN      1023651    581  41900 0.0396
    ## 4 GMY     12000000   2750  79798 0.178 
    ## 5 ITA       669412    581  44020 0.027 
    ## 6 RUS      5984123   1789 170317 0.138 
    ## 7 JPN      1699970    957  71380 0.0591

    Amb les operacions que veiem al requadre lateral, podem respondre preguntes com les que fem a continuació:

    Operacions

    Amb les variables de ràtio podem fer operacions de:

    • Igualtat (==, %in%)
    • No igualtat (!=)
    • Més gran que (>)
    • Més gran o igual que (>=)
    • Més petit que (<)
    • Més petit o igual que (<=)
    • Mínims (min()) i màxims (max())
    • Sumes (+), restes (-), multiplicacions (*), divisions (/)
    • Altres tipus d’operacions com arrels quadrades (sqrt()), logaritmes (log()), màxims (max()), mínims (min()) o mitjanes (mean()).

    Quin país té més un personal militar superior al milió de persones?

    ratio$country[ratio$milper > 1000]
    ## [1] "GMY" "RUS"

    Quantes vegades la despesa militar d’Alemanya és superior cada una de les altres potències?

    ratio$milex_gmy <- ratio$milex[ratio$country == "GMY"] / ratio$milex

    Quin país té un personal militar inferior a l’1 % de la població?

    ratio$country[1 > ratio$milper / ratio$tpop * 100]
    ## [1] "USA" "UKG"

    Quin és el país amb l’índex CINC més alt?

    ratio$country[ratio$cinc == max(ratio$cinc)]
    ## [1] "USA"

    Quin és el país amb menys despesa militar?

    ratio$country[ratio$milex == min(ratio$milex)]
    ## [1] "ITA"

    11.5.2 Importar variables de ràtio

    Les variables de ràtio s’acostumen a importar automàticament com a vectors numèrics, que és el que necessitem per poder fer operacions de tot tipus. No obstant això, convé saber distingir entre tres tipus (o ordres) de variables de ràtio: els recomptes, les ràtios i els índexs compostos (Merry, 2016, p. 15; Power, 1999). Aquests tipus de variables els trobem representats a la següent taula 11.7, que inclou dades d’Eurostat i dades de vot a partits regionalistes i independentistes en diverses regions europees (Sanjaume-Calvet et al., n.d.).

    Taula 11.7: NUTS dataset
    id country nuts_name vote_reg vote_ind gdpc innov pop density area distance
    BE1 Belgium Région De Bruxelles-Capitale/Brussels Hoofdstedelijk Gewest 13.81 26.31 68500 135.77406 1199095 7421.6 162 0.0384190
    BE2 Belgium Vlaams Gewest 0.00 43.33 39800 132.69463 6526061 487.2 13599 0.2280460
    BE3 Belgium Région Wallonne 4.14 0.00 28100 113.03631 3626571 215.3 16905 0.8535276
    BG324 Bulgaria Разград 40.08 0.00 4600 34.15538 115402 47.6 2414 3.4172388
    BG425 Bulgaria Кърджали 63.05 0.00 3900 33.53948 150837 47.7 3212 2.4012413
    CZ031 Czech Republic Jihočeský Kraj 14.57 0.00 14800 77.76700 638782 66.5 10058 0.9911074
    CZ032 Czech Republic Plzeňský Kraj 5.80 0.00 16700 77.76700 578629 77.0 7649 1.3294820
    CZ042 Czech Republic Ústecký Kraj 2.46 0.00 13100 56.43587 821377 156.9 5339 0.7669622
    CZ071 Czech Republic Olomoucký Kraj 0.75 0.00 14200 75.04677 633925 121.6 5273 2.7425572
    CZ072 Czech Republic Zlínský Kraj 0.67 0.00 15600 75.04677 583698 149.2 3962 3.3911309

    En aquest capítol, també hem vist anteriorment en bases de dades exemples de variables de ràtio. Per exemple:

    • La durada d’una disputa militar militaritzada (duration) a la taula 10.4.
    • Els mesos d’un líder polític al càrrec (tenure_months) a la taula 10.8.
    • La mida relativa d’un grup ètnic a dins d’un país (size) a la taula 10.6.

    Les dades de recompte són dades que compten unitats, com la població (pop) o la superfície del territori (area). Per definició, són dades que les trobarem sense decimals. Les dades de ràtio, en canvi, són les que estan creades a partir de dos nombres. Les més habituals són les dades de percentatge, en què el primer nombre és un recompte i el segon és el total, com les dades de percentatge de vot (vote_reg, que divideix votants a partits regionalistes pel total de votants). Però també ens podem trobar dades de ràtio en la densitat de població (density, compara habitants i àrea) o el PIB per càpita (gdpc, estableix la mitjana d’ingressos per habitant). És molt probable que les dades de ràtio tinguin decimals. Finalment, els índexs són les mesures més complexes, ja que agrupen diverses variables, com per exemple l’Índex d’Innovació Regional (innov).

    Exercici 11.4 (Variables de ràtio) Practica les variables de ràtio amb aquests exercicis.