Introducció

Aquest tutorial ofereix una breu explicació de la regressió lineal múltiple. Abans, però, repassa algunes qüestions bàsiques sobre R i l’anàlisi de dades. Aquest tutorial pressuposa un cert coneixement d’R, com a mínim de les seves funcions més bàsiques.

El primer que cal fer és descarregar-se la base de dades que s’utilitzarà. Us la podeu baixar prement aquí.

El primer pas consisteix en obrir la base de dades. En aquest cas, les dades es troben en format Excel. Per a obrir-la, necessitem una llibreria que tingui una funció que ens permeti obrir bases de dades d’excel. Després d’una cerca ràpida a internet (no patiu, quan més sovint useu R, més us enrecordareu del nom de les llibreries i les funcions), veiem que podem utilitzar la llibreria readxl.

Per tal d’obrir-la, hem de dir a R on és la base de dades. La ruta és diferent per tothom. En el meu cas, tinc ubicada la base de dades en una subcarpeta que es diu OLS. Per saber quina és la vostra ruta, cliqueu a la base de dades amb el botó dret i premeu propietats (o obtenir informació, si useu un MAC). Llegirem la base de dades amb les següents instruccions:

Inspecció i preparació de les dades

La base de dades té les variables següents:

  • ccode: Codi numèric que identifica a cada país basat en el protocol ISO-3166-1. Tots els codis són unics per a cada país. Són útils per fusionar diferents bases de dades (http://en.wikipedia.org/wiki/ISO_3166-1_numeric)
  • cname: Nom del país.
  • van_index: Índex de democratització segons The Quality of Government Institute.
  • ipu_l_sw: Percentatge de dones a la Cambra Baixa del país.
  • lp_legor: Origen històric del sistema legal del país. Codis: 1. English Common Law 2. French Commercial Code 3. Socialist/Communist Laws 4. German Commercial Code 5. Scandinavian Commercial Code.
  • mad_gdppc: PIB per càpita real (en US dòlars del 2011).
  • bci_bci: Indicador de corrupció basat en la percepció de la ciutadania en diferents enquestes.
  • ht_regtype1: Tipus de règim. Codis: 1. Monarchy 2. Military 3. One party 4. Multi-party 9. No-party 99. Other 100. Democracy
  • dpi_plurality: Sistemes electorals pluralistes (winner-take-all).

Si la base de dades és petita, una forma ràpida de saber el nom de la variable, el tipus i els primers valors que té, és utilitzar algunes comandes de la llibreria dplyr. Primer, com sempre, executem la llibreria. Després, executem la funció. Recordeu que el símbol # ens permet escriure instruccions (frases) sense que aquestes s’executin. És a dir, es tracta de línies que R no llegirà. Com a consell, sempre és bo escriure abans d’una comanda sobre allò que fa la comanda i per què ho fem. Penseu en el vostre jo futur: probablement no us enrecordareu d’allò que heu fet. Les notes us ajudaran a refrescar la memòria.

## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Observations: 194
## Variables: 9
## $ ccode         <dbl> 4, 8, 12, 20, 24, 28, 31, 32, 36, 40, 44, 48, 50, …
## $ cname         <chr> "Afghanistan", "Albania", "Algeria", "Andorra", "A…
## $ van_index     <dbl> 14.000000, 33.964287, 5.389050, 8.561865, 6.227712…
## $ ipu_l_sw      <dbl> 27.7, 20.7, 31.6, 50.0, 36.8, 11.1, 15.6, 36.2, 26…
## $ lp_legor      <dbl> 2, 3, 2, 2, 2, NA, NA, 2, 1, 4, 1, 1, 1, NA, 1, 2,…
## $ mad_gdppc     <dbl> 1928, 10947, 13024, NA, 8631, NA, 16045, 19316, 44…
## $ bci_bci       <dbl> 63.17051, 54.64883, 56.66900, 19.99668, 70.70883, …
## $ ht_regtype1   <dbl> 4, 100, 4, NA, 4, 100, 4, 100, 100, 100, 100, 1, 4…
## $ dpi_plurality <dbl> 1, 1, 0, NA, 0, NA, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, …

Tenim una base de dades amb 194 observacions i 9 variables. Després del nom de les variables, i entre “<>”, R et diu el tipus de variable. Per exemple, la variable dpi_plurality és tipus double.

El primer pas és comprovar que les variables estan en el format correcte (per exemple, comprovar que R ens ha llegit una variable categòrica com a factor). Així mateix, hem de comprovar si la variable està operacionalitzada tal i com ho volem (quelcom que comprovarem en el codebook de la base de dades o l’enquesta). Rarament és així. Per tant, haurem d’invertir un cert temps a fer que les variables estiguin llestes per a poder utilitzar-les. Per exemple, la variable dpi_plurality és, com hem vist, double. Tanmateix, com bé sabem, és una variable que només té zeros i uns i, per tant, s’ha de definir com a factor.

Comencem per la primera variable, la nostra variable dependent (van_index). En aquest cas, les funcions que utilitzarem ja venen integrades a R i no caldrà utilitzar cap llibreria.

class és una funció que ens permet saber el tipus de variable. Sempre hem de dir a R quina base de dades volem utilitzar (en el nostre cas, df) i, dins d’aquesta base de dades, quina variable volem inspeccionar (van_index). Per indicar la variable, fem servir el símbol de $.

La funció summary ens permet saber algunes dades descriptives addicionals.

Si executeu el codi que teniu a sota, veureu que la variable van_index oscil·la entre 0 i 47.719. La seva mediana és igual a 20.175 i la seva mitjana és 19.512. A més, hi ha 7 NA, és a dir, 7 cel·les en les quals no hi ha cap valor. R indica que hi ha valors perduts amb NA.

## [1] "numeric"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   8.107  20.175  19.512  28.487  47.719       7

En el cas de van_index no hem de fer cap transformació. van_index és una variable de tipus escala (numèrica). Tanmateix, sempre és recomanable inspeccionar les variables abans de fer una anàlisi estadística. No podem saber si les variables són correctes si abans no les examinem!

Aquest procediment l’hem d’anar repeting per cadascuna de les variables. La primera variable que ens trobem que hem de transformar és la variable lp_legor. Si comproveu la class, veureu que R us diu que és de tipus “numeric”. Això, com hem pogut veure al codebook de la base de dades, no és correcte. lp_legor conté diferents valors arbitraris que van de l’1 al 5. Cadascun d’aquests valors ens informa sobre l’origen legal del país. Recordem els codis: Codis: 1. English Common Law 2. French Commercial Code 3. Socialist/Communist Laws 4. German Commercial Code 5. Scandinavian Commercial Code.

Per tant, hem de transformar la variable. En aquest cas, hem de crear una variable categòrica. En el llenguate d’R aquests tipus de variables s’anomenen factors. El codi de sota ho implementa. Com podeu veure, no només la transformo en categòrica, sinó que dono una etiqueta als valors per tal que siguin més fàcils d’interpretar. També podeu observar que, enlloc de destruir la variable, en creo una de nova (lp_legor_cat). La instrucció c() que veieu a sota és una funció genèrica que permet a R llegir els diferents elements d’un vector. Si no la poseu, no us funcionarà!

Com sabem si ho hem fet bé? Per exemple, amb una taula. Com podeu veure, la recodificació té els mateixos valors en la variable original que en la nova variable recodificada.

## 
##  1  2  3  4  5 
## 53 76 13  6  5
## 
##      English       French    Socialist      Germany Scandinavian 
##           53           76           13            6            5

Ja només ens queden dues variables per modificar. La primera és ht_regtype1. Recordem els codis: 1. Monarchy 2. Military 3. One party 4. Multi-party 9. No-party 99. Other 100. Democracy. Per a fer-ho senzill, crearem una variable dicotòmica que distingeixi entre democràcies (1) i la resta (0). Important: la variable ha de ser de tipus factor. Enrecordeu-vos de fer-ho. El codi de sota fa el següent: primer, crea una variable en què totes les files tenen el valor 0. Després, substitueix els zeros si la variable ht_regtype1 és més petita que 100, és a dir, si es tracta de règims no democràtics. Finalment, la tercera línia converteix la variable de numèrica a factor (les variables binàries son també factors).

L’última variable és dpi_plurality. Si executeu la comanda class(df$dpi_plurality), veureu que us diu que és de tipus numèric. En aquest cas només cal convertir-la en factor. Tanmateix, aprofitarem per posar etiquetes als valors.

Ja tenim totes les variables preparades. Ja podem passar a la fase següent.

Anàlisi univariada

Abans d’entrar directament a la regressió, convé analitzar les variables de forma descriptiva. Ens ajudarà a veure la seva distribució, detectar valors anòmals i, de pas, veure possibles errors.

El tipus d’anàlisi que cal dur a terme depèn, primer, del tipus de variable i, segon, de la visualització de les dades que prioritzem. Tot seguit en podem veure alguns exemples.

Comencem per la nostra variable dependent van_index. Podem fer un histograma. Les opcions main i xlab ens canvien el títol principal i el títol de l’eix de les X.

Pel PIB per càpita podem fer un diagrama de caixa (es tracta, de fet, d’una bona manera de veure els valors anòmals).

Finalment, pel tipus de sistema legal podem utilitzar un gràfic de barres.

De nou, és important inspeccionar bé les variables abans d’entrar a analitzar-les.

Anàlisi bivariada

L’anàlisi bivariada la conformen tots aquells procediments estadístics que testen la relació empírica entre dues variables. És a dir, ens permeten veure si estan relacionades o associades. Una forma de fer-ho és a través d’un gràfic de dispersió. En el codi següent analitzem si hi ha relació entre la nostra variable dependent, van_index, que captura la qualitat democràtica d’un país, i la nostra variable independent, bci_bci, que captura la corrupció del país. Recordeu que aquest tipus de visualitzacions serveixen si les dues variables son contínues o ordinals. Amb variables binàries o categòriques haurem de buscar un altre tipus de visualització (per exemple un gràfic de barres) o un altre tipus d’anàlisi (per exemple, quan és binària, podem usar el coeficient de correlació).

La relació és més fàcil de visualitzar quan hi sobreposem la línea d’ajustament. Vegeu aquest altre tutorial aquí.

Una altra manera una mica més sofisticada és a través del càlcul del coeficient de correlació de Pearson. Com podeu veure, la relació és negativa i estadísticament significativa a un nivell de confiança del 99%.

## 
##  Pearson's product-moment correlation
## 
## data:  df$van_index and df$bci_bci
## t = -4.5626, df = 185, p-value = 9.182e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4413843 -0.1828868
## sample estimates:
##        cor 
## -0.3180339

Anàlisi multivariada - la regressió!

En primer lloc, convé recordar l’equació bàsica de la regressió lineal. És important entendre cadascun dels termes de l’equació. La constant (\(\beta_0\)), els coeficients (\(x_n\beta_n\)) [recordeu que \(x_n\) és la variable i \(\beta_n\) el coeficient] i el terme d’error (\(\varepsilon\)).

\[ y = \beta_0 + x_1\beta_1 + x_2\beta_2 + x_2\beta_3+ \varepsilon \]

Ja estem preparats per la regressió. La funció per la regressió lineal ja ve incorporada a R i no necessitem cap llibreria extra.

Hi ha, però, certs elements que convé tenir en compte. 1) La regressió millor gravar-la en un objecte. Ens faclitarà l’anàlisi. En el codi de sota l’anomenem results. 2) L’ordre lm significa Linear Model. 3) La primera variable que posem és la nostra variable dependent. 4) Després del símbol ~ hi posem les variables independents. Hi ha d’haver un símbol + entre cadascuna d’elles. 5) Aquí no cal que posem el símbol de dòlar. Només cal dir a R que a data farem servir la base de dades df. 6) Un cop executada la regressió, la función summary ens permet veure els resultats.

