Introducció

Aquest tutorial ofereix una explicació breu a l’anàlisi de les enquestes, posant èmfasi a com podem analitzar els factors que estan relacionats amb l’abstenció. Per a fer-ho, utilitzarem un baròmetre del Centre d’Estudis d’Opinió. En concret, farem servir la tercera onada del 2019 (baròmetre 954). L’estudi el podeu trobar aquí.

El tutorial té diferents etapes. En primer lloc, obrirem i netejarem la base de dades. En segon lloc, farem una anàlisi descriptiva de les variables clau. Finalment, utilitzarem un model de regressió per veure quins factors individuals estan més relacionats amb l’abstenció.

Obrir la base de dades

El primer pas és obrir la base de dades. L’arxiu que ens hem baixat del CEO acaba amb l’extensió .sav, la qual cosa ens indica que es tracta d’un arxiu d’SPSS. Per tant, hem de buscar una llibreria que ens permeti obrir arxius d’aquest tipus. Una cerca ràpida ens revela que podem utilitzar la llibreria rio.

Obrim la base de dades i l’assignem a un objecte, el qual anomenem df.

Preparar la variable dependent

El primer que hem de fer és buscar la pregunta que farem servir com a variable dependent. Si mirem el qüestionari, veiem que la pregunta sobre participació és la P40A.

Primer fem uns descriptius en valors absoluts. Recordeu que hem de fer servir el símbol de dòlar per dir a R que volem buscar una variable d’un objecte concret. Tal i com veieu a sota, 73 persones van dir que no van poder votar perquè no podien i 1,237 persones van assegurar que van anar a votar. Fixeu-vos que hom podria pensar que les opcions d’aquesta pregunta son recargolades. Tanmateix, preguntar-ho com ho fa el CEO redueix biaixos de no resposta. No votar, per a molta gent, està mal vist, la qual cosa porta a molts enquestats a amagar la seva actuació real. Per tant, oferir més opcions de resposta pretén evitar el màxim possible aquesta tendència.

## 
##    1    2    3    4    5   98   99 
##   73  134   10   10 1237   32    4

Però sempre es millor veure-ho també amb freqüències (percentatges). És a dir, volem saber quin % representa cada opció sobre el total. Per a fer-ho, hi ha, com sempre, moltes llibreries. Podem utilitzar la llibreria epiDisplay. Ens genera la taula… i un gràfic de regal!

(L’opció SuppressPackageStartupMessages que veureu a sota serveix per evitar que apareguin missatges. Vosaltres no cal que la poseu.)

## df$P40A : 
##         Frequency Percent Cum. percent
## 5            1237    82.5         82.5
## 2             134     8.9         91.4
## 1              73     4.9         96.3
## 98             32     2.1         98.4
## 4              10     0.7         99.1
## 3              10     0.7         99.7
## 99              4     0.3        100.0
##   Total      1500   100.0        100.0

Un dels problemes d’aquesta variable és que té massa categories. Ens interessa tenir un indicador que identifiqui els que diuen que van anar a votar (1) i els que no ho van fer (0). L’hem de recodificar. Assignarem el valor 1 a aquells que van respondre “Estic segur/a que vaig votar” i el valor 0 a tota la resta. Els que van dir “No sé/No contesta” (98 i 99), però, els declararem com a valors perduts.

Ja ho tenim? Encara no. Recordeu que sempre hem de mirar si la variable és del tipus correcte. Si mirem la class de la variable, veureu que és de tipus numèric. Per tant, l’hem de convertir a tipus factor (a binària). Aprofitem la conversió per assignar-li unes etiquetes i fer la variable més comprensible. Per a fer-ho, utilitzarem la llibreria dplyr, una llibreria potent que aglutina diferents funcions (opcions).

## [1] "numeric"

Sempre que recodifiquem és bo comprovar que ho haguem fet bé.

## [1] "factor"

## df$votar : 
##          Frequency   %(NA+) cum.%(NA+)   %(NA-) cum.%(NA-)
## Votar         1237     82.5       97.6     84.5      100.0
## Abstenir       227     15.1       15.1     15.5       15.5
## NA's            36      2.4      100.0      0.0      100.0
##   Total       1500    100.0      100.0    100.0      100.0

Fins i tot podem fer un gràfic.

O podem fer un gràfic amb ggplot, la llibreria més utilitzada a R per graficar. Farem un gràfic de barres. Primer, però, eliminarem els valors perduts.

Preparar les variables independents

