Econometría Básica

Variable Indicadora

Author

Dr. Víctor Chung

Variables Indicadoras

Ejemplo

Un economista de bienes raíces recopila información sobre 1000 precios de venta de casas de dos vecindarios similares, uno llamado “Pueblo Universitario” que bordea una gran universidad estatal y otro vecindario a unas tres millas de la universidad. Algunas de las observaciones se muestran en la siguiente salida. El archivo de datos completo está en utown.

Code
library('knitr')
library('xtable')
library('stargazer')
library('ggplot2')

Variables Indicadoras

Ejemplo

Los precios de las casas están dados en $1000; El tamaño (sqft) es el número de cientos de pies cuadrados de área habitable. Por ejemplo, la primera casa se vendió por $205,452 y tiene 2346 pies cuadrados de área habitable. También se registra la edad (age) de la casa (en años), la ubicación (utown = 1 para casas cerca de la universidad, 0 en caso contrario), si la casa tiene piscina (pool = 1 si hay piscina, 0 en caso contrario) y si la casa tiene piscina. una chimenea (fplace = 1 si hay una chimenea, 0 en caso contrario).

Code
utown <- read.csv('Datos/utown.csv')
head(utown)
    price  sqft age utown pool fplace
1 205.452 23.46   6     0    0      1
2 185.328 20.03   5     0    0      1
3 248.422 27.77   6     0    0      0
4 154.690 20.17   1     0    0      0
5 221.801 26.45   0     0    0      1
6 199.119 21.56   6     0    0      1

Variables Indicadoras

  • Se utilizan para dar cuenta de factores cualitativos en los modelos econométricos.

  • A menudo se denominan variables ficticias, binarias o dicotómicas porque sólo toman dos valores, normalmente uno o cero, para indicar la presencia o ausencia de una característica o para indicar si una condición es verdadera o falsa.

  • El uso de cero y uno para los valores de estas variables es arbitrario, pero muy conveniente.

  • \[D = \begin{cases} 1, & Característica \space Presente \\ 0, &Característica \space No \space Presente \end{cases}\]

Variables Indicadoras

Variables indicadoras de intercepción

  • Por el momento, supongamos que el tamaño de la casa, medido en pies cuadrados, sqft, es la única variable relevante para determinar el precio de la vivienda, price. Especifiquemos el modelo de regresión como

  • \[price = \beta_0 + \beta_1sqft + e\]

  • El uso más común de las variables indicadoras es modificar el parámetro de intercepción del modelo de regresión. Añadiendo la variable indicadora D al modelo de regresión, junto con un nuevo parámetro \(\delta\), obtenemos:

  • \[price = \beta_0 +\delta D + \beta_1sqft + e\]

Variables Indicadoras

Variables indicadoras de intercepción

El efecto de la inclusión de una variable indicadora D en el modelo de regresión se aprecia mejor examinando la función de regresión, \(E(price|sqft)\), en los dos lugares. Si el modelo está correctamente especificado, entonces \(E(e|sqft,D) = 0\) y

\[E(price|sqft) = \begin{cases} (\beta_0+\delta)+\beta_1sqft & cuando \space D=1 \\ \beta_0+\beta_1sqft & cuando \space D=0 \end{cases}\]

Variables Indicadoras

Variables indicadoras de Pendiente

  • El cambio se produce en la pendiente de la relación.

  • Podemos permitir un cambio en la pendiente incluyendo en el modelo una variable explicativa adicional que es igual al producto de una variable indicadora y una variable continua.

  • En nuestro modelo, la pendiente de la relación es el valor de un pie cuadrado adicional de superficie habitable. Si suponemos que éste es un valor para las viviendas de la zona deseable y otro valor para las viviendas de otras zonas, podemos especificar

  • \[price = \beta_0 + \beta_1 sqft + \gamma (sqft \times D) + e\]

Variables Indicadoras

Variables indicadoras de Pendiente

\[E(price|sqft,D) = \begin{cases} \beta_0+(\beta_1+\gamma)sqft & cuando \space D=1 \\ \beta_0+\beta_1sqft & cuando \space D=0 \end{cases}\] La derivada parcial del precio esperado de la vivienda con respecto al tamaño (medido en pies cuadrados), que da la pendiente de la relación, es