En el codi que teniu a sota hi tenim un model de regressió en què l’índex de democratització del país (VD) depèn del percentatge de dones a la cambra baixa (ipu_l_sw), el PIB per càpita (mad_gdppc), la corrupció (bci_bci), el tipus de règim legal (lp_legor_cat), si el sistema és democràtic o no (type) i si el sistema electoral és majoritari o proporcional (plur_cat).

Recordeu que en la regressió lineal múltiple els coeficients mostren l’efecte marginal. És a dir, els coeficients indiquen l’increment (o decreixement) de la nostra variable dependent quan la nostra variable independent creix un punt (o té valor 1, enlloc de zero, si és una variable binària) i es mantenen la resta de valors de les variables independents constants.

Fixem-nos, per exemple, en la variable mad_gdppc (PIB per càpita). És estadísticament significativa al 90% de nivell de confiança. Concretament, observem que, quan mad_gdppc puja un punt (és a dir, quan el PIB per càpita puja un punt), la democratització puja 0.0001. Com podeu veure, es tracta d’una relació significativa–és a dir, segons aquest model, el PIB ajuda a democratitzar un país–, però la relació és més aviat fluixa.

En una regressió convé: a) mirar quins coeficients son significatius, b) interpretar els que ho son i els que no ho son (a vegades no trobar resultats és tan important com no trobar-ne), c) dur a terme diagnòstics estadístics (no coberts en aquest tutorial, però els podeu veure aquí i aquí) i d) posar en relació els resultats amb la teoria.

