Inicio Sesión 1 Sesión 2 Sesión 3 Sesión 4 Sesión 5 Ejercicios
Stata
es un software muy apropiado para elaborar tablas de contingencia simples y complejas. Para ilustrar el empleo de estos comandos, utilizaremos la base de datos ecv18t
, que se encuentra en la carpeta sesión3
e incluye una serie de variables que permiten analizar algunos aspectos del mercado de trabajo. Podemos encontrar explicaciones detalladas, por ejemplo, en el libro de Escobar et al. (2012) o el de Kohler & Kreuter (2012).
tabulate
)Es uno de los comandos más utilizados de Stata
, esencial para explorar las bases de datos. La sintaxis es la siguiente:
Tabla de una variable (one-way table)
tabulate varname [if] [in] [weight] [, tabulate1_options]
Tabla de dos variables (two-way table)
tabulate varname1 varname2 [if] [in] [weight] [, options]
Las opciones para crear las tablas son numerosas: número de observaciones, frecuencias de celdas, filas o columnas, etc.
En nuestra base de datos, por ejemplo, podemos crear una tabla con la distribución de la educación en la población.
. // Fijamos el directorio de trabajo . . cd "D:\Dropbox\curso_stata\sesión3" D:\Dropbox\curso_stata\sesión3 . . // Abrimos el archivo . . use "ecv18t.dta", clear (ECV 2018 (mercado de trabajo)) . . // Tabla de frecuencias absolutas . . tabulate educg Educación (agrupada) │ Freq. Percent Cum. ──────────────────────┼─────────────────────────────────── Nivel educativo bajo │ 7,841 38.64 38.64 Nivel educativo medio │ 5,429 26.75 65.40 Nivel educativo alto │ 7,022 34.60 100.00 ──────────────────────┼─────────────────────────────────── Total │ 20,292 100.00
Asimismo, podemos crear una tabla que recoja la distribución de la educación por sexo.
. // Tabla de frecuencias absolutas . . tabulate educg sexo │ Sexo Educación (agrupada) │ Hombre Mujer │ Total ──────────────────────┼──────────────────────┼────────── Nivel educativo bajo │ 4,109 3,732 │ 7,841 Nivel educativo medio │ 2,710 2,719 │ 5,429 Nivel educativo alto │ 3,162 3,860 │ 7,022 ──────────────────────┼──────────────────────┼────────── Total │ 9,981 10,311 │ 20,292 . . // Distribución por sexo por nivel educativo (porcentaje por filas). . . tabulate educg sexo, row nofreq │ Sexo Educación (agrupada) │ Hombre Mujer │ Total ──────────────────────┼──────────────────────┼────────── Nivel educativo bajo │ 52.40 47.60 │ 100.00 Nivel educativo medio │ 49.92 50.08 │ 100.00 Nivel educativo alto │ 45.03 54.97 │ 100.00 ──────────────────────┼──────────────────────┼────────── Total │ 49.19 50.81 │ 100.00 . . // Distribución del nivel educativo por sexo (porcentaje por columnas). . . tabulate educg sexo, col nofreq │ Sexo Educación (agrupada) │ Hombre Mujer │ Total ──────────────────────┼──────────────────────┼────────── Nivel educativo bajo │ 41.17 36.19 │ 38.64 Nivel educativo medio │ 27.15 26.37 │ 26.75 Nivel educativo alto │ 31.68 37.44 │ 34.60 ──────────────────────┼──────────────────────┼────────── Total │ 100.00 100.00 │ 100.00 . . // Porcentaje de observaciones en cada celda. . . tabulate educg sexo, cell nofreq │ Sexo Educación (agrupada) │ Hombre Mujer │ Total ──────────────────────┼──────────────────────┼────────── Nivel educativo bajo │ 20.25 18.39 │ 38.64 Nivel educativo medio │ 13.36 13.40 │ 26.75 Nivel educativo alto │ 15.58 19.02 │ 34.60 ──────────────────────┼──────────────────────┼────────── Total │ 49.19 50.81 │ 100.00
Adicionalmente, Stata
nos permite realizar algunos tests estadísticos para contrastar si las dos variables se distribuyen de forma independiente, como el test de la \(\chi^2\) de Pearson (opción chi2
), entre otros muchos.
Podemos crear tablas de una o dos variables con los estadísticos descriptivos de otras variables mediante la instrucción tabulate, summarize()
.
tabulate varname1 [varname2] [if] [in] [weight] [, options]
Por ejemplo, podemos calcular los estadísticos descriptivos del salario promedio por nivel educativo o por nivel educativo y sexo.
. // Tabla con estadísticos descriptivos para valores de una o más variables . . tabulate educg, summarize(salario) Educación │ Summary of Salario bruto mensual (agrupada) │ Mean Std. dev. Freq. ────────────┼──────────────────────────────────── Nivel edu │ 1429.6244 954.13983 3,751 Nivel edu │ 1770.063 1851.12 2,911 Nivel edu │ 2556.1645 2084.1949 5,082 ────────────┼──────────────────────────────────── Total │ 2001.4988 1808.3896 11,744 . . tabulate educg sexo, summarize(salario) Means, Standard Deviations and Frequencies of Salario bruto mensual Educación │ Sexo (agrupada) │ Hombre Mujer │ Total ───────────┼──────────────────────┼────────── Nivel edu │ 1555.3305 1246.9435 │ 1429.6244 │ 983.26205 878.97375 │ 954.13983 │ 2222 1529 │ 3751 ───────────┼──────────────────────┼────────── Nivel edu │ 1979.7629 1544.048 │ 1770.063 │ 1528.6274 2122.5805 │ 1851.12 │ 1510 1401 │ 2911 ───────────┼──────────────────────┼────────── Nivel edu │ 2869.5636 2296.2395 │ 2556.1645 │ 2527.3422 1581.6394 │ 2084.1949 │ 2304 2778 │ 5082 ───────────┼──────────────────────┼────────── Total │ 2163.1645 1830.5433 │ 2001.4988 │ 1926.792 1657.1965 │ 1808.3896 │ 6036 5708 │ 11744
Además, disponemos del comando table
para construir tablas con estadísticos descriptivos de forma más flexible.
table rowvar [colvar [supercolvar]] [if] [in] [weight] [, options]
El salario promedio por educación, sexo y tipo de contrato se calcularía como sigue:
. table educg sexo contrato, statistic(mean salario) ────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────── │ Tipo de contrato │ Contrato fijo de duración indefinida Contrato temporal de duración determinada Total ────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────── Educación (agrupada) │ Nivel educativo bajo │ Sexo │ Hombre │ 1791.071 1145.353 1567.713 Mujer │ 1403.295 1039.947 1263.776 Total │ 1640.77 1100.317 1445.553 Nivel educativo medio │ Sexo │ Hombre │ 2259.453 1258.596 1991.56 Mujer │ 1716.245 1157.733 1548.938 Total │ 2004.423 1207.284 1778.839 Nivel educativo alto │ Sexo │ Hombre │ 3187.971 1594.592 2893.743 Mujer │ 2517.448 1644.344 2305.495 Total │ 2832.299 1625.201 2570.911 Total │ Sexo │ Hombre │ 2497.736 1293.175 2178.593 Mujer │ 2066.546 1314.728 1845.606 Total │ 2292.833 1304.191 2017.02 ────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────
Como es sabido, este tipo de análisis se emplea para contrastar si la media de una variable en dos o más poblaciones es diferente. En Stata
, se implementa con facilidad con el comando anova
:
anova varname [termlist] [if] [in] [weight] [, options]
Para contrastar si el salario promedio es diferente por nivel educativo, emplearíamos la siguiente instrucción:
. anova salario educg Number of obs = 11,744 R-squared = 0.0767 Root MSE = 1737.79 Adj R-squared = 0.0766 Source │ Partial SS df MS F Prob>F ───────────┼──────────────────────────────────────────────────── Model │ 2.946e+09 2 1.473e+09 487.79 0.0000 │ educg │ 2.946e+09 2 1.473e+09 487.79 0.0000 │ Residual │ 3.546e+10 11,741 3019901.9 ───────────┼──────────────────────────────────────────────────── Total │ 3.840e+10 11,743 3270273
Podemos ver que, efectivamente, se rechaza la hipótesis nula de igualdad de medias. Sobre la implementación del ANOVA, podemos recurrir, nuevamente, a Escobar et al. (2012) y Kohler & Kreuter (2012).
Sin duda, es la técnica de análisis multivariantes más popular. En Stata
, las regresiones lineales se implementan a través del comando regress
:
regress depvar [indepvars] [if] [in] [weight] [, options]
El abanico de opciones que nos ofrece un comando como regress
es enorme. Algunos ejemplos de manuales muy recomendables son Adkins & Hill (2010), Baum (2006) y Cameron & Trivedi (2010). Un buen libro que conecta teoría y práctica es el de Wooldridge (2019).
Vamos a realizar un ejercicio simple, consistente en una regresión a la Mincer (1958), consistente en tratar de explicar/predecir el salario de una persona en función de su sexo, edad, edad al cuadrado y escolaridad. El modelo a estimar sería el siguiente:
\[ \log \text{salario}_i = \beta_0 + \beta_1 X_i + \epsilon_i \]
En primer lugar, vamos a crear una nueva variable, la edad al cuadrado.
. generate edad2 = edad^2 . label variable edad2 "Edad al cuadrado"
Habitualmente, se emplea el salario en logaritmos, porque sabemos que la distribución del logaritmo del salario es aproximadamente normal y facilita la interpretación (el coeficiente de cada regresor indica aproximadamente la variaciación porcentual de la variable en logaritmos cuando se produce un incremento de una unidad en el regresor).
Calculamos, en primer lugar, una regresión del logaritmo del salario sobre la edad y la edad al cuadrado.
. regress logsalario edad edad2 Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(2, 11596) = 561.47 Model │ 708.930894 2 354.465447 Prob > F = 0.0000 Residual │ 7320.7821 11,596 .631319602 R-squared = 0.0883 ─────────────┼────────────────────────────────── Adj R-squared = 0.0881 Total │ 8029.713 11,598 .692336006 Root MSE = .79456 ─────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── edad │ .0855968 .0049066 17.45 0.000 .075979 .0952147 edad2 │ -.0007608 .0000568 -13.41 0.000 -.0008721 -.0006496 _cons │ 5.137219 .1016253 50.55 0.000 4.938016 5.336422 ─────────────┴────────────────────────────────────────────────────────────────
Stata
es capaz de acomodar fácilmente variables categóricas en los análisis econométricos. En el comando regress
, en particular, es especialmente sencillo. Recordemos que para incluir variables categóricas en un análisis, empleamos variables ficticias o dummies, variables que toman el valor 1 si la observación toma un determinado valor de la variable y 0 en otro caso. Para evitar la multicolinealidad perfecta, para cada variable categórica, incluimos una variable dummy para todas las categorías excepto una, que actúa como referencia. Stata
implementa esta estrategia automáticamente. Por defecto, selecciona como referencia la primera categoría, pero podemos modificar esta opción. Por ejemplo, con la variable sexo
, tendríamos:
. // Con la categoría por defecto (hombre) . . regress logsalario edad edad2 i.sexo Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(3, 11595) = 425.49 Model │ 796.314217 3 265.438072 Prob > F = 0.0000 Residual │ 7233.39878 11,595 .623837756 R-squared = 0.0992 ─────────────┼────────────────────────────────── Adj R-squared = 0.0989 Total │ 8029.713 11,598 .692336006 Root MSE = .78983 ─────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── edad │ .0870787 .0048791 17.85 0.000 .0775149 .0966426 edad2 │ -.0007772 .0000564 -13.77 0.000 -.0008878 -.0006666 │ sexo │ Mujer │ -.1737265 .0146787 -11.84 0.000 -.2024992 -.1449538 _cons │ 5.190086 .10112 51.33 0.000 4.991874 5.388299 ─────────────┴──────────────────────────────────────────────────────────────── . . // Modificando la categoría por defecto (mujer) . . regress logsalario edad edad2 ib2.sexo Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(3, 11595) = 425.49 Model │ 796.314217 3 265.438072 Prob > F = 0.0000 Residual │ 7233.39878 11,595 .623837756 R-squared = 0.0992 ─────────────┼────────────────────────────────── Adj R-squared = 0.0989 Total │ 8029.713 11,598 .692336006 Root MSE = .78983 ─────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── edad │ .0870787 .0048791 17.85 0.000 .0775149 .0966426 edad2 │ -.0007772 .0000564 -13.77 0.000 -.0008878 -.0006666 │ sexo │ Hombre │ .1737265 .0146787 11.84 0.000 .1449538 .2024992 │ _cons │ 5.01636 .1015361 49.40 0.000 4.817332 5.215388 ─────────────┴──────────────────────────────────────────────────────────────── . . // Modificando la categoría de referencia (la más frecuente) . . regress logsalario edad edad2 ib(freq).sexo Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(3, 11595) = 425.49 Model │ 796.314217 3 265.438072 Prob > F = 0.0000 Residual │ 7233.39878 11,595 .623837756 R-squared = 0.0992 ─────────────┼────────────────────────────────── Adj R-squared = 0.0989 Total │ 8029.713 11,598 .692336006 Root MSE = .78983 ─────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── edad │ .0870787 .0048791 17.85 0.000 .0775149 .0966426 edad2 │ -.0007772 .0000564 -13.77 0.000 -.0008878 -.0006666 │ sexo │ Mujer │ -.1737265 .0146787 -11.84 0.000 -.2024992 -.1449538 _cons │ 5.190086 .10112 51.33 0.000 4.991874 5.388299 ─────────────┴────────────────────────────────────────────────────────────────
En ocasiones, no obstante, puede convenir realizar la creación de variables ficticias manualmente, especialmente con comandos que no soportan i.varname
algo a lo que Stata
puede ayudarnos con la instrucción siguiente:
. tabulate educg, generate(educdummy) Educación (agrupada) │ Freq. Percent Cum. ──────────────────────┼─────────────────────────────────── Nivel educativo bajo │ 7,841 38.64 38.64 Nivel educativo medio │ 5,429 26.75 65.40 Nivel educativo alto │ 7,022 34.60 100.00 ──────────────────────┼─────────────────────────────────── Total │ 20,292 100.00 . . regress logsalario i.sexo edad edad2 educdummy2 educdummy3 Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(5, 11593) = 577.13 Model │ 1600.34458 5 320.068916 Prob > F = 0.0000 Residual │ 6429.36841 11,593 .554590565 R-squared = 0.1993 ─────────────┼────────────────────────────────── Adj R-squared = 0.1990 Total │ 8029.713 11,598 .692336006 Root MSE = .74471 ─────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.2365705 .01394 -16.97 0.000 -.2638953 -.2092458 edad │ .0721823 .0046198 15.62 0.000 .0631268 .0812378 edad2 │ -.0005808 .0000535 -10.86 0.000 -.0006856 -.0004759 educdummy2 │ .240602 .0185962 12.94 0.000 .2041503 .2770537 educdummy3 │ .613554 .0163944 37.42 0.000 .5814181 .6456898 _cons │ 5.145524 .0958254 53.70 0.000 4.95769 5.333357 ─────────────┴──────────────────────────────────────────────────────────────── . . regress logsalario i.sexo edad edad2 ib1.educg Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(5, 11593) = 577.13 Model │ 1600.34458 5 320.068916 Prob > F = 0.0000 Residual │ 6429.36841 11,593 .554590565 R-squared = 0.1993 ─────────────┼────────────────────────────────── Adj R-squared = 0.1990 Total │ 8029.713 11,598 .692336006 Root MSE = .74471 ───────────────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ───────────────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.2365705 .01394 -16.97 0.000 -.2638953 -.2092458 edad │ .0721823 .0046198 15.62 0.000 .0631268 .0812378 edad2 │ -.0005808 .0000535 -10.86 0.000 -.0006856 -.0004759 │ educg │ Nivel educativo medio │ .240602 .0185962 12.94 0.000 .2041503 .2770537 Nivel educativo alto │ .613554 .0163944 37.42 0.000 .5814181 .6456898 │ _cons │ 5.145524 .0958254 53.70 0.000 4.95769 5.333357 ───────────────────────┴──────────────────────────────────────────────────────────────── .
Lo mismo ocurre con las interacciones entre variables, que podemos calcular manualmente o empleando las capacidades de Stata
. Para el cálculo de las mismas, podemos emplear los caracteres #
o ##
. El primero de ellos (#
) incluye en la ecuación únicamente las interacciones, mientras que ##
incluye las variables por separado y su interacción.
. regress logsalario i.sexo c.edad c.edad#c.edad i.educg i.sexo#c.edad i.sexo#i.educg Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(8, 11590) = 364.72 Model │ 1614.92975 8 201.866218 Prob > F = 0.0000 Residual │ 6414.78325 11,590 .55347569 R-squared = 0.2011 ─────────────┼────────────────────────────────── Adj R-squared = 0.2006 Total │ 8029.713 11,598 .692336006 Root MSE = .74396 ─────────────────────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────────────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.0864934 .062616 -1.38 0.167 -.2092312 .0362445 edad │ .0735382 .0046441 15.83 0.000 .064435 .0826414 │ c.edad#c.edad │ -.0005724 .0000535 -10.71 0.000 -.0006772 -.0004676 │ educg │ Nivel educativo medio │ .2543874 .0250038 10.17 0.000 .2053758 .3033991 Nivel educativo alto │ .5659028 .0223213 25.35 0.000 .5221494 .6096563 │ sexo#c.edad │ Mujer │ -.0041906 .0012553 -3.34 0.001 -.0066513 -.00173 │ sexo#educg │ Mujer#Nivel educativo medio │ -.0232393 .037422 -0.62 0.535 -.0965927 .0501142 Mujer#Nivel educativo alto │ .0929502 .0328386 2.83 0.005 .028581 .1573195 │ _cons │ 5.083543 .099395 51.14 0.000 4.888712 5.278374 ─────────────────────────────┴────────────────────────────────────────────────────────────────
. regress logsalario c.edad##c.edad i.sexo#c.edad i.sexo##i.educg Source │ SS df MS Number of obs = 11,599 ─────────────┼────────────────────────────────── F(8, 11590) = 364.72 Model │ 1614.92975 8 201.866218 Prob > F = 0.0000 Residual │ 6414.78325 11,590 .55347569 R-squared = 0.2011 ─────────────┼────────────────────────────────── Adj R-squared = 0.2006 Total │ 8029.713 11,598 .692336006 Root MSE = .74396 ─────────────────────────────┬──────────────────────────────────────────────────────────────── logsalario │ Coefficient Std. err. t P>|t| [95% conf. interval] ─────────────────────────────┼──────────────────────────────────────────────────────────────── edad │ .0735382 .0046441 15.83 0.000 .064435 .0826414 │ c.edad#c.edad │ -.0005724 .0000535 -10.71 0.000 -.0006772 -.0004676 │ sexo#c.edad │ Mujer │ -.0041906 .0012553 -3.34 0.001 -.0066513 -.00173 │ sexo │ Mujer │ -.0864934 .062616 -1.38 0.167 -.2092312 .0362445 │ educg │ Nivel educativo medio │ .2543874 .0250038 10.17 0.000 .2053758 .3033991 Nivel educativo alto │ .5659028 .0223213 25.35 0.000 .5221494 .6096563 │ sexo#educg │ Mujer#Nivel educativo medio │ -.0232393 .037422 -0.62 0.535 -.0965927 .0501142 Mujer#Nivel educativo alto │ .0929502 .0328386 2.83 0.005 .028581 .1573195 │ _cons │ 5.083543 .099395 51.14 0.000 4.888712 5.278374 ─────────────────────────────┴────────────────────────────────────────────────────────────────
Stata
es un paquete estadístico que puede emplearse para implementar una impresionante variedad de modelos. En muchas ocasiones, aunque es muy conveniente conocer los fundamentos estadísticos de nuestros análisis, podemos realizar los ejercicios econométricos sin necesidad de un conocimiento profundo de estadística. Los modelos estimados por máxima verosimilitud, por ejemplo, requieren operaciones matemáticas de cierta dificultad y, de hecho, la resolución de estos modelos se hace por iteración (en este caso, se deriva una función de máxima verosimilitud y se busca su máximo mediante un procedimiento iterativo, sin encontrar una solución cerrada). Ejemplos de este tipo de modelos ampliamente utilizados en todo tipo de disciplinas son los modelos logit o probit, donde la variable de interés es de tipo binario. En la práctica, codificamos dicha variable en dos categorías, 0 y 1.
En este ejemplo, vamos a analizar cuál es la influencia del sexo, la edad, la edad al cuadrado y el nivel educativo en la probabilidad de que una persona se encuentre empleada. Para ello, en nuestra base de datos, hemos creado la variable empleo
, que es una variable que toma el valor 1 si la persona se encuentra ocupada en el momento de la encuesta y 0 en otro caso. La implementación de un modelo logit o un modelo probit es muy sencilla:
. // Estimación del modelo logit . . logit empleo i.sexo c.edad c.edad#c.edad Iteration 0: log likelihood = -13385.8 Iteration 1: log likelihood = -11536.258 Iteration 2: log likelihood = -11525.64 Iteration 3: log likelihood = -11525.637 Iteration 4: log likelihood = -11525.637 Logistic regression Number of obs = 20,292 LR chi2(3) = 3720.33 Prob > chi2 = 0.0000 Log likelihood = -11525.637 Pseudo R2 = 0.1390 ──────────────┬──────────────────────────────────────────────────────────────── empleo │ Coefficient Std. err. z P>|z| [95% conf. interval] ──────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.6262264 .0324629 -19.29 0.000 -.6898526 -.5626003 edad │ .470378 .00884 53.21 0.000 .4530519 .4877041 │ c.edad#c.edad │ -.0054409 .0001038 -52.41 0.000 -.0056443 -.0052374 │ _cons │ -8.332817 .1732183 -48.11 0.000 -8.672319 -7.993316 ──────────────┴──────────────────────────────────────────────────────────────── . . // Estimación del modelo probit . . probit empleo i.sexo c.edad c.edad#c.edad Iteration 0: log likelihood = -13385.8 Iteration 1: log likelihood = -11523.923 Iteration 2: log likelihood = -11522.197 Iteration 3: log likelihood = -11522.197 Probit regression Number of obs = 20,292 LR chi2(3) = 3727.21 Prob > chi2 = 0.0000 Log likelihood = -11522.197 Pseudo R2 = 0.1392 ──────────────┬──────────────────────────────────────────────────────────────── empleo │ Coefficient Std. err. z P>|z| [95% conf. interval] ──────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.3754802 .0192187 -19.54 0.000 -.4131482 -.3378121 edad │ .2868713 .005185 55.33 0.000 .2767088 .2970338 │ c.edad#c.edad │ -.0033169 .000061 -54.35 0.000 -.0034366 -.0031973 │ _cons │ -5.091976 .1023362 -49.76 0.000 -5.292551 -4.891401 ──────────────┴────────────────────────────────────────────────────────────────
Es muy posible que recordemos que los coeficientes estimados de muchos modelos no lineales no son directamente interpretables. Por eso, habitualmente, presentamos, por ejemplo, los efectos marginales. Stata
permite abordar esta tarea a través del uso del comando margins
después de la estimación del modelo correspondiente:
margins [marginlist] [if] [in] [weight] [, response_options options]
En este tipo de modelos, los efectos marginales (el efecto de un incremento de unidad en un regresor en la variable dependiente) es diferente para cada observación. Una opción habitual es calcular los efectos marginales en para una observación que tomase como valores el promedio de cada variable.
. // Estimación del modelo logit . . logit empleo i.sexo c.edad c.edad#c.edad Iteration 0: log likelihood = -13385.8 Iteration 1: log likelihood = -11536.258 Iteration 2: log likelihood = -11525.64 Iteration 3: log likelihood = -11525.637 Iteration 4: log likelihood = -11525.637 Logistic regression Number of obs = 20,292 LR chi2(3) = 3720.33 Prob > chi2 = 0.0000 Log likelihood = -11525.637 Pseudo R2 = 0.1390 ──────────────┬──────────────────────────────────────────────────────────────── empleo │ Coefficient Std. err. z P>|z| [95% conf. interval] ──────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.6262264 .0324629 -19.29 0.000 -.6898526 -.5626003 edad │ .470378 .00884 53.21 0.000 .4530519 .4877041 │ c.edad#c.edad │ -.0054409 .0001038 -52.41 0.000 -.0056443 -.0052374 │ _cons │ -8.332817 .1732183 -48.11 0.000 -8.672319 -7.993316 ──────────────┴──────────────────────────────────────────────────────────────── . . // Efectos marginales . . margins, dydx(edad sexo) atmeans Conditional marginal effects Number of obs = 20,292 Model VCE: OIM Expression: Pr(empleo), predict() dy/dx wrt: 2.sexo edad At: 1.sexo = .4918687 (mean) 2.sexo = .5081313 (mean) edad = 43.66652 (mean) ─────────────┬──────────────────────────────────────────────────────────────── │ Delta-method │ dy/dx std. err. z P>|z| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.0924193 .0048088 -19.22 0.000 -.1018444 -.0829942 edad │ -.0007077 .0001803 -3.92 0.000 -.0010611 -.0003543 ─────────────┴──────────────────────────────────────────────────────────────── Note: dy/dx for factor levels is the discrete change from the base level.
Otra opción habitual es calcular efectos marginales para cada observación y presentar la media de los mismos:
. // Estimación del modelo probit . . probit empleo i.sexo c.edad c.edad#c.edad Iteration 0: log likelihood = -13385.8 Iteration 1: log likelihood = -11523.923 Iteration 2: log likelihood = -11522.197 Iteration 3: log likelihood = -11522.197 Probit regression Number of obs = 20,292 LR chi2(3) = 3727.21 Prob > chi2 = 0.0000 Log likelihood = -11522.197 Pseudo R2 = 0.1392 ──────────────┬──────────────────────────────────────────────────────────────── empleo │ Coefficient Std. err. z P>|z| [95% conf. interval] ──────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.3754802 .0192187 -19.54 0.000 -.4131482 -.3378121 edad │ .2868713 .005185 55.33 0.000 .2767088 .2970338 │ c.edad#c.edad │ -.0033169 .000061 -54.35 0.000 -.0034366 -.0031973 │ _cons │ -5.091976 .1023362 -49.76 0.000 -5.292551 -4.891401 ──────────────┴──────────────────────────────────────────────────────────────── . . // Efectos marginales . . margins, dydx(edad sexo) Average marginal effects Number of obs = 20,292 Model VCE: OIM Expression: Pr(empleo), predict() dy/dx wrt: 2.sexo edad ─────────────┬──────────────────────────────────────────────────────────────── │ Delta-method │ dy/dx std. err. z P>|z| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -.121321 .0061259 -19.80 0.000 -.1333275 -.1093145 edad │ -.0022312 .0002354 -9.48 0.000 -.0026926 -.0017697 ─────────────┴──────────────────────────────────────────────────────────────── Note: dy/dx for factor levels is the discrete change from the base level.
Podemos plantear un tercer ejemplo con un modelo tobit, empleado en ocasiones para variables que se encuentran censuradas. Por ejemplo, las aportaciones a planes de pensiones privados son una variable censurada en 0 (no puede ser negativa).
. codebook aportacionesg ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── aportacionesg Aportaciones a planes privados de pensiones individuales (brutas) ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Type: Numeric (float) Range: [0,24000] Units: .01 Unique values: 220 Missing .: 0/20,292 Mean: 118.997 Std. dev.: 673.086 Percentiles: 10% 25% 50% 75% 90% 0 0 0 0 0
En nuestro caso, la estimación del modelo será la siguiente (como en el caso anterior, los efectos marginales no coinciden con los coeficientes):
. // Estimación del modelo tobit . . tobit aportacionesg i.sexo c.edad c.edad#c.edad i.educg, ll(0) Refining starting values: Grid node 0: log likelihood = -36961.92 Fitting full model: Iteration 0: log likelihood = -36961.92 Iteration 1: log likelihood = -25308.935 Iteration 2: log likelihood = -18951.519 Iteration 3: log likelihood = -18316.994 Iteration 4: log likelihood = -17927.012 Iteration 5: log likelihood = -17870.282 Iteration 6: log likelihood = -17863.636 Iteration 7: log likelihood = -17863.537 Iteration 8: log likelihood = -17863.536 Tobit regression Number of obs = 20,292 Uncensored = 1,555 Limits: Lower = 0 Left-censored = 18,737 Upper = +inf Right-censored = 0 LR chi2(5) = 1395.55 Prob > chi2 = 0.0000 Log likelihood = -17863.536 Pseudo R2 = 0.0376 ───────────────────────┬──────────────────────────────────────────────────────────────── aportacionesg │ Coefficient Std. err. t P>|t| [95% conf. interval] ───────────────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -498.8577 94.75765 -5.26 0.000 -684.5903 -313.125 edad │ 544.6665 48.05135 11.34 0.000 450.4819 638.851 │ c.edad#c.edad │ -4.479355 .4949347 -9.05 0.000 -5.449467 -3.509243 │ educg │ Nivel educativo medio │ 984.3963 135.6884 7.25 0.000 718.436 1250.357 Nivel educativo alto │ 2495.093 121.1946 20.59 0.000 2257.541 2732.644 │ _cons │ -21310.23 1189.248 -17.92 0.000 -23641.25 -18979.21 ───────────────────────┼──────────────────────────────────────────────────────────────── var(e.aportacionesg)│ 1.18e+07 497933.3 1.08e+07 1.28e+07 ───────────────────────┴──────────────────────────────────────────────────────────────── . . // Efectos marginales . . margins, dydx(sexo edad educg) predict(ystar(0,.)) Average marginal effects Number of obs = 20,292 Model VCE: OIM Expression: E(aportacionesg*|aportacionesg>0), predict(ystar(0,.)) dy/dx wrt: 2.sexo edad 2.educg 3.educg ───────────────────────┬──────────────────────────────────────────────────────────────── │ Delta-method │ dy/dx std. err. z P>|z| [95% conf. interval] ───────────────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ -37.55856 7.17795 -5.23 0.000 -51.62708 -23.49004 edad │ 6.238559 .4234984 14.73 0.000 5.408518 7.068601 │ educg │ Nivel educativo medio │ 49.01989 7.330332 6.69 0.000 34.65271 63.38708 Nivel educativo alto │ 192.9667 10.00985 19.28 0.000 173.3477 212.5856 ───────────────────────┴──────────────────────────────────────────────────────────────── Note: dy/dx for factor levels is the discrete change from the base level.
Otro ejemplo sencillo sería un logit ordenado, donde la variable dependiente es categórica, pero ordinal. Por ejemplo, en nuestra base de datos, tenemos la variable salud
. Podemos explorar el efecto del sexo, la edad y el nivel educativo en el nivel de salud autopercibido.
. // Exploramos la variable salud . . tab salud Estado │ general de │ salud │ Freq. Percent Cum. ────────────┼─────────────────────────────────── Muy bueno │ 5,177 25.51 25.51 Bueno │ 11,426 56.31 81.82 Regular │ 2,885 14.22 96.04 Malo │ 643 3.17 99.21 Muy malo │ 161 0.79 100.00 ────────────┼─────────────────────────────────── Total │ 20,292 100.00 . tab salud, nolabel Estado │ general de │ salud │ Freq. Percent Cum. ────────────┼─────────────────────────────────── 1 │ 5,177 25.51 25.51 2 │ 11,426 56.31 81.82 3 │ 2,885 14.22 96.04 4 │ 643 3.17 99.21 5 │ 161 0.79 100.00 ────────────┼─────────────────────────────────── Total │ 20,292 100.00 . . // Estimación del modelo logit ordenado . . ologit salud i.sexo c.edad c.edad#c.edad i.educg Iteration 0: log likelihood = -22260.137 Iteration 1: log likelihood = -20489.407 Iteration 2: log likelihood = -20436.713 Iteration 3: log likelihood = -20436.618 Iteration 4: log likelihood = -20436.618 Ordered logistic regression Number of obs = 20,292 LR chi2(5) = 3647.04 Prob > chi2 = 0.0000 Log likelihood = -20436.618 Pseudo R2 = 0.0819 ───────────────────────┬──────────────────────────────────────────────────────────────── salud │ Coefficient Std. err. z P>|z| [95% conf. interval] ───────────────────────┼──────────────────────────────────────────────────────────────── sexo │ Mujer │ .1641013 .0278271 5.90 0.000 .1095612 .2186414 edad │ .0761111 .0073223 10.39 0.000 .0617597 .0904624 │ c.edad#c.edad │ -.0002204 .000087 -2.53 0.011 -.0003909 -.0000498 │ educg │ Nivel educativo medio │ -.4981022 .035834 -13.90 0.000 -.5683356 -.4278688 Nivel educativo alto │ -.8882005 .0339326 -26.18 0.000 -.9547071 -.8216938 ───────────────────────┼──────────────────────────────────────────────────────────────── /cut1 │ 1.253581 .1448187 .969742 1.537421 /cut2 │ 4.234112 .1474867 3.945043 4.523181 /cut3 │ 6.02135 .1502783 5.72681 6.31589 /cut4 │ 7.686682 .16584 7.361642 8.011723 ───────────────────────┴──────────────────────────────────────────────────────────────── . . // Efectos marginales . . margins, dydx(sexo edad educg) Average marginal effects Number of obs = 20,292 Model VCE: OIM dy/dx wrt: 2.sexo edad 2.educg 3.educg 1._predict: Pr(salud==1), predict(pr outcome(1)) 2._predict: Pr(salud==2), predict(pr outcome(2)) 3._predict: Pr(salud==3), predict(pr outcome(3)) 4._predict: Pr(salud==4), predict(pr outcome(4)) 5._predict: Pr(salud==5), predict(pr outcome(5)) ─────────────┬──────────────────────────────────────────────────────────────── │ Delta-method │ dy/dx std. err. z P>|z| [95% conf. interval] ─────────────┼──────────────────────────────────────────────────────────────── 1.sexo │ (base outcome) ─────────────┼──────────────────────────────────────────────────────────────── 2.sexo │ _predict │ 1 │ -.0271248 .0046 -5.90 0.000 -.0361406 -.018109 2 │ .0048701 .0008921 5.46 0.000 .0031215 .0066186 3 │ .0161653 .0027451 5.89 0.000 .010785 .0215456 4 │ .0048092 .000832 5.78 0.000 .0031786 .0064398 5 │ .0012803 .000238 5.38 0.000 .0008138 .0017468 ─────────────┼──────────────────────────────────────────────────────────────── edad │ _predict │ 1 │ -.0097156 .0001787 -54.37 0.000 -.0100658 -.0093653 2 │ .0023436 .0002435 9.62 0.000 .0018662 .0028209 3 │ .0053864 .000166 32.44 0.000 .005061 .0057118 4 │ .0015694 .0000829 18.93 0.000 .0014069 .001732 5 │ .0004162 .0000364 11.43 0.000 .0003449 .0004876 ─────────────┼──────────────────────────────────────────────────────────────── 1.educg │ (base outcome) ─────────────┼──────────────────────────────────────────────────────────────── 2.educg │ _predict │ 1 │ .0757867 .0055962 13.54 0.000 .0648183 .0867552 2 │ -.0008902 .0013859 -0.64 0.521 -.0036065 .0018261 3 │ -.0543804 .0039026 -13.93 0.000 -.0620293 -.0467315 4 │ -.0162191 .001246 -13.02 0.000 -.0186612 -.013777 5 │ -.004297 .0004393 -9.78 0.000 -.005158 -.0034361 ─────────────┼──────────────────────────────────────────────────────────────── 3.educg │ _predict │ 1 │ .1468749 .0055928 26.26 0.000 .1359131 .1578366 2 │ -.0265237 .0023665 -11.21 0.000 -.0311619 -.0218855 3 │ -.0890979 .003535 -25.20 0.000 -.0960264 -.0821694 4 │ -.0247866 .0012741 -19.45 0.000 -.0272838 -.0222895 5 │ -.0064666 .0005513 -11.73 0.000 -.0075471 -.0053862 ─────────────┴──────────────────────────────────────────────────────────────── Note: dy/dx for factor levels is the discrete change from the base level.
Stata
es especialmente adecuado para manejar datos con diseños muestrales complejos y datos de panel. Para los primeros, Stata
cuenta con los comandos de la familia svy
, que nos permiten tener en cuenta la existencia de ponderaciones, estratos y muestreo en varias etapas. Básicamente, debemos fijar las características del muestreo de forma previa y, posteriormente, emplear el comando adecuado. No todos los comandos tienen versión compatible con diseños muestrales complejos. Por ejemplo, nuestra encuesta utiliza como estratos las CCAA. Dentro de estos estratos, selecciona aleatoriamente unidades primarias de muestreo consistentes en secciones censales. Posteriormente, entrevista todos los hogares dentro de cada sección y todas las personas dentro de cada hogar. Cada persona tiene un peso probabilístico, que viene dado por la probabilidad de que una persona de sus características sea seleccionada.
En primar lugar, fijamos el tipo de muestreo en Stata
:
svyset [psu] [weight] [, design_options options]
svyset
es una de las pocas instrucciones que resulta más fácil de implementar a través de las ventanas. Una buena estrategia es emplear el menú de ventanas, generar la instrucción y copiarla en nuestro archivo do
.
. svyset psu [pweight=peso], strata(region) vce(linearized) singleunit(missing) Sampling weights: peso VCE: linearized Single unit: missing Strata 1: region Sampling unit 1: psu FPC 1: <zero>
Ahora, utilizamos la contraparte para este tipo de datos de Stata
, svy: regress
:
. svy: regress logsalario c.edad c.edad#c.edad i.sexo#c.edad i.sexo##i.educg (running regress on estimation sample) Survey: Linear regression Number of strata = 19 Number of obs = 11,599 Number of PSUs = 2,133 Population size = 17,156,324 Design df = 2,114 F(8, 2107) = 147.65 Prob > F = 0.0000 R-squared = 0.2038 ─────────────────────────────┬──────────────────────────────────────────────────────────────── │ Linearized logsalario │ Coefficient std. err. t P>|t| [95% conf. interval] ─────────────────────────────┼──────────────────────────────────────────────────────────────── edad │ .071094 .0068759 10.34 0.000 .0576099 .0845782 │ c.edad#c.edad │ -.0005521 .0000774 -7.14 0.000 -.0007038 -.0004004 │ sexo#c.edad │ Mujer │ -.0035596 .0016238 -2.19 0.028 -.006744 -.0003752 │ sexo │ Mujer │ -.0951359 .0826891 -1.15 0.250 -.2572964 .0670247 │ educg │ Nivel educativo medio │ .2449096 .0334514 7.32 0.000 .1793085 .3105106 Nivel educativo alto │ .5647163 .0316199 17.86 0.000 .502707 .6267256 │ sexo#educg │ Mujer#Nivel educativo medio │ -.068334 .0537433 -1.27 0.204 -.1737293 .0370613 Mujer#Nivel educativo alto │ .1002394 .0428483 2.34 0.019 .0162103 .1842686 │ _cons │ 5.140099 .1488365 34.54 0.000 4.848217 5.43198 ─────────────────────────────┴────────────────────────────────────────────────────────────────
Además, muchos comandos en Stata
admiten el empleo de ponderaciones. En el caso de los encuestas, estas reflejan el inverso de la probabilidad de cada observación ser seleccionada y deben introducirse como pweight
(pesos probabilísticos). Hay muchas especificades asociadas al empleo de ponderaciones y no todos los comandos admiten el empleo de pesos.
El manejo de datos de panel merecería un curso específico. No obstante, la lógica es similar a la instrucción anterior: a través de xtset
, Stata
permite especificar cuáles son las unidades del panel (panelvar
) y cuál es la variable temporal (timevar
) y, posteriormente, ejecutar comandos especialmente diseñados para implementar modelos con este tipo de datos (por ejemplo, modelos de efectos fijos).
xtset panelvar timevar [, tsoptions]
Al margen de los libros mencionados con anterioridad, especialmente Cameron & Trivedi (2010), podemos destacar el libro de Long & Freese (2014) para variables categóricas, los manuales de Skrondal y Rabe-Hesketh (2012a, 2012b) para modelos de panel y multinivel y Cleves et al. (2016) para modelos de supervivencia.
Stata
es capaz de implementar un elevado rango de técnicas de análisis de multivariantes, ya sea a través de los paquetes que incluye de serie el programa o mediante comandos diseñados por algunos usuarios (hablaremos de esto posteriormente).
A modo de ilustración, vamos a construir un índice de bienestar de los hogares españoles a partir de indicadores de bienes que posee el hogar a través de un análisis de componentes principales y de un análisis de correspondencias múltiple. Son técnicas que se emplean para reducir la dimensionalidad de los datos, entre otras aplicaciones. Para ello, partimos del archivo ecv2018w.dta
en nuestro directorio sesión3
.
La instrucción para el análisis de componentes principales es
pca varlist [if] [in] [weight] [, options]
Para calcular las componentes para cada observación emplearíamos
predict [type] {stub* | newvarlist} [if] [in] [, statistic options]
La instrucción para el análisis de correspondencias múltiple es
mca varlist [if] [in] [weight] [, options]
Para calculas las componentes, usamos
predict [type] newvar [if] [in] [, statistic normalize(norm) dimensions(#)]
predict [type] {stub* | newvarlist} [if] [in] [, statistic normalize(norm) dimensions(numlist)]
. // Abrimos el archivo . . use "ecv18w.dta", clear (ECV 2018 (índice de bienestar)) . . // Análisis de componentes principales . . pca htelef htv hpc hlavadora hcoche Principal components/correlation Number of obs = 33,710 Number of comp. = 5 Trace = 5 Rotation: (unrotated = principal) Rho = 1.0000 ─────────────┬──────────────────────────────────────────────────────────── Component │ Eigenvalue Difference Proportion Cumulative ─────────────┼──────────────────────────────────────────────────────────── Comp1 │ 1.47187 .414747 0.2944 0.2944 Comp2 │ 1.05712 .103425 0.2114 0.5058 Comp3 │ .953694 .053114 0.1907 0.6965 Comp4 │ .90058 .283837 0.1801 0.8767 Comp5 │ .616743 . 0.1233 1.0000 ─────────────┴──────────────────────────────────────────────────────────── Principal components (eigenvectors) ────────────────────────────────────────────────────────────────────────────── Variable │ Comp1 Comp2 Comp3 Comp4 Comp5 │ Unexplained ─────────────+──────────────────────────────────────────────────+───────────── htelef │ 0.3090 0.1566 0.8789 0.3280 -0.0017 │ 0 htv │ 0.1488 0.7171 -0.3870 0.5548 0.0770 │ 0 hpc │ 0.6264 -0.2952 -0.1663 0.0001 0.7020 │ 0 hlavadora │ 0.2887 0.5734 0.0809 -0.7625 0.0029 │ 0 hcoche │ 0.6377 -0.2128 -0.2088 0.0566 -0.7080 │ 0 ────────────────────────────────────────────────────────────────────────────── . . // Calculamos las 2 primeras componentes principales . . predict pc1 pc2 (score assumed) (3 components skipped) Scoring coefficients sum of squares(column-loading) = 1 ──────────────────────────────────────────────────────────────── Variable │ Comp1 Comp2 Comp3 Comp4 Comp5 ─────────────+────────────────────────────────────────────────── htelef │ 0.3090 0.1566 0.8789 0.3280 -0.0017 htv │ 0.1488 0.7171 -0.3870 0.5548 0.0770 hpc │ 0.6264 -0.2952 -0.1663 0.0001 0.7020 hlavadora │ 0.2887 0.5734 0.0809 -0.7625 0.0029 hcoche │ 0.6377 -0.2128 -0.2088 0.0566 -0.7080 ──────────────────────────────────────────────────────────────── . . // Análisis de correspondencias múltiple . . mca htelef htv hpc hlavadora hcoche Multiple/joint correspondence analysis Number of obs = 33,710 Total inertia = .01924168 Method: Burt/adjusted inertias Number of axes = 2 │ Principal Cumul. Dimension │ inertia Percent percent ────────────┼───────────────────────────────── Dim 1 │ .013916 72.32 72.32 Dim 2 │ .0002039 1.06 73.38 ────────────┼───────────────────────────────── Total │ .0192417 100.00 Statistics for column categories in standard normalization │ Overall │ Dimension_1 │ Dimension_2 Categories │ Mass Quality %inert │ Coord Sqcorr Contrib │ Coord Sqcorr Contrib ─────────────+───────────────────────────+───────────────────────────+─────────────────────────── htelef │ │ │ No │ 0.001 1.109 0.062 │ 8.878 1.105 0.095 │ 4.499 0.004 0.024 Sí │ 0.199 1.109 0.000 │ -0.054 1.105 0.001 │ -0.027 0.004 0.000 ─────────────+───────────────────────────+───────────────────────────+─────────────────────────── htv │ │ │ No │ 0.001 0.762 0.028 │ 5.306 0.568 0.022 │ 25.576 0.193 0.512 Sí │ 0.199 0.762 0.000 │ -0.021 0.568 0.000 │ -0.101 0.193 0.002 ─────────────+───────────────────────────+───────────────────────────+─────────────────────────── hpc │ │ │ No │ 0.047 0.684 0.319 │ 2.543 0.682 0.301 │ -1.198 0.002 0.067 Sí │ 0.153 0.684 0.097 │ -0.772 0.682 0.091 │ 0.364 0.002 0.020 ─────────────+───────────────────────────+───────────────────────────+─────────────────────────── hlavadora │ │ │ No │ 0.001 0.966 0.066 │ 11.181 0.914 0.083 │ 22.206 0.053 0.328 Sí │ 0.199 0.966 0.000 │ -0.037 0.914 0.000 │ -0.074 0.053 0.001 ─────────────+───────────────────────────+───────────────────────────+─────────────────────────── hcoche │ │ │ No │ 0.031 0.689 0.360 │ 3.309 0.688 0.343 │ -1.104 0.001 0.038 Sí │ 0.169 0.689 0.067 │ -0.614 0.688 0.064 │ 0.205 0.001 0.007 ───────────────────────────────────────────────────────────────────────────────────────────────── . . // Calculamos las 2 primeras componentes principales . . predict mc1 mc2 (option rowscores assumed) . . // Podemos calcular la correlación con la renta del hogar . . correlate hrenta1 pc1 (obs=33,710) │ hrenta1 pc1 ─────────────┼────────────────── hrenta1 │ 1.0000 pc1 │ 0.3369 1.0000 . correlate hrenta1 mc1 (obs=33,734) │ hrenta1 mc1 ─────────────┼────────────────── hrenta1 │ 1.0000 mc1 │ -0.3368 1.0000 . . // Podemos cambiar el signo de la componente (solo indica una dirección) . . replace mc1 = -mc1 (33,734 real changes made) . correlate hrenta1 mc1 (obs=33,734) │ hrenta1 mc1 ─────────────┼────────────────── hrenta1 │ 1.0000 mc1 │ 0.3368 1.0000