\[\frac{\partial E(price|sqft,D)}{\partial sqft} = \begin{cases} \beta_1+\gamma & cuando \space D=1 \\ \beta_1 & cuando \space D=0 \end{cases}\]

Variables Indicadoras

Variables indicadoras de Pendiente

Si suponemos que la ubicación de la vivienda afecta tanto al intercepto como a la pendiente, ambos efectos pueden incorporarse a un único modelo. El modelo de regresión resultante es

\[price = \beta_0 + \delta D + \beta_1 sqft + \gamma (sqft \times D) + e\] En este caso, las funciones de regresión para los precios de la vivienda en las dos localidades son

\[E(price|sqft,D) = \begin{cases} (\beta_0 + \delta) +(\beta_1+\gamma)sqft & cuando \space D=1 \\ \beta_0+\beta_1sqft & cuando \space D=0 \end{cases}\]

Ejemplo

Los precios de las casas están dados en $1000; El tamaño (sqft) es el número de cientos de metros cuadrados de área habitable. Por ejemplo, la primera casa se vendió por $205,452 y tiene 2,346 metros cuadrados de área habitable. También se registra la edad (age) de la casa (en años), la ubicación (utown = 1 para casas cerca de la universidad, 0 en caso contrario), si la casa tiene piscina (pool = 1 si hay piscina, 0 en caso contrario) y si la casa tiene piscina. una chimenea (fplace = 1 si hay una chimenea, 0 en caso contrario).

Code
head(utown)
    price  sqft age utown pool fplace
1 205.452 23.46   6     0    0      1
2 185.328 20.03   5     0    0      1
3 248.422 27.77   6     0    0      0
4 154.690 20.17   1     0    0      0
5 221.801 26.45   0     0    0      1
6 199.119 21.56   6     0    0      1

Ejemplo

El economista especifica la ecuación de regresión como

\[price = \beta_0 +\beta_1 utown + \beta_2 sqft + \beta_3 (sqft \times utown) + \beta_4 age+ \\ \beta_5 pool+\beta_6 fplace+ e\]

Code
utown$utown <- as.factor(utown$utown)
utown$pool <- as.factor(utown$pool)
utown$fplace <- as.factor(utown$fplace)
Code
kable(summary.data.frame(utown), 
          caption="Tabla 1: Resumen de datos para utown")
Tabla 1: Resumen de datos para utown
price sqft age utown pool fplace
Min. :134.3 Min. :20.03 Min. : 0.000 0:481 0:796 0:482
1st Qu.:215.6 1st Qu.:22.83 1st Qu.: 3.000 1:519 1:204 1:518
Median :245.8 Median :25.36 Median : 6.000 NA NA NA
Mean :247.7 Mean :25.21 Mean : 9.392 NA NA NA
3rd Qu.:278.3 3rd Qu.:27.75 3rd Qu.:13.000 NA NA NA
Max. :345.2 Max. :30.00 Max. :60.000 NA NA NA

Ejemplo

Code
library('broom') # para salida tidy lm y función glance()
modelo <- lm(price~utown*sqft+age+pool+fplace, data=utown)
kable(tidy(modelo), caption="Tabla 2: Modelo Precio de Casas")
Tabla 2: Modelo Precio de Casas
term estimate std.error statistic p.value
(Intercept) 24.4999849 6.1917214 3.956894 0.0000813
utown1 27.4529522 8.4225824 3.259446 0.0011542
sqft 7.6121766 0.2451765 31.047746 0.0000000
age -0.1900864 0.0512046 -3.712291 0.0002168
pool1 4.3771633 1.1966916 3.657720 0.0002678
fplace1 1.6491756 0.9719568 1.696758 0.0900558
utown1:sqft 1.2994049 0.3320478 3.913307 0.0000972
  • El modelo estimado es:

\[\begin{multline} price = 24.5 +27.453*utown + 7.612*sqft + 1.299*(sqft \times utown) \\ - 0.19*age+ 4.377*pool+1.649*fplace \end{multline}\]

  • La función de regresión estimada para las viviendas cercanas a la universidad es