## 
## Call:
## lm(formula = van_index ~ ipu_l_sw + mad_gdppc + bci_bci + lp_legor_cat + 
##     type + plur_cat, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.2219  -5.5339  -0.9179   4.6924  17.2824 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)               2.424e+01  4.753e+00   5.100 1.41e-06 ***
## ipu_l_sw                  2.143e-02  6.786e-02   0.316   0.7527    
## mad_gdppc                 1.233e-04  6.632e-05   1.860   0.0655 .  
## bci_bci                   1.658e-03  7.296e-02   0.023   0.9819    
## lp_legor_catFrench        4.389e-01  1.896e+00   0.231   0.8174    
## lp_legor_catSocialist     1.686e+00  2.968e+00   0.568   0.5711    
## lp_legor_catGermany      -8.170e-02  4.490e+00  -0.018   0.9855    
## lp_legor_catScandinavian  1.149e+01  4.543e+00   2.528   0.0129 *  
## type1                    -1.331e+01  1.681e+00  -7.915 2.03e-12 ***
## plur_catPlurality        -2.899e+00  1.717e+00  -1.688   0.0943 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.123 on 111 degrees of freedom
##   (73 observations deleted due to missingness)
## Multiple R-squared:  0.5751, Adjusted R-squared:  0.5407 
## F-statistic: 16.69 on 9 and 111 DF,  p-value: < 2.2e-16

