Aquí se sugiere que el primer paso al trabajar con R y R Studio consiste en preparar el ambiente de trabajo, para lo que se recomienda en configurar el idioma, cargar las librerías a utilizar, definir el directorio de trabajo y, finalmente, cargar los datos a utilizar.
Al comenzar siempre es importante establecer el idioma adecuado para que el programa reconozca caracteres especiales. En el caso de definir al idioma español, la instrucción a utilizar es:
Sys.setlocale("LC_ALL", "en_US.UTF-8") #alternativa 1
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
Sys.setenv(LANG = "es") #alternativa 2
También es importante instalar las librerías que se utilizarán posteriormente, y se utiliza la paquetería easypackages() que permite hacerlos de manera simultánea para varias más. Aquí se utilizarán las paqueterías de tidyverse(), plm() y bife().
library(easypackages) #primero se activa la paquetería global.
paquetes <- c("tidyverse", "plm", "bife", "stargazer") #se crea un objeto con el nombre de las paqueterías a utilizar.
libraries(paquetes) #se carga el objeto con las paqueterías.
## Loading required package: tidyverse
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.6 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.4 ✓ stringr 1.4.0
## ✓ readr 2.1.2 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## Loading required package: plm
##
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
##
## between, lag, lead
## Loading required package: bife
## Loading required package: stargazer
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
## All packages loaded successfully
Además es muy relevante establecer la ubicación del directorio de trabajo, para que el programa identifique el archivo del que extraerá y, también, guardará la información solicitada. Para ello serán útiles los comandos getwd() para identificar la carpeta en la que se encuentra enraizado el programa de R Studio, y setwd(), que permite cambiar el directorio de trabajo hacia la carpeta deseada.
En este documento se trabajará con la base de datos del proyecto Varieties of Democracy (V-DEM), en su modalidad “country-year: v-dem core”, que contiene información para una gran diversidad de indicadores e índices sobre la democracia, vista como régimen político, a nivel mundial.
La matriz de datos se descargó en formato “.csv” y se carga a R Studio con el comando read.csv() de la siguiente manera:
data <- read.csv("~/Dropbox/R/V-Dem-CY-Core-v12.csv", header = TRUE)
Las dimensiones de la matriz de datos contiene 27,380 filas y 1818 columnas.
En este documento se revisará el uso de los modelos de regresión con efectos fijos con una alternativa a los modelos de regresión lineal de mínimos cuadrados ordinarios. En el fondo se intenta identificar una manera adicional para mejorar la estimación de inferencias en los procesos de investigación, especialmente cuando se está ante el problema del sesgo por variables omitidas así como ante el problema de endogeneidad dentro de las variables del modelo mismo que sirve para estimar dicha inferencia.
Ante el problema de controlar variables no observables entre los casos abordados en una matriz de datos, existe la alternativa de controlar al interior de cada caso.
Para ello se identifican dos tipos de variación:
Existen variables factores que no varían en el tiempo (time-invariant) mientras que otros factores sí lo hacen. Y si no se toma en cuenta esta característica de los factores se corre el riesgo de caer en el sesgo de variable omitida y que no necesariamente sean posible observarlas.
El modelo de efectos fijos permite remover el sesgo generado por variables omitidas aún cuando esas variables no estén siendo observadas en el modelo de regresión, especialmente el efecto de las variables que no varían en el tiempo.
El modelo de efectos fijos realiza una comparación dentro de cada caso -i en los diferentes momentos en que es medida. Dicha comparación se evalúa frente a la situación contrafáctica de cada -i, que corresponde a la media de la variable dependiente en cada individuo -i y, a su vez, permite controlar el efecto de las variables omitidas que no varían en el tiempo (o que son fijas).
Modelo formal de OLS:
\[Y_{it} = b_1 + b_2 * X_{2it} + b_3 * X_{3it} + ...+ u_{it}\]
Donde \(Y_{it}\) se refiere al valor registrado para la variable \(Y\) del individuo \(-i\) en un momento \(t\) en el tiempo. Y donde se asume que existen diversos registros en el tiempo para un mismo individuo o caso \(-i\).
Ante este modelo, el modelo de efectos fijos identifica las variables que no varían en el tiempo y las remueve sustituyéndolas con el coeficiente \(\alpha_i\) en un nuevo modelo:
\[Y_{it} = b_1 + b_2 * X_{2it} +...+ \alpha_i + u_{it} \]
Donde \(\alpha_i\) representa un valor único para cada individuo en la matriz panel. Este es el efecto fijo o el efecto individual.
En el modelo se mantienen el resto de variables independientes que sí varían en el tiempo, como \(X_{2it}\), etc.
Además, dicho modelo de efectos fijos debe contemplar el efecto de la variable “tiempo”, para lo que se introduce un nuevo coeficiente \(\delta_t\) en:
\[Y_{it} = b_1 + b_2 * X_{2it} +...+ \alpha_i + \delta_t + u_{it} \]
Este coeficiente permite captar las variaciones en la variable dependiente \(Y_{it}\) derivadas del cambio en el tiempo y no entre individuos.
Este método sustrae la media de cada variable Y y X’s para cada individuo \(-i\) y, posteriormente, estima los coeficientes del modelo. El supuesto es que la media de cada variable fungirá como la variable fija o contrafáctica.
Así, a partir del modelo formal: \[Y_{it} = b_1 + b_2 * X_{2it} +...+ \alpha_i + \delta_t + u_{it} \]
El modelo de comparación sería: \[\bar{Y_i} = b_1 + b_2 * \bar{X_{2i}} +...+ \alpha_i + \bar{\delta_t} + \bar{u_i} \]
Y al reunir ambos modelos se tiene: \[(Y_{it} - \bar{Y_i}) = b_2(X_{2it} - \bar{X_{2i}})+...+ (\delta_t - \bar{\delta_t}) + (u_{it} -\bar{u_i})\]
En este último modelo se anula el coeficiente \(\alpha_i\), por lo que los coeficientes se pueden calcular mediante un análisis de regresión OLS.
En este método se introduce un conjunto de variables dummy para cada unidad o individuo o caso -i (en el que se excluye una categoría de referencia) en un análisis de regresión OLS. Estos factores o variables dummy se ubicarán dentro del coeficiente de \(\alpha_i\), y se asume que cada individuo -i contará con un intercepto diferente. De manera que se considera que cada individuo tendrá un intercepto diferente según la cantidad de variables dummy incluidas en el modelo.
A partir del modelo formal, al incluir las variables dummy en el término \(\alpha_i\) se obtiene: \[Y_{it} = b_1 + b_2 * X_{2it} +...+ \alpha_2*I_{2it} + \alpha_3*I_{3it} +...+ \alpha_n*I_{nit} + \delta_t + u_{it}\]
Este método consiste en sustraer para cada variable su valor registrado en un periodo previo o anterior (lag), y después se estiman los coeficientes del modelo. A partir del modelo formal: \[Y_it = b_1 + b_2 * X_{2it} +...+ \alpha_i + \delta_t + u_{it} \]
Se elabora el modelo con retraso (lag): \[Y_{i(t-1)} = b_1 + b_2 * X_{2i(t-1)} +...+ \alpha_i + \delta_{(t-1)} + u_{i(t-1)} \]
Y se incorporan ambos modelos: \[(Y_{it} - Y_{i(t-1)}) = b_2(X_{2it} - X_{2i(t-1)})+...+ (\delta_t - \delta_{(t-1)}) + (u_{it} - u_{i(t-1)})\]
En este último modelo, el parámetro referente a las variables que no varían en el tiempo se cancelan \(\alpha_i\).
El análisis de datos mediante los modelos de regresión con efectos fijos trabaja con una matriz de datos de tipo panel, pues esta permite contar con registros u observaciones para un mismo caso en más de un momento en el tiempo (\(-it\) y \(-i(t+1)\)). Así se puede trabajar con evaluar las variaciones dentro de cada caso de estudio o individuo \(-i\).
Diferencias entre una matriz de datos de tipo cross-section, longitudinal y panel:
Un ejemplo de la manera en que se visualiza el comportamiento de los índices de igualdad ante la ley (v2xcl_rol) y componente de participación (v2x_partip) en una matriz de datos del tipo longitudinal restringida a un solo caso de estudio, para el que se seleccionó a México por ejemplo:
data %>%
filter(country_text_id == "MEX") %>%
ggplot(aes(v2xcl_rol, v2x_partip)) +
geom_point() +
geom_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'
El mismo ejemplo aplicado a las mismas variables pero en una base de datos longitudinal restringida a un solo caso de estudio, para el que se seleccionó a México:
data %>%
filter(year == 2019) %>%
ggplot(aes(v2xcl_rol, v2x_partip)) +
geom_point(aes(color = factor(country_id))) +
geom_smooth(method = lm) +
theme(legend.position = "none")
## `geom_smooth()` using formula 'y ~ x'
El ejemplo aplicado a las mismas variables pero en una base de datos panel:
data %>%
ggplot(aes(v2xcl_rol, v2x_partip)) +
geom_point(aes(color = factor(country_id))) +
geom_smooth(method = lm) +
theme(legend.position = "none")
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 1278 rows containing non-finite values (stat_smooth).
## Warning: Removed 1278 rows containing missing values (geom_point).
En las dos últimas gráficas se muestran a los países (casos) en la variedad de colores de cada punto.
En el caso de contar con una matriz de datos que contiene información tipo panel, y en caso de desear aprovechar de esta característica en el análisis de efecto causal bajo el método de efectos fijos en R, es importante configurarla para que, así, el programa detecte esta cualidad de los datos.
Para ello se utiliza el script pdata.frame() -que es parte de la librería plm()- el que, sin perder información alguna de la matriz de datos, permite a R reconocer cuáles son las variables en su interior que sirven como unidades de análisis y el tiempo o periodos en la medición. Es importante guardar esta información como un objeto nuevo.
data.p <- plm::pdata.frame(data, # objeto o data frame original
index = c("country_id", # variable que contiene a la unidad de análisis
"year")) # variable que se refiere al periodo o tiempo
A continuación se revisa la manera de estimar los coeficientes de regresión entre los índices de igualdad ante la ley (variable independiente) y la participación electoral (variable dependiente). Para ello se revisará de manera comparativa el procedimiento mediante un modelo de regresión basado en el método de mínimos cuadrados ordinarios (OLS) y un modelo basado en las maneras disponibles para los modelos de efectos fijos.
En un primer momento se propone evaluar el efecto que ejerce la variable independiente sobre la variable dependiente, para lo que se diseña un modelo de regresión lineal bajo el método OLS.
m1 <- lm(v2x_partip ~ v2xcl_rol, data = data)
stargazer(m1,
type = "text",
title = "Modelo OLS")
##
## Modelo OLS
## =================================================
## Dependent variable:
## -----------------------------
## v2x_partip
## -------------------------------------------------
## v2xcl_rol 0.540***
## (0.003)
##
## Constant 0.034***
## (0.002)
##
## -------------------------------------------------
## Observations 26,102
## R2 0.587
## Adjusted R2 0.587
## Residual Std. Error 0.139 (df = 26100)
## F Statistic 37,123.480*** (df = 1; 26100)
## =================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Inicialmente se debe tomar en cuenta que la librería plm() trabaja con diferentes modelos de regresión de datos panel, los más usuales son within (fixed effects), random (random effects), fd (first differences effects).
El modelo de efectos fijos analiza las variaciones dentro de cada caso -i en diferentes momentos en el tiempo, o within variation.
Este modelo calcula la media para cada grupo formado por cada variable de los individuos, y posteriormente sustrae dicha media, de esta manera la única variación que se considera en el análisis es la variación dentro de cada grupo de individuos -i. Esto es una manera de controlar la variación general por los casos o individuos -i, y de esa manera no se realiza la comparación de la variación entre casos (between individuals). De manera que se compara cada caso consigo mismo en diferentes momentos en el tiempo.
El script para realizar dicho modelo de efectos fijos es:
fixedeff <- plm(v2x_partip ~ v2xcl_rol,
data = data.p,
model = "within") ## modelo de regresión de efectos fijos
stargazer(fixedeff,
type = "text",
title = "Modelo de efectos fijos")
##
## Modelo de efectos fijos
## ==========================================
## Dependent variable:
## -----------------------------
## v2x_partip
## ------------------------------------------
## v2xcl_rol 0.605***
## (0.003)
##
## ------------------------------------------
## Observations 26,102
## R2 0.616
## Adjusted R2 0.613
## F Statistic 41,569.870*** (df = 1; 25905)
## ==========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
En el modelo de regresión de efectos fijos se asume el siguiente modelo \[Y = a_i + b*X\], donde cada individuo tiene su propio intercepto (\(a_i\)). Por esa razón no se arroja un valor para el intercepto.
Los resultados arrojados por plm()para el modelo de efectos fijos debería ser idéntico a un modelo de regresión lineal con el comando lm() controlando con la variable factor referente a los casos (Vi).
ols_fix <- lm(v2x_partip ~ v2xcl_rol +
factor(country_id),
data = data) ## modelo OLS con el factor del "país" como control
stargazer(ols_fix,
type = "text",
title = "Modelo con variable dummy")
##
## Modelo con variable dummy
## ==================================================
## Dependent variable:
## ----------------------------
## v2x_partip
## --------------------------------------------------
## v2xcl_rol 0.605***
## (0.003)
##
## factor(country_id)4 -0.169***
## (0.010)
##
## factor(country_id)5 -0.156***
## (0.009)
##
## factor(country_id)6 0.030***
## (0.009)
##
## factor(country_id)7 -0.198***
## (0.011)
##
## factor(country_id)8 0.140***
## (0.010)
##
## factor(country_id)9 -0.200***
## (0.009)
##
## factor(country_id)10 -0.139***
## (0.009)
##
## factor(country_id)11 -0.035***
## (0.009)
##
## factor(country_id)12 -0.066***
## (0.011)
##
## factor(country_id)13 -0.247***
## (0.009)
##
## factor(country_id)14 -0.093***
## (0.010)
##
## factor(country_id)15 -0.064***
## (0.009)
##
## factor(country_id)17 -0.204***
## (0.009)
##
## factor(country_id)19 0.062***
## (0.009)
##
## factor(country_id)20 0.044***
## (0.009)
##
## factor(country_id)21 -0.184***
## (0.009)
##
## factor(country_id)22 0.097***
## (0.009)
##
## factor(country_id)23 -0.374***
## (0.012)
##
## factor(country_id)24 -0.088***
## (0.014)
##
## factor(country_id)25 -0.105***
## (0.009)
##
## factor(country_id)26 -0.122***
## (0.009)
##
## factor(country_id)27 -0.032***
## (0.009)
##
## factor(country_id)28 -0.005
## (0.010)
##
## factor(country_id)29 0.005
## (0.012)
##
## factor(country_id)30 -0.113***
## (0.009)
##
## factor(country_id)31 -0.202***
## (0.011)
##
## factor(country_id)32 0.017
## (0.029)
##
## factor(country_id)33 -0.035***
## (0.010)
##
## factor(country_id)34 0.241***
## (0.012)
##
## factor(country_id)35 0.018
## (0.012)
##
## factor(country_id)36 -0.116***
## (0.009)
##
## factor(country_id)37 0.036***
## (0.009)
##
## factor(country_id)38 -0.136***
## (0.009)
##
## factor(country_id)39 -0.049***
## (0.009)
##
## factor(country_id)40 -0.024**
## (0.010)
##
## factor(country_id)41 0.033***
## (0.012)
##
## factor(country_id)42 -0.165***
## (0.009)
##
## factor(country_id)43 -0.055***
## (0.020)
##
## factor(country_id)44 -0.276***
## (0.011)
##
## factor(country_id)45 -0.023**
## (0.011)
##
## factor(country_id)46 0.142***
## (0.010)
##
## factor(country_id)47 -0.216***
## (0.011)
##
## factor(country_id)48 -0.185***
## (0.010)
##
## factor(country_id)49 -0.169***
## (0.009)
##
## factor(country_id)50 -0.089***
## (0.010)
##
## factor(country_id)51 -0.136***
## (0.009)
##
## factor(country_id)52 -0.135***
## (0.010)
##
## factor(country_id)53 -0.236***
## (0.010)
##
## factor(country_id)54 -0.189***
## (0.012)
##
## factor(country_id)55 -0.157***
## (0.010)
##
## factor(country_id)56 -0.101***
## (0.009)
##
## factor(country_id)57 -0.091***
## (0.010)
##
## factor(country_id)58 -0.075***
## (0.009)
##
## factor(country_id)59 -0.111***
## (0.010)
##
## factor(country_id)60 -0.161***
## (0.011)
##
## factor(country_id)61 -0.007
## (0.011)
##
## factor(country_id)62 0.115***
## (0.010)
##
## factor(country_id)63 -0.018*
## (0.010)
##
## factor(country_id)64 -0.065***
## (0.010)
##
## factor(country_id)65 -0.209***
## (0.011)
##
## factor(country_id)66 -0.046***
## (0.009)
##
## factor(country_id)67 -0.069***
## (0.009)
##
## factor(country_id)68 -0.166***
## (0.010)
##
## factor(country_id)69 0.065***
## (0.011)
##
## factor(country_id)70 -0.124***
## (0.010)
##
## factor(country_id)71 -0.103***
## (0.011)
##
## factor(country_id)72 -0.113***
## (0.009)
##
## factor(country_id)73 -0.134***
## (0.009)
##
## factor(country_id)74 -0.158***
## (0.014)
##
## factor(country_id)75 0.003
## (0.009)
##
## factor(country_id)76 -0.125***
## (0.009)
##
## factor(country_id)77 -0.049***
## (0.009)
##
## factor(country_id)78 0.041***
## (0.009)
##
## factor(country_id)79 -0.131***
## (0.009)
##
## factor(country_id)80 -0.102***
## (0.011)
##
## factor(country_id)81 -0.039***
## (0.011)
##
## factor(country_id)82 -0.131***
## (0.010)
##
## factor(country_id)83 -0.312***
## (0.011)
##
## factor(country_id)84 -0.027*
## (0.014)
##
## factor(country_id)85 -0.116***
## (0.010)
##
## factor(country_id)86 -0.044***
## (0.009)
##
## factor(country_id)87 -0.051***
## (0.010)
##
## factor(country_id)88 -0.183***
## (0.010)
##
## factor(country_id)89 -0.116***
## (0.011)
##
## factor(country_id)90 -0.173***
## (0.009)
##
## factor(country_id)91 -0.155***
## (0.009)
##
## factor(country_id)92 -0.030***
## (0.011)
##
## factor(country_id)93 -0.161***
## (0.010)
##
## factor(country_id)94 -0.273***
## (0.010)
##
## factor(country_id)95 0.028***
## (0.010)
##
## factor(country_id)96 -0.100***
## (0.009)
##
## factor(country_id)97 -0.117***
## (0.011)
##
## factor(country_id)98 -0.138***
## (0.009)
##
## factor(country_id)99 -0.080***
## (0.009)
##
## factor(country_id)100 -0.026
## (0.018)
##
## factor(country_id)101 -0.109***
## (0.009)
##
## factor(country_id)102 -0.138***
## (0.009)
##
## factor(country_id)103 -0.109***
## (0.010)
##
## factor(country_id)104 -0.112***
## (0.010)
##
## factor(country_id)105 -0.156***
## (0.018)
##
## factor(country_id)106 -0.179***
## (0.018)
##
## factor(country_id)107 -0.241***
## (0.018)
##
## factor(country_id)108 -0.083***
## (0.013)
##
## factor(country_id)109 -0.086***
## (0.011)
##
## factor(country_id)110 -0.103***
## (0.009)
##
## factor(country_id)111 0.069***
## (0.010)
##
## factor(country_id)112 0.079***
## (0.011)
##
## factor(country_id)113 -0.120***
## (0.010)
##
## factor(country_id)114 0.004
## (0.009)
##
## factor(country_id)115 -0.147***
## (0.010)
##
## factor(country_id)116 -0.133***
## (0.011)
##
## factor(country_id)117 -0.285***
## (0.010)
##
## factor(country_id)118 -0.125***
## (0.018)
##
## factor(country_id)119 -0.086***
## (0.010)
##
## factor(country_id)120 -0.098***
## (0.010)
##
## factor(country_id)121 -0.300***
## (0.018)
##
## factor(country_id)122 -0.115***
## (0.018)
##
## factor(country_id)123 -0.024**
## (0.010)
##
## factor(country_id)124 -0.004
## (0.012)
##
## factor(country_id)125 -0.059***
## (0.009)
##
## factor(country_id)126 -0.061***
## (0.018)
##
## factor(country_id)127 0.020*
## (0.010)
##
## factor(country_id)128 -0.009
## (0.014)
##
## factor(country_id)129 -0.075***
## (0.011)
##
## factor(country_id)130 -0.083***
## (0.010)
##
## factor(country_id)131 -0.198***
## (0.010)
##
## factor(country_id)132 0.001
## (0.010)
##
## factor(country_id)133 -0.093***
## (0.018)
##
## factor(country_id)134 -0.146***
## (0.011)
##
## factor(country_id)135 -0.234***
## (0.011)
##
## factor(country_id)136 -0.027
## (0.018)
##
## factor(country_id)137 -0.244***
## (0.016)
##
## factor(country_id)138 0.005
## (0.017)
##
## factor(country_id)139 -0.244***
## (0.012)
##
## factor(country_id)140 -0.109***
## (0.010)
##
## factor(country_id)144 -0.058***
## (0.009)
##
## factor(country_id)146 -0.256***
## (0.010)
##
## factor(country_id)147 -0.337***
## (0.010)
##
## factor(country_id)148 -0.124***
## (0.009)
##
## factor(country_id)150 -0.060***
## (0.018)
##
## factor(country_id)152 0.007
## (0.010)
##
## factor(country_id)153 -0.028**
## (0.012)
##
## factor(country_id)154 -0.060***
## (0.017)
##
## factor(country_id)155 -0.073***
## (0.009)
##
## factor(country_id)156 -0.112***
## (0.010)
##
## factor(country_id)157 -0.136***
## (0.011)
##
## factor(country_id)158 -0.141***
## (0.009)
##
## factor(country_id)160 -0.129***
## (0.010)
##
## factor(country_id)161 -0.053***
## (0.014)
##
## factor(country_id)162 -0.259***
## (0.010)
##
## factor(country_id)163 -0.023**
## (0.009)
##
## factor(country_id)164 -0.106***
## (0.009)
##
## factor(country_id)166 -0.118***
## (0.010)
##
## factor(country_id)167 -0.451***
## (0.011)
##
## factor(country_id)168 -0.034***
## (0.011)
##
## factor(country_id)169 -0.066***
## (0.013)
##
## factor(country_id)171 -0.331***
## (0.009)
##
## factor(country_id)173 -0.086***
## (0.014)
##
## factor(country_id)174 -0.059***
## (0.011)
##
## factor(country_id)176 -0.032*
## (0.018)
##
## factor(country_id)177 -0.162***
## (0.010)
##
## factor(country_id)178 -0.331***
## (0.011)
##
## factor(country_id)180 -0.076***
## (0.010)
##
## factor(country_id)183 -0.155***
## (0.016)
##
## factor(country_id)185 -0.071***
## (0.010)
##
## factor(country_id)186 -0.149***
## (0.009)
##
## factor(country_id)187 -0.142***
## (0.010)
##
## factor(country_id)189 -0.061***
## (0.009)
##
## factor(country_id)190 -0.071***
## (0.010)
##
## factor(country_id)196 -0.201***
## (0.010)
##
## factor(country_id)197 -0.138***
## (0.009)
##
## factor(country_id)198 -0.188***
## (0.009)
##
## factor(country_id)199 -0.394***
## (0.011)
##
## factor(country_id)200 -0.306***
## (0.010)
##
## factor(country_id)201 0.010
## (0.017)
##
## factor(country_id)202 0.053***
## (0.017)
##
## factor(country_id)203 -0.194***
## (0.010)
##
## factor(country_id)206 -0.396***
## (0.011)
##
## factor(country_id)207 -0.347***
## (0.014)
##
## factor(country_id)209 -0.213***
## (0.018)
##
## factor(country_id)210 0.0002
## (0.009)
##
## factor(country_id)236 -0.199***
## (0.009)
##
## factor(country_id)349 -0.287***
## (0.026)
##
## factor(country_id)350 -0.290***
## (0.012)
##
## factor(country_id)351 -0.223***
## (0.014)
##
## factor(country_id)353 -0.293***
## (0.012)
##
## factor(country_id)355 -0.357***
## (0.012)
##
## factor(country_id)356 -0.093***
## (0.013)
##
## factor(country_id)357 -0.159***
## (0.012)
##
## factor(country_id)359 -0.371***
## (0.012)
##
## factor(country_id)360 -0.328***
## (0.012)
##
## factor(country_id)361 -0.149***
## (0.012)
##
## factor(country_id)363 -0.342***
## (0.012)
##
## factor(country_id)365 -0.386***
## (0.014)
##
## factor(country_id)373 -0.275***
## (0.013)
##
## Constant 0.116***
## (0.006)
##
## --------------------------------------------------
## Observations 26,102
## R2 0.815
## Adjusted R2 0.814
## Residual Std. Error 0.093 (df = 25905)
## F Statistic 582.117*** (df = 196; 25905)
## ==================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Este modelo plantea que cada individuo (\(V_i\)) tiene un intercepto específico pero no se permitirá que este sea cualquier valor sino que, en cambio, se asumirá que el intercepto de distribuye normalmente. Esto es, el modelo de efectos aleatorios asume que \[Y = a_i + b*X\] donde se asume que \(a_i\) se distribuye normalmente.
También se asume que el error está correlacionado con las variables explicativas, lo que supone que se relajan los supuestos del modelo de regresión lineal.
Comando plm() para efectos aleatorios:
randomeff <- plm(v2x_partip ~ v2xcl_rol,
data = data.p,
model = "random") ## modelo de regresión de efectos fijos
stargazer(randomeff,
type = "text",
title = "Modelo de efectos aleatorios")
##
## Modelo de efectos aleatorios
## ========================================
## Dependent variable:
## ---------------------------
## v2x_partip
## ----------------------------------------
## v2xcl_rol 0.604***
## (0.003)
##
## Constant -0.001
## (0.007)
##
## ----------------------------------------
## Observations 26,102
## R2 0.616
## Adjusted R2 0.616
## F Statistic 41,729.370***
## ========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
En este modelo se puede observar que sí se calculó el valor para el intercepto, derivado a que se estima que consiste en un promedio con distribución normal, común para el resto de las unidades de análisis.
Este modelo sustrae o resta a cada valor de \(Y_i\), el valor de \(Y_i\) para el año previo (o \(Y_{i(t-1)}\)), y con esto crea la primera diferencia.
El modelo de first differences se presenta como \[Y_{it} - Y_{i(t-1)} = a + b*(X_{it} - X_{i(t-1)})\]
Comando plm() para el modelo de primeras diferencias:
first_dif_eff <- plm(v2x_partip ~ v2xcl_rol,
data = data.p,
model = "fd") ## modelo de regresión de efectos fijos
stargazer(first_dif_eff,
type = "text",
title = "Modelo de primeras diferencias")
##
## Modelo de primeras diferencias
## =========================================
## Dependent variable:
## ----------------------------
## v2x_partip
## -----------------------------------------
## v2xcl_rol 0.331***
## (0.004)
##
## Constant 0.001***
## (0.0001)
##
## -----------------------------------------
## Observations 25,906
## R2 0.247
## Adjusted R2 0.247
## F Statistic 8,508.022*** (df = 1; 25904)
## =========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
En este modelo también se presenta el valor del coeficiente para el intercepto de la recta de mejor ajuste, pues en el fondo se está calculando una recta como promedio de todas las diferencias.
Hasta este momento se han generado cuatro tipos de modelos:
Al comparar los valores de los coeficientes de regresión de estos modelos se observar algunas diferencias:
stargazer(m1,
fixedeff,
randomeff,
first_dif_eff,
type = "text",
title = "Comparación de modelos")
##
## Comparación de modelos
## ==========================================================================================================================
## Dependent variable:
## ------------------------------------------------------------------------------------------------------
## v2x_partip
## OLS panel
## linear
## (1) (2) (3) (4)
## --------------------------------------------------------------------------------------------------------------------------
## v2xcl_rol 0.540*** 0.605*** 0.604*** 0.331***
## (0.003) (0.003) (0.003) (0.004)
##
## Constant 0.034*** -0.001 0.001***
## (0.002) (0.007) (0.0001)
##
## --------------------------------------------------------------------------------------------------------------------------
## Observations 26,102 26,102 26,102 25,906
## R2 0.587 0.616 0.616 0.247
## Adjusted R2 0.587 0.613 0.616 0.247
## Residual Std. Error 0.139 (df = 26100)
## F Statistic 37,123.480*** (df = 1; 26100) 41,569.870*** (df = 1; 25905) 41,729.370*** 8,508.022*** (df = 1; 25904)
## ==========================================================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
En un inicio es fácil de identificar que no todos los modelos cuentan con un valor para el intercepto o la ordenada al origen de la recta de regresión. Esto ocurre solo para el caso del modelo de regresión de efectos fijos, y se debe a que -como se refirió arriba- aquí se asume que cada caso \(-i\) o grupo de observación cuenta con una recta propia y, por tanto, con un valor respectivo para dicho coeficiente \(b_1\).
Otra diferencia radica en la variación existente entre los valores de los coeficientes de regresión \(b_{2} * X_{2}\). Aquí es importante recordar que estas diferencias radican debido a que cada modelo supone un tipo de análisis bajo supuestos distintos:
Ante este panorama surge la interrogante sobre ¿cuál es el mejor modelo a adoptar para avanzar en la evaluación de las inferencias que guían a las investigaciones basadas en datos tipo panel?
En principio se puede descartar el modelo OLS debido a que, si se está trabajando con datos tipo panel, este modelo no reduce el sesgo de variables omitidas que se pueden “colar” debido a características no observadas asociadas a los casos o grupos de análisis, debido a que realiza la comparación entre todos los casos a la vez.
En segundo lugar, es importante identificar si el modelo de primeras diferencias está ayudando a responder la pregunta de investigación que el analista se hubiera llegado a plantear y, por tanto, la información estimada permite evaluar eficientemente a la inferencia. Si este modelo no necesariamente responde directamente a las necesidades de la investigación, se debe contemplar algún modelo alternativo.
Finalmente, en caso de trabajar con los datos tipo panel es recomendable retomar los modelos de regresión con efectos fijos y con efectos aleatorios. Como se observa en la tabla de comparación de modelos, ambos estiman valores muy cercanos entre sí para sus coeficientes de regresión. Además, aunque no es claramente distinguible en los datos utilizados, existe el supuesto de errores estándar que suelen ser más grandes en los modelos con efectos fijos, lo que los vuelven menos eficientes que los modelos con efectos aleatorios. Pero estos últimos tienden a relajar los supuestos de correlación entre los errores del modelo con las variables explicativas.
Es necesario compara los resultados de los modelos de efectos fijos con los de efectos aleatorios con el fin de identificar si son semejantes entre sí, y así definir cuál es el modelo a elegir como mejor explicación posible.
Es importante realizar pues el modelo de efectos aleatorios supone otros supuestos por encima del modelo de *efectos fijos**, específicamente se busca evaluar el supuesto donde el intercepto \(a_{is}\) no está correlacionado con las variables de control.
Si estos supuestos son erróneos, entonces el modelo de efectos aleatorios estará sesgado y, por tanto, se podrá rechazar. En cambio, si los supuestos son correctos, entonces el modelo tendrá menor sesgo y será más eficiente (sus errores estándar serán más pequeños que un modelo de efectos fijos).
Si los supuestos adicionales son correctos entonces se tienen errores estándar más pequeños, y eso supone que se está utilizando información adicional para añadir precisión al modelo de regresión.
Por ello se hace la comparación entre modelos a partir de la prueba de Hausman, donde H0 plantea que ambos son estadísticamente semejantes. Si se rechaza H0, entonces se asume que son diferentes entre sí: y por tanto se toma la decisión de quedarse con el modelo de efectos fijos.
Si no se rechaza H0 entonces la mejor decisión es quedarse con el modelo de efectos aleatorios.
Comando de la prueba de Hausman
phtest(fixedeff,
randomeff)
##
## Hausman Test
##
## data: v2x_partip ~ v2xcl_rol
## chisq = 17.153, df = 1, p-value = 3.448e-05
## alternative hypothesis: one model is inconsistent
Se evalúa el valor del p-value para tomar una decisión sobre H0. En el valor estimado se observa que es muy pequeño (al menos es menor que un nivel de significancia (alfa) por debajo de 0.05), con lo que se puede tomar la decisión de rechazar a H0.
A partir de esta decisión se puede optar por quedarse con el modelo de efectos fijos como la mejor explicación del efecto de la variable independiente sobre la dependiente.
En este caso, la interpretación del coeficiente del modelo plantea que: si en un caso \(-i\) dado se incrementa la variable independiente en una unidad, se espera que en dicho caso \(-i\) la variable dependiente se mueva en \(\beta_2\) unidades.
Retomando la información generada en el modelo con efectos fijos trabajado en este documento, entonces, se puede plantear que por cada incremento en 1 unidad en la variable del índice de igualdad ante la ley (v2xcl_rol) dentro de un caso \(-i\), el componente de participación (v2x_partip) se incrementará en 0.605 unidades dentro del mismo caso \(-i\), con un nivel de confianza del 95%.
En el caso de trabajar con una variable dependiente (\(Y\)) de corte categórica binominal (con solo dos valores posibles), entonces es importante considerar que el modelo de regresión deberá sufrir una modificación para permitir avanzar en el análisis de efectos causales. Para ello se puede recurrir a los modelos de regresión no lineales; aquí se revisará el procedimiento para un modelo de regresión logístico o logit. A su vez, en la medida en que la base de datos con la que se está trabajando se caracteriza por se de tipo panel, en donde cada caso cuente con, al menos, dos mediciones para la variable \(Y_i\), entonces también será posible recuperar la estrategia de controlar por efectos fijos para, así, evaluar las variaciones al interior de cada grupo de casos.
Este tipo de modelos toman en consideración que la variable dependiente es de tipo binomial, en donde se evalúa la probabilidad de que la variable dependiente adopte el valor de éxito, esto es que \(p(Y_{it} = 1)\) condicionado por el comportamiento de una variable dependiente \(X_{it}\), controlando el efecto de las variaciones dentro de cada grupo de casos \(-i\) en cada momento del tiempo \(-t\).
Para el cálculo de las probabilidades \(p(Y_{it} = 1)\) se toma en cuenta un modelo de distribución de probabilidades de tipo logístico, donde el modelo formal para evaluar el efecto causal, y así calcular el valor de los coeficientes de regresión (\(\beta\)) asociados a cada variable independiente (\(\mathbf{X_{it}}\)), es del tipo:
\[log\left(\frac{p_{it}}{1-p_{it}}\right)= \mu_t + \beta\mathbf{X_{it}} + \gamma\mathbf{Z_{i}} + \alpha_{i} \]
A partir de este modelo formal se identifica que \(p_{it}\) se corresponde con la probabilidad de que la variable dependiente se corresponde con el valor de éxito o interés a analizar (\(p(Y_{it} = 1)\)). Por su parte, \(\mathbf{X_{it}}\) consiste en un vector de variables independientes o predictoras que tienden a variar en el tiempo. Por otro lado, \(\mathbf{Z_{i}}\) consiste en un vector de variables independientes fijas o que no tienden a variar en el tiempo. Y, finalmente, \(\alpha_{i}\) representa los efectos combinados de todas las variables omitidas y que son constantes en el tiempo.
A continuación se trabajará un modelo de regresió logit binominal con efectos fijos en el que se busca evaluar el efecto de la variable independiente del índice de elecciones limpias (clean elections index), que se codificó con la clave (v2xel_frefair), sobre la variable dependiente de la compra de votos (election vote buying), que se condificó con la clave (v2elvotbuy_ord), en la base de datos del proyecto V-Dem.
El primer paso para avanzar en el análisis del modelo de regresión propuesto consiste en revisar las características de las variables y, si es necesario, transformarlas.
En el caso de la variable independiente se identifica la clase en que R la reconoce:
class(data $ v2xel_frefair)
## [1] "numeric"
summary(data $ v2xel_frefair)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.0000 0.0000 0.1010 0.2733 0.5050 0.9870 265
Esto permite identificar que es una variable de clase “numeric”, esto es que consiste en una variable continua intervalar, y sus valores varían en un rango de (0.0, 0.9870).
Por el otro lado, en el caso de la variable dependiente se busca, también, identificar su clase y distribución de valores:
class(data $ v2elvotbuy_ord)
## [1] "integer"
summary(data $ v2elvotbuy_ord)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 1.000 2.000 2.136 3.000 4.000 22542
La variable dependiente es de clase “integer” (números enteros), y varía dentro de un rango de (0, 4).
Sin embargo es importante tomar en consideración que para la implementación del modelo de regresión logit es importante que esta variable sea de corte categórica binominal. Por ello se deberá modificar la clase en que es reconocida por R, además que se deberán recodificar los valores de respuestas.
En un primer primer momento se transformará la variable original para, así, crear una nueva columna en la que se recodifiquen los valores posibles y se agrupen en solamente dos posibles (a manera de una variable dummy). Tomando en cuenta el libro de códigos de la base de datos, se optó por integrar en una categoría (con valor de 1 o “éxito”) a los valores originales codificados con los valores (0, 1, 2), pues estos últimos refieren la presencia de la práctica de la compra de votos. De manera complementaria se optó por integrar otra categoría (con valor de 0 o “fracaso”), que incluye a los valores originales (3, 4), pues estos refieren la ausencia o presencia sumamente débil del fenómeno de la compra de votos.
Para realizar dicha transformación se utilizó el comando mutate() de la librería dplyr(), y se creó la variable vote_buy_dum
data <- data %>%
mutate(vote_buy_dum = ifelse(v2elvotbuy_ord < 3, 1, 0))
class(data $ vote_buy_dum)
## [1] "numeric"
summary(data $ vote_buy_dum)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 0.000 1.000 0.573 1.000 1.000 22542
Tras dicha transformación se identificó que el rango de valores de la nueva variable vote_buy_dum es de (0, 1), a su vez es de clase numeric. Por tanto se requiere realizar una segunda transformación de la variable en la que se cambie de clase a una de tipo factor, para ello se utiliza el comando factor() de la siguiente manera:
data $ vote_buy_dum <- factor(data $ vote_buy_dum)
class(data $ vote_buy_dum)
## [1] "factor"
table(data $ vote_buy_dum)
##
## 0 1
## 2068 2770
Ahora podemos identificar que se ha modificado la clase de la variable a factor, y su distribución se ha podido evaluar mediante una tabla de frecuencias, y sus valores posibles son solamente dos, donde 0 = no hay compra del voto, 1 = sí hay compra del voto. Ahora ya está lista dicha variable para ser incluida en el modelo de regresión logit.
La implementación de dicho modelo logit binomial con efectos fijos en R se apoyará, aquí, en la librería bife(), en la que el primer argumento consiste en el diseño del modelo a partir de indicar la variable dependiente y sus independientes o predictoras; un segundo argumento consiste en definir, de manera condicional, la variable que definirá el identificador de cada caso y, a su vez, ayuda a señalar las variables que no varían en el tiempo. El tercer argumento consiste en definir el objeto o data frame. El último argumento consiste en definir el tipo de modelo generalizado para analizar los datos, en este caso los resultados posibles con “logit” o “probit”.
modelo_log <- bife(vote_buy_dum ~ #variable dependiente
v2xel_frefair | #variable independiente
country_id, # variable fija o identificador o unidad de observación
data, #data frame
"logit") #modelo generalizado
summary(modelo_log) #se solicitan los valores de los coeficientes, error estándar, valores z y p-value
## binomial - logit link
##
## vote_buy_dum ~ v2xel_frefair | country_id
##
## Estimates:
## Estimate Std. error z value Pr(> |z|)
## v2xel_frefair -4.4342 0.2538 -17.47 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## residual deviance= 2357.22,
## null deviance= 3689.54,
## nT= 2804, N= 92
##
## ( 22542 observation(s) deleted due to missingness )
## ( 2034 observation(s) deleted due to perfect classification )
##
## Number of Fisher Scoring Iterations: 6
##
## Average individual fixed effect= 2.666
A partir de los valores arrojador por el comando summary() del modelo se pueden identificar varios elementos.
Inicialmente se puede identificar que el valor del coeficiente de regresión (\(\beta\)) para la variable independiente es de -4.4342. Aquí se debe recordar que este valor no se puede interpretar de manera directa pues está expresado en unidades logarítmicas. Pero sí se puede identificar el sentido del efecto causal de \(X_{it}\) sobre \(Y_{it}\), que en este caso es negativo. Esto es, a medida que se incrementa el nivel del índice de elecciones limpias, esto tendrá un efecto indirecto o negativo sobre la probabilidad de que ocurra la compra del voto en cada caso en sus distintos momentos observados.
Por otro lado se puede identificar que la variable independiente es estadísticamente significativa a un nivel \(p < 0.0001\).
Otro elemento importante a considerar es la cantidad de casos que no fueron incluidos el análisis. Inicialmente se indica que no se incluyeron 22,542 casos debido a que contaban con valores perdidos. Posteriormente se indica que \(nT = 2804\) casos fueron considerados para el análisis, pues contaban con la información necesaria pero, después, se refiere que se excluyeron a 2034 casos debido a “clasificación perfecta”. Esto último se refiere que que estos casos no pudieron ser incluidos en el procesamiento del modelo de regresión pues no contaron con variación en su variable dependiente \(Y_{it}\). Dicho de otra manera, el valor de registro inicial en \(Y_i\) no cambió en ningún momento posterior de observación \(-t\). De manera que solo se incorporaron, finalmente, a \(N=92\) casos en el análisis del modelo de regresión logit.
A partir de los resultados del ejemplo anterior se identificó que el efecto causal de X sobre Y es de -4.4342, medido en unidades logarítmicas de la razón entre las probabilidades de \(\frac{p_{it}}{1-p_{it}}\). Estos valores son difíciles de interpretar de manera directa. Por ello es necesario transformar los valores calculados de los coeficiente mediante su valor exponencial, lo que arrojará el valor de la razón de probabilidades (odd ratio), y que permite tener una idea más clara sobre la probabilidad de que ocurra \(p[(Y=1) | X_{it}]\).
exp(coef(modelo_log))
## v2xel_frefair
## 0.01186403
A partir de este valor se puede interpretar la razón de probabilidades de varias maneras.
En una primera interpretación se puede plantear que: “se puede afirmar que dentro de cada caso, por cada incremento de una unidad el índice de elecciones limpias (\(X_{it}\)), la probabilidad de encontrar a un país que ocurrió la compra de votos es de 0.988136 (esto se deriva de restar 1 - 0.01186403) veces menor que a un caso en el que no ocurrió la compra de votos”.
Si se desea, se puede realizar una transformación adicional a los valores de los odds ratio para, así, interpretarlos de manera literal. Por ejemplo, se puede tomar el valor de los odds ratio y restale 1 para, después, multiplicarlo por 100 y, de esa manera, obtener el valor en unidades porcentuales del cambio en la razón de probabilidades por cada incremento de una unidad en la variable independiente (X).
(exp(coefficients(modelo_log))-1)*100
## v2xel_frefair
## -98.8136
La manera de interpretar este coeficiente es: vote_buy_dum = -4.4342443, donde “Por cada incremento en 1 unidad en el índice de elecciones limpias dentro de cada país analizado, se espera observar un decremento (debido al signo negativo) de 98.81% en la probabilidad de que ocurra el fenómeno de la compra de votos. Y con un valor de unidades z = -17.47 y un p-value < 2e-16, este coeficiente se puede considerar estadísticamente significativo con un nivel de significancia (\(\alpha\)) menor a 0.0001”.