\[\begin{multline} price = (24.5 + 27.453) + (7.612+1.299)*sqft - 0.19*age + \\ 4.377*pool + 1.649*fplace \end{multline}\]

\[\begin{multline} price = 51.953 + 8.911 sqft - 0.19 age + 4.377 pool+1.649 fplace \end{multline}\]

  • Para las viviendas de otras zonas, la función de regresión estimada es

\[\begin{multline} price = 24.5 + 7.612 sqft - 0.19 age + 4.377 pool+1.649 fplace \end{multline}\]

Basándonos en los resultados de la regresión estimamos que:

  • La prima de ubicación para los terrenos cercanos a la universidad es de 27,453 dólares;
  • El cambio en el precio esperado por metro cuadrado adicional es de 89.12 dólares para las casas cercanas a la universidad y de 76.12 dólares para las casas de otras zonas;
  • Las casas se deprecian 190.10 dólares al año;
  • Una piscina aumenta el valor de una casa en 4,377.20 dólares;
  • Una chimenea aumenta el valor de una casa en 1,649.20 dólares.

Ejemplo 2

En este ejercicio, examinamos las horas de trabajo en el mercado de las mujeres casadas en función de su educación y del número de hijos. Utilice el archivo de datos cps5mw_small para este ejercicio.

Code
cps <- read.csv('Datos/cps_horas.csv')
head(cps)
  educ hrswork nchild  wage
1    0      52      0 13.45
2   12      40      2 14.55
3   16      40      2 20.17
4   14      52      2 19.23
5   21      50      1 45.00
6   16      36      1 62.00

Ejemplo 2

  1. Estime el modelo de regresión lineal

\[ HRSWORK = \beta_0 + \beta_1WAGE + \beta_2EDUC + \beta_3NCHILD + e \]

Code
library('broom') # para salida tidy lm y función glance()
modelo_HRS <- lm(hrswork ~ wage + educ + nchild, data = cps)
kable(tidy(modelo_HRS), caption="Tabla 3: Modelo Horas de Trabajo")
Tabla 3: Modelo Horas de Trabajo
term estimate std.error statistic p.value
(Intercept) 33.0265462 1.2162297 27.154860 0.0000000
wage -0.0357183 0.0175939 -2.030159 0.0425614
educ 0.6151225 0.0894927 6.873436 0.0000000
nchild -0.4501219 0.1950974 -2.307165 0.0212157

\[ HRSWORK = 33.0266 -0.0357*WAGE + 0.6151*EDUC -0.4501*NCHILD \]

Interprete el coeficiente de \(NCHILD\). Estime las horas esperadas de trabajo de una mujer casada cuyo salario es de 20 dólares por hora, que tiene 16 años de educación y que no tiene hijos. Haga el mismo cálculo para una mujer con un hijo, dos hijos y tres hijos. ¿Cuánto cambia el número de horas esperado con cada hijo adicional?

Code
#definimos nuevas observaciones
nuevos <- data.frame(wage=c(20,20,20,20), educ=c(16,16,16,16), nchild=c(0,1,2,3))

# Usamos el modelo ajustado para prediccir HRSWORK para los nuevos datos
predict(modelo_HRS,nuevos)
       1        2        3        4 
42.15414 41.70402 41.25390 40.80377 
  1. Defina las variables indicadoras \(POSTGRADO = 1\) si \(EDUC > 16\), 0 en caso contrario; \(COLEGIO = 1\) si \(EDUC = 16\), 0 en caso contrario; y \(COLEGIO_0\) si \(12 < EDUC < 16\). Estime la ecuación anterior sustituyendo \(EDUC\) por estas tres variables indicadoras. Interprete los coeficientes de las variables indicadoras de educación.
Code
cps$postgrado <- ifelse(cps$educ > 16,1,0)
cps$colegio <- ifelse(cps$educ==16,1,0)
cps$colegio_0 <- ifelse(cps$educ < 16,ifelse(cps$educ > 12,1,0),0)
Code
head(cps,20)
   educ hrswork nchild  wage postgrado colegio colegio_0