Ara hem de seguir els mateixos passos, però amb les variables independents. És a dir, aquelles variables que creiem que estan relacionades amb votar i abstenir-se. En podem incloure moltes, però en aquest tutorial només ens centrarem en aquelles variables de tipus sociodemogràfic. Concretament, utilitzarem el gènere, l’edat, els ingressos i el número de fills/filles de l’enquestat.

Gènere

Com sempre, mirem primer quin tipus de variable és i després la recodifiquem.

## [1] "numeric"
## 
##   1   2 
## 707 757

Com veieu a sobre, es tracta d’una variable numèrica i, a més, està codificada amb un 1 (home) i un 2 (dona). Necessitem posar-la a 0 i 1 i convertir-la a factor.

## [1] "factor"

Podem fer fins i tot un gràfic circular.

Edat

El CEO té dues variables d’edat. Una primera (EDAT) codificada com una variable contínua i una segona (EDAT_GR) que es tracta d’una agrupació per grups d’edat. Podeu veure l’agrupació al qüestionari del CEO que hem fet referència abans.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   38.00   50.00   51.19   65.00   94.00
## 
##   1   2   3   4   5 
## 113 175 423 372 381

Per a simplificar l’anàlisi, farem servir l’agrupació. Només ens falta declarar-la com a factor i afegir-li les etiquestes.

## [1] "numeric"
## [1] "factor"

Recordeu d’inspeccionar si ho heu fet bé!

Ingressos

La variable ingressos és una variable complicada. Molta gent no la vol respondre i, entre els que responen, tot sovint no et diuen la veritat. Vegem-ho a sota. Efectivament, 122+122 (244) persones van declarar que no ho sabien o van decidir no respondre.

## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  98  99 
##   5   5  34  83  62 107 193  95 141 168 121  46  24  19  17 122 222

Hi ha moltes maneres de recodificar-la. Idealment, crearíem una variable categòrica, agrupant els valors en funció dels quartils, per exemple. No obstant això, tot seguit assumirem que es tracta d’una variable contínua. És important recordar que aquest supòsit pot ser incorrecte: passar de la categoria 1 a 2 (és a dir, de cobrar res a cobrar menys de 300 euros al mes) pot no tenir el mateix impacte que passar de 14 a 15.

Si volem que la variable sigui contínua, només hem de considerar el valor 98 i 99 com a valors perduts. Ho fem i aprofitem per crear una altra variable amb un nom més intuïtiu.

## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15 
##   5   5  34  83  62 107 193  95 141 168 121  46  24  19  17

Número de fills/filles

Finalment, farem servir la variable número de fills/filles. Fem primer uns descriptius. Com podeu veure, 474 persones asseguren que no tenen cap fill/a, 4 persones no responen o no ho saben i…15 persones tenen 5 o més fills. De fet, hi ha dues persones que tenen 7 fills.

## 
##   0   1   2   3   4   5   6   7  98  99 
## 474 264 520 147  40   9   4   2   1   3

Com que hi ha pocs casos en què es tinguin més de 5 fills, crearem una variable categòrica amb quatre categories: 0 fills, 1 fill, 2 fills, 3 o més fills.

Ens ha sortit bé?

Creuaments de variables

Abans d’endinsar-se a la regressió, podem estar interessats en fer uns creuaments bàsics entre algunes de les variables. De fet, fer-ho és aconsellable. No només ens permet veure alguns patrons descriptius interessants, sinó que ens permet detectar altres qüestions importants, com el fet de tenir poques dades en alguna de les cel·les.

Comencem fent una taula de contingència entre votar i gènere. Com podem veure, hi ha 112 homes que (diuen que) es van abstenir i 115 dones.

##           
##            Dona Home
##   Abstenir  115  112
##   Votar     642  595

Per a visualitzar el patró de forma correcta, però, convé demanar els percentatges. Hi ha moltes formes de fer-ho, per exemple la que veieu a sota. La primera opció ens dona el percentatge de files (per a fer-ho, hi posem un 1) i, la segona, el percentatge de columnes (un 2).

##           
##                 Dona      Home
##   Abstenir 0.5066079 0.4933921
##   Votar    0.5189976 0.4810024
##           
##                 Dona      Home
##   Abstenir 0.1519155 0.1584158
##   Votar    0.8480845 0.8415842

Hi ha, però, altres maneres més “netes” de fer-ho (és a dir, amb un codi més senzill). Una d’aquestes formes és fent servir les funcions que trobem a la llibreria descr. Fixeu-vos que les opcions prop.r, prop.c i prop.t ens donen els percentatges de “row” (fila), “column” (columna) i totals.