Com podeu exportar els resultats? La llibreria stargazer ens ho permet fer. Li hem de dir que a) ho volem tipus “text” i b) ho volem exportar amb el nom “model.txt”. Aquesta última opció crearà un arxiu tipus text amb els resultats de la regressió. El podrem obrir amb word o amb un editor de textos i fer copiar-enganxar al word.

## 
## Please cite as:
##  Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.2. https://CRAN.R-project.org/package=stargazer
## 
## ====================================================
##                              Dependent variable:    
##                          ---------------------------
##                                   van_index         
## ----------------------------------------------------
## ipu_l_sw                            0.021           
##                                    (0.068)          
##                                                     
## mad_gdppc                          0.0001*          
##                                   (0.0001)          
##                                                     
## bci_bci                             0.002           
##                                    (0.073)          
##                                                     
## lp_legor_catFrench                  0.439           
##                                    (1.896)          
##                                                     
## lp_legor_catSocialist               1.686           
##                                    (2.968)          
##                                                     
## lp_legor_catGermany                -0.082           
##                                    (4.490)          
##                                                     
## lp_legor_catScandinavian          11.485**          
##                                    (4.543)          
##                                                     
## type1                            -13.307***         
##                                    (1.681)          
##                                                     
## plur_catPlurality                  -2.899*          
##                                    (1.717)          
##                                                     
## Constant                          24.244***         
##                                    (4.753)          
##                                                     
## ----------------------------------------------------
## Observations                         121            
## R2                                  0.575           
## Adjusted R2                         0.541           
## Residual Std. Error           8.123 (df = 111)      
## F Statistic                16.694*** (df = 9; 111)  
## ====================================================
## Note:                    *p<0.1; **p<0.05; ***p<0.01

Nota final: Aquest tutorial només mostra, d’una forma simple, la vessant estadística de les variables i la regressió. 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.).