1     0      52      0 13.45         0       0         0
2    12      40      2 14.55         0       0         0
3    16      40      2 20.17         0       1         0
4    14      52      2 19.23         0       0         1
5    21      50      1 45.00         1       0         0
6    16      36      1 62.00         0       1         0
7    16      40      0 28.50         0       1         0
8    12      42      0 15.00         0       0         0
9     8      40      0 14.50         0       0         0
10   12      40      0 24.05         0       0         0
11   16      40      1 17.80         0       1         0
12   16      40      0 18.98         0       1         0
13   14      40      0 23.00         0       0         1
14   16      40      1 12.30         0       1         0
15   13      40      0 24.05         0       0         1
16   13      40      0 19.23         0       0         1
17   13      40      0 24.00         0       0         1
18   21      50      0 35.38         1       0         0
19   16      40      1 20.00         0       1         0
20   16      40      2 21.63         0       1         0
Code
modelo_HRS2 <- lm(hrswork ~ wage + postgrado + colegio + 
                    colegio_0 + nchild, data = cps)
Code
kable(tidy(modelo_HRS2), caption="Tabla 4: Modelo Horas de Trabajo - Variables Dummy")
Tabla 4: Modelo Horas de Trabajo - Variables Dummy
term estimate std.error statistic p.value
(Intercept) 40.7176491 0.5288993 76.9856360 0.0000000
wage -0.0372971 0.0177205 -2.1047387 0.0355226
postgrado 4.0955472 0.6845946 5.9824417 0.0000000
colegio 2.1912405 0.5967406 3.6720153 0.0002513
colegio_0 -0.0942991 0.5797002 -0.1626687 0.8708068
nchild -0.4735237 0.1957458 -2.4190751 0.0157087

\[\begin{multline} HRSWORK = 40.7176 -0.0373*WAGE + 4.0955*POSTGRADO + \\ 2.1912*COLEGIO -0.0942*COLEGIO\_0 -0.4735*NCHILD \end{multline}\]

  1. Estime las horas esperadas de trabajo de una mujer casada cuyo salario es de 20 dólares por hora, que tiene 12 años de educación y que no tiene hijos. Haga el mismo cálculo para una mujer con \(EDUC = 13, 14, 15, 16\) y \(17\). ¿Es el efecto marginal de la educación constante?
Code
nuevos2 <- data.frame(wage=c(20,20,20,20,20,20), educ=c(12,13,14,15,16,17), 
                      nchild=c(0,0,0,0,0,0))
nuevos2$postgrado <- ifelse(nuevos2$educ > 16,1,0)
nuevos2$colegio <- ifelse(nuevos2$educ==16,1,0)
nuevos2$colegio_0 <- ifelse(nuevos2$educ < 16,ifelse(nuevos2$educ > 12,1,0),0)
head(nuevos2)
  wage educ nchild postgrado colegio colegio_0
1   20   12      0         0       0         0
2   20   13      0         0       0         1
3   20   14      0         0       0         1
4   20   15      0         0       0         1
5   20   16      0         0       1         0
6   20   17      0         1       0         0
Code
# Usamos el modelo ajustado para prediccir HRSWORK para los nuevos datos
nuevos2$prediccion <- predict(modelo_HRS2,nuevos2)
head(nuevos2)
  wage educ nchild postgrado colegio colegio_0 prediccion
1   20   12      0         0       0         0   39.97171
2   20   13      0         0       0         1   39.87741
3   20   14      0         0       0         1   39.87741
4   20   15      0         0       0         1   39.87741
5   20   16      0         0       1         0   42.16295
6   20   17      0         1       0         0   44.06725
Code
cps2 <- read.csv('Datos/cps_horas.csv')
  1. Defina las variables indicadoras \(UNNINO = 1\) si \(NCHILD = 1\), 0 en caso contrario; \(DOSNINOS = 1\) si \(NCHILD = 2\), 0 en caso contrario; y \(MASNINOS = 1\) si \(NCHILD > 2\), 0 en caso contrario. Calcule la ecuación inicial pero sustituya \(NCHILD\) por estas tres variables indicadoras. Interprete los coeficientes estimados de las tres variables indicadoras.