##    Cell Contents 
## |-------------------------|
## |                   Count | 
## |             Row Percent | 
## |-------------------------|
## 
## =================================
##             df$genere
## df$votar     Dona    Home   Total
## ---------------------------------
## Abstenir     115     112     227 
##             50.7%   49.3%   15.5%
## ---------------------------------
## Votar        642     595    1237 
##             51.9%   48.1%   84.5%
## ---------------------------------
## Total        757     707    1464 
## =================================

##    Cell Contents 
## |-------------------------|
## |                   Count | 
## |          Column Percent | 
## |-------------------------|
## 
## =================================
##             df$genere
## df$votar     Dona    Home   Total
## ---------------------------------
## Abstenir     115     112     227 
##             15.2%   15.8%        
## ---------------------------------
## Votar        642     595    1237 
##             84.8%   84.2%        
## ---------------------------------
## Total        757     707    1464 
##             51.7%   48.3%        
## =================================
##    Cell Contents 
## |-------------------------|
## |                   Count | 
## |           Total Percent | 
## |-------------------------|
## 
## =================================
##             df$genere
## df$votar     Dona    Home   Total
## ---------------------------------
## Abstenir     115     112     227 
##              7.9%    7.7%        
## ---------------------------------
## Votar        642     595    1237 
##             43.9%   40.6%        
## ---------------------------------
## Total        757     707    1464 
## =================================

També ho podem fer de forma visual. El codi de sota procedeix en dos etapes: Primer, identifica les variables amb les quals estem interessats. Segon, crea una altra base de dades amb només les variables seleccionades. Finalment, crea un gràfic amb les diferents correlacions. Tenint en compte que les variables son de tipus factor (categòriques), el gràfic resultant només ens és útil per veure si a les dades hi ha algun patró estrany.

La regressió

L’últim pas és el de la regressió. Volem saber si les variables gènere, grups d’edat, ingressos i tenir fills tenen una relació estadísticament significativa amb el fet de participar o abstenir-se. Recordeu que la nostra variable dependent és binària: 0, si la persona va assegurar que es va abstenir, 1, si la persona va assegurar que va participar.

Quan tenim una variable dependent d’aquest tipus, una forma de procedir és fent una regressió logística (logit model). El codi de sota executa aquesta regressió. És útil gravar-la en un objecte, que en aquest cas anomenem mylogit. Després, amb la funció summary, explorem els resultats.

Els resultats ens indiquen diferents patrons:

  • La variable gènere no està relacionada amb la participació/abstenció. És a dir, segons aquest model, els homes no tenen una probabilitat estadísticament diferent de participar que les dones.
  • L’edat resulta ser una variable estadísticament significativa. Tots els coeficients son positius, la qual cosa indica que tots els grups d’edat que apareixen a la taula tenen una probabilitat de participar més alta que la categoria de referència (18-24 anys). Dit d’una altra manera, la gent de, per exemple, 35 anys és més probable que voti a les eleccions que la gent de 19 anys.
  • La variable ingressos també és estadísticament significativa. I el coeficient és positiu. A més ingressos, més alta la probabilitat de participar a les eleccions versus abstenir-se.
  • Finalment, cap de les categories de la variable fills és significativa. Segons aquest model, les persones amb fills/es no tenen una probabilitat de participar diferent a les persones sense fills/es.
## 
## Call:
## glm(formula = votar ~ genere + edat_grups + ingressos + progenitors, 
##     family = "binomial", data = df)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.4649   0.3487   0.4496   0.5700   1.4601  
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -0.99185    0.37196  -2.667  0.00766 ** 
## genereHome                   -0.10650    0.18198  -0.585  0.55838    
## edat_grupsDe 25 a 34 anys     0.65658    0.32396   2.027  0.04269 *  
## edat_grupsDe 35 a 49 anys     1.26696    0.31970   3.963 7.40e-05 ***
## edat_grupsDe 50 a 64 anys     1.77815    0.35839   4.961 7.00e-07 ***
## edat_grups65 anys o més       1.99704    0.37626   5.308 1.11e-07 ***
## ingressos                     0.17406    0.03336   5.218 1.81e-07 ***
## progenitors1 fill/a           0.24305    0.27199   0.894  0.37155    
## progenitors2 fills/es         0.19145    0.25189   0.760  0.44721    
## progenitorsMés de 3 fills/es  0.09447    0.32296   0.293  0.76990    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 936.08  on 1118  degrees of freedom
## Residual deviance: 855.92  on 1109  degrees of freedom
##   (345 observations deleted due to missingness)
## AIC: 875.92
## 
## Number of Fisher Scoring iterations: 5

Una manera fàcil de veure quines variables (i categories) són significatives és graficant els coeficients. Per sort, hi ha diverses llibreries que ens ho fan. Una d’elles és la jtools. Com veureu al codi de sota, podem crear un gràfic en què es visualitzen els coeficients i l’interval de confiança (la incertesa del nostre model). Per defecte, aquest interval de confiança és al 95%.

Tot i que cal anar amb cura, aquests gràfics ens permeten també comparar l’efecte dels coeficients entre sí. Per exemple, com ja veiem abans, observem que el grup d’edat de 65 anys o més és molt més probable que participi a les eleccions que la categoria de referència (18-24 anys). Ara, però, també observem que la probabilitat de participar en relació a la categoria de referència és més alta que els que tenen 25 a 34 anys. Dit d’una altra manera, quan els comparem amb els que tenen 18-24 anys, sembla que el grup de 65 anys o més es mobilitza més que el de 25-34 anys. El gràfic també ens permet veure, visualment, els factors que no son significatius: si els “bigotis” de l’interval de confiança creuen el zero, significa que aquell factor no està estadísticament associat amb la participació/abstenció d’una persona.

## Registered S3 methods overwritten by 'broom':
##   method            from  
##   tidy.glht         jtools
##   tidy.summary.glht jtools

Un dels problemes de la regressió logística és la dificultat d’interpretar els coeficients. El model logit calcula probabilitats relatives, la qual cosa dificulta entendre l’efecte de cadascun dels coeficients. A la nostra disciplina hi ha un gran debat sobre quin model s’ha d’utilitzar quan la nostra variable dependent és binària. Mentre alguns argumenten que s’ha d’utilitzar un model logit, d’altres defensen que cal utilitzar una regressió lineal. Aquestes últimes, és a dir, les regressions lineals amb variable dependent binària, se solen anomenar Models de Probabilitat Lineal o Linear Probability Model (LPM). Per internet podeu trobar una llarga llista de referències i discussions sobre quin model és el més adequat i en quines condicions. Per exemple, aquí.

Anem, doncs, a provar de fer un LPM. El primer que hem de fer és canviar el tipus de variable de factor a numèrica. Si no ho fem, R no ens deixarà fer un model lm. Un cop fet, fem un model de regressió lineal múltiple (OLS).

Com podeu veure, els coeficients canvien una mica, però no la significació de les variables. Un dels avantatges que se sol atribuir al LPM és que permet interpretar els coeficients com a percentatges. Per exemple, segons els resultats que veiem a sota, podem dir que la gent de 35 a 49 anys té una probabilitat 23.8 punts percentuals més alta que la gent de 18 a 24 anys (categoria de referència) de participar a les eleccions, mantenint tota la resta de factors constants.

## [1] "numeric"
## 
## Call:
## lm(formula = votar_lineal ~ genere + edat_grups + ingressos + 
##     progenitors, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.98337  0.04399  0.10377  0.16634  0.52810 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   0.429774   0.052146   8.242 4.75e-16 ***
## genereHome                   -0.015023   0.020970  -0.716  0.47390    
## edat_grupsDe 25 a 34 anys     0.143584   0.050339   2.852  0.00442 ** 
## edat_grupsDe 35 a 49 anys     0.238192   0.047567   5.007 6.41e-07 ***
## edat_grupsDe 50 a 64 anys     0.291934   0.049687   5.875 5.57e-09 ***
## edat_grups65 anys o més       0.320718   0.050954   6.294 4.44e-10 ***
## ingressos                     0.021064   0.003861   5.456 6.01e-08 ***
## progenitors1 fill/a           0.022245   0.032178   0.691  0.48951    
## progenitors2 fills/es         0.017629   0.029457   0.598  0.54965    
## progenitorsMés de 3 fills/es  0.007495   0.036650   0.205  0.83799    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3418 on 1109 degrees of freedom
##   (345 observations deleted due to missingness)
## Multiple R-squared:  0.07885,    Adjusted R-squared:  0.07138 
## F-statistic: 10.55 on 9 and 1109 DF,  p-value: 8.635e-16

Com abans, podem dibuixar els coeficients.

Finalment, un darrer apunt pirotècnic. Imagineu-vos que estem interessats en dibuixar les probabilitat de participar o no dels diferents grups d’edat. Ho podem fer amb el codi que veieu a sota.

O el mateix pels ingressos.

Nota final: Aquest tutorial només mostra, d’una forma simple, la vessant estadística bàsica de l’anàlisi de dades. La forma concreta que ha de tenir la regressió depèn en última instància de la teoria o el model explicatiu que tenim intenció de testar. Així mateix, aquí no es fa referència a les múltiples qüestions, teòriques i estadístiques, que poden afectar els nostres resultats (endogeneïtat, variable omesa, etc.).