Code
cps2$unnino <- ifelse(cps2$nchild == 1,1,0)
cps2$dosninos <- ifelse(cps2$nchild== 2,1,0)
cps2$masninos <- ifelse(cps2$nchild > 2,1,0)
Code
head(cps2,30)
   educ hrswork nchild  wage unnino dosninos masninos
1     0      52      0 13.45      0        0        0
2    12      40      2 14.55      0        1        0
3    16      40      2 20.17      0        1        0
4    14      52      2 19.23      0        1        0
5    21      50      1 45.00      1        0        0
6    16      36      1 62.00      1        0        0
7    16      40      0 28.50      0        0        0
8    12      42      0 15.00      0        0        0
9     8      40      0 14.50      0        0        0
10   12      40      0 24.05      0        0        0
11   16      40      1 17.80      1        0        0
12   16      40      0 18.98      0        0        0
13   14      40      0 23.00      0        0        0
14   16      40      1 12.30      1        0        0
15   13      40      0 24.05      0        0        0
16   13      40      0 19.23      0        0        0
17   13      40      0 24.00      0        0        0
18   21      50      0 35.38      0        0        0
19   16      40      1 20.00      1        0        0
20   16      40      2 21.63      0        1        0
21   16      40      2 15.38      0        1        0
22   18      50      0 30.76      0        0        0
23   12      40      0 13.27      0        0        0
24   16      45      2 31.02      0        1        0
25   14      40      4 19.00      0        0        1
26   18      36      2 35.00      0        1        0
27   16      40      1 39.42      1        0        0
28   20      40      3 72.13      0        0        1
29   16      40      0 28.85      0        0        0
30   14      40      2 13.66      0        1        0
Code
modelo_HRS3 <- lm(hrswork ~ wage + educ + unnino + 
                     dosninos + masninos , data = cps2)
Code
kable(tidy(modelo_HRS3), caption="Tabla 4: Modelo Horas de Trabajo - Variables Dummy 2")
Tabla 4: Modelo Horas de Trabajo - Variables Dummy 2
term estimate std.error statistic p.value
(Intercept) 33.3130747 1.2201789 27.3017953 0.0000000
wage -0.0343117 0.0175690 -1.9529707 0.0510564
educ 0.6160977 0.0893016 6.8990704 0.0000000
unnino -1.2347903 0.5422311 -2.2772397 0.0229481
dosninos -1.7956837 0.5343644 -3.3604103 0.0008029
masninos -0.6536432 0.7501774 -0.8713182 0.3837556

\[\begin{multline} HRSWORK = 33.3131 - 0.0343*WAGE + 0.6161*EDUC - \\ 1.2348*UNNINO -1.7957*DOSNINOS -0.6536*MASNINOS \end{multline}\]

  1. Estime las horas esperadas de trabajo de una mujer casada con 16 años de educación, cuyo salario es de 20 dólares por hora sin hijos, con un hijo, con dos hijos y con más de dos hijos. Compare y contraste estas estimaciones con las de la primera parte.
Code
nuevos3 <- data.frame(wage=c(20,20,20,20), educ=c(16,16,16,16), 
                      nchild=c(0,1,2,3))
nuevos3$unnino <- ifelse(nuevos3$nchild == 1,1,0)
nuevos3$dosninos <- ifelse(nuevos3$nchild== 2,1,0)
nuevos3$masninos <- ifelse(nuevos3$nchild > 2,1,0)
head(nuevos3)
  wage educ nchild unnino dosninos masninos
1   20   16      0      0        0        0
2   20   16      1      1        0        0
3   20   16      2      0        1        0
4   20   16      3      0        0        1
Code
# Usamos el modelo ajustado para prediccir HRSWORK para los nuevos datos
nuevos3$prediccion <- predict(modelo_HRS3,nuevos3)
head(nuevos3)
  wage educ nchild unnino dosninos masninos prediccion
1   20   16      0      0        0        0   42.48440
2   20   16      1      1        0        0   41.24961
3   20   16      2      0        1        0   40.68872
4   20   16      3      0        0        1   41.83076