6 abr 2019

Introducción a la econometría de Wooldridge: ejercicios resueltos en R. Capítulo 2

C2.1. La base de datos 401K.RAW es un subconjunto de los datos analizados por Papke (1995)
para estudiar la relación entre la participación en un plan de pensión y la generosidad del plan.
La variable prate es el porcentaje de trabajadores que están inscritos en el plan y que tienen
cuenta activa; ésta es la variable que se quiere explicar. La medida de la generosidad es la tasa
de contribución (de la empresa) al plan, mrate. Esta variable es la cantidad promedio con la
que la empresa contribuye al plan de cada trabajador por cada $1 que aporte el trabajador. Por
ejemplo, si mrate = 0.50, entonces a una contribución de $1 del trabajador corresponde una
contribución de 50 centavos de la empresa.

> library(wooldridge)
> attach(k401k)

i) Encuentre el promedio de la tasa de participación y el promedio de la tasa de contribución
para la muestra.

> apply(cbind(prate, mrate), 2, mean)
     prate      mrate
87.3629075  0.7315124

ii) Ahora, estime la ecuación de regresión simple, y dé los resultados, el tamaño de la muestra y R-cuadrada.

> ec1<-lm(prate~mrate)
> summary(ec1)

Call:
lm(formula = prate ~ mrate)

Residuals:
    Min      1Q  Median      3Q     Max
-82.303  -8.184   5.178  12.712  16.807

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  83.0755     0.5633  147.48   <2e-16 ***
mrate         5.8611     0.5270   11.12   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16.09 on 1532 degrees of freedom
Multiple R-squared:  0.0747, Adjusted R-squared:  0.0741
F-statistic: 123.7 on 1 and 1532 DF,  p-value: < 2.2e-16

> length(prate)
[1] 1534

iv) Determine la prate que se predice para x= 3.5. ¿Es razonable esta predicción? Explique qué
ocurre aquí.

> coef(ec1)[1]+coef(ec1)[2]*3.5
(Intercept)
   103.5892

> summary(prate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   3.00   78.03   95.70   87.36  100.00  100.00

v) ¿Qué tanto de la variación en prate es explicada por mrate? En su opinión, ¿es mucho?

> summary(ec1)$r.squared
[1] 0.0747031

C2.2. La base de datos CEOSAL2.RAW contiene información sobre directores generales de empresas (CEO) estadounidenses. La variable salary es el sueldo anual, en miles de dólares, y ceoten son los años de antigüedad como CEO de la empresa.

> rm(list=ls())
> attach(ceosal2)

i) Determine el sueldo y la antigüedad promedio en esta muestra.

> apply(cbind(salary, ceoten ), 2, mean)
    salary     ceoten
865.864407   7.954802

ii) ¿Cuántos de estos directivos se encuentran en su primer año como CEO (es decir, ceoten=0? ¿Cuál es la mayor antigüedad entre estos CEO?

> sum(ceoten==0)
[1] 5

> max(ceoten)
[1] 37

> # Corresponde a la observación 12 y 121, por lo que, hay dos directicon esta calificación
> which(ceoten==max(ceoten))
[1]  13 121

iii) Estime el modelo de regresión simple log(salary)=f(ceotem), y dé los resultados en la forma usual. ¿Cuál es el aumento porcentual (aproximado) que se pronostica en el sueldo por cada año adicional de antigüedad como CEO?

> ec1<-lm(log(salary)~ceoten)
> summary(ec1)

Call:
lm(formula = log(salary) ~ ceoten)

Residuals:
     Min       1Q   Median       3Q      Max
-2.15314 -0.38319 -0.02251  0.44439  1.94337

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 6.505498   0.067991  95.682   <2e-16 ***
ceoten      0.009724   0.006364   1.528    0.128   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6038 on 175 degrees of freedom
Multiple R-squared:  0.01316, Adjusted R-squared:  0.007523
F-statistic: 2.334 on 1 and 175 DF,  p-value: 0.1284

Una alternativa es utilizar la librería stargazer, dado que presentar el modelo de regresión en
 tablas suele ser mucho más elegante, que utilizar las salidas tradicionales de los programas. 
 
library(stargazer)

Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.2. https://CRAN.R-project.org/package=stargaze.

> stargazer(ec1, type="text")

===============================================
                        Dependent variable:   
                    ---------------------------
                            log(salary)       
-----------------------------------------------
ceoten                         0.010          
                              (0.006)         
                                              
Constant                     6.505***         
                              (0.068)         
                                               
-----------------------------------------------
Observations                    177           
R2                             0.013          
Adjusted R2                    0.008          
Residual Std. Error      0.604 (df = 175)     
F Statistic             2.334 (df = 1; 175)   
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

C2.3. Utilice los datos de SLEEP75.RAW de Biddle y Hamermesh (1990) para analizar si existe una relación inversa entre las horas de sueño por semana y las horas de trabajo pagado por semana. Cualquiera de las variables puede usarse como la variable dependiente. Estime el modelo sleep=f(totwrk). donde sleep corresponde a minutos de sueño por semana durante la noche y totwrk corresponde al total de minutos de trabajo por semana.

> rm(list=ls())
> attach(sleep75)

i) Dé sus resultados en forma de ecuación, además de la cantidad de observaciones y la R2. ¿Qué significa el intercepto de la ecuación?

> ec2<-lm(sleep ~totwrk )
> summary(ec2)

Call:
lm(formula = sleep ~ totwrk)

Residuals:
     Min       1Q   Median       3Q      Max
-2429.94  -240.25     4.91   250.53  1339.72

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) 3586.37695   38.91243  92.165   <2e-16 ***
totwrk        -0.15075    0.01674  -9.005   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 421.1 on 704 degrees of freedom
Multiple R-squared:  0.1033, Adjusted R-squared:  0.102
F-statistic: 81.09 on 1 and 704 DF,  p-value: < 2.2e-16

ii) Si totwrk aumenta 2 horas, ¿cuánto se estima que disminuirá sleep? ¿Le parece que este
efecto sea grande?

> coef(ec2)[2]*2
    totwrk
-0.3014916

C2.4. Use la base de datos WAGE2.RAW para estimar una regresión simple que explique el salario mensual (wage) en términos de la puntuación del coeficiente intelectual (IQ).

> rm(list=ls())
> attach(wage2)

i) Determine el promedio muestral del salario y de IQ. ¿Cuál es la desviación estándar muestral de IQ? (La puntuación del coeficiente intelectual está estandarizada, de manera que el promedio de la población es 100 y la desviación estándar es 15.)

> apply(cbind(wage, IQ), 2, summary)
             wage       IQ
Min.     115.0000  50.0000
1st Qu.  669.0000  92.0000
Median   905.0000 102.0000
Mean     957.9455 101.2824
3rd Qu. 1160.0000 112.0000
Max.    3078.0000 145.0000

ii) Estime un modelo de regresión simple en el que un aumento de un punto en IQ modifique wage
 en una cantidad de dólares constante. Use este modelo para determinar el aumento que se predice en wage 
para un aumento de 15 puntos en IQ. ¿Explica IQ la mayor parte de la variación en wage?

> ec4<-lm(wage ~IQ, data=wage2)
> summary(ec4)

Call:
lm(formula = wage ~ IQ, data = wage2)

Residuals:
   Min     1Q Median     3Q    Max
-898.7 -256.5  -47.3  201.1 2072.6

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 116.9916    85.6415   1.366    0.172   
IQ            8.3031     0.8364   9.927   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 384.8 on 933 degrees of freedom
Multiple R-squared:  0.09554, Adjusted R-squared:  0.09457
F-statistic: 98.55 on 1 and 933 DF,  p-value: < 2.2e-16

>
> coef(ec4)[2]*15
     IQ
124.546

iii) Ahora, estime un modelo en el que cada aumento de un punto en IQ tenga un mismo efecto porcentual sobre wage. Si IQ aumenta 15 puntos, ¿cuál es el aumento porcentual pronosticado para wage?

> ec5<-lm(log(wage) ~log(IQ), data=wage2)
> summary(ec5)

Call:
lm(formula = log(wage) ~ log(IQ), data = wage2)

Residuals:
     Min       1Q   Median       3Q      Max
-2.09743 -0.24828  0.02547  0.27542  1.21110

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  2.94218    0.38409   7.660 4.64e-14 ***
log(IQ)      0.83299    0.08334   9.995  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4005 on 933 degrees of freedom
Multiple R-squared:  0.09672, Adjusted R-squared:  0.09576
F-statistic: 99.91 on 1 and 933 DF,  p-value: < 2.2e-16

C2.5. En la población formada por las empresas de la industria química, sea rd gastos anuales en investigación y desarrollo y sales ventas anuales (ambos en millones de dólares).

i) Dé un modelo (no una ecuación estimada) que implique una elasticidad constante entre rd y sales. ¿Qué parámetro es la elasticidad?

# Es un modelo en su forma logarithmic.El coeficiente de pendiente representa la elasticidad.

ii) Ahora, estime el modelo usando la base de datos RDCHEM.RAW. Escriba la ecuación estimada en su forma usual. ¿Cuál es la elasticidad estimada para rd respecto a sales? Explique qué significa esta elasticidad.

> rm(list=ls())
> attach(rdchem)

> ec6<-lm(log(sales) ~log(rd), data=rdchem)
> summary(ec6)

Call:
lm(formula = log(sales) ~ log(rd), data = rdchem)

Residuals:
     Min       1Q   Median       3Q      Max
-0.82886 -0.39299  0.04353  0.38238  0.66387

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  4.11773    0.19380   21.25   <2e-16 ***
log(rd)      0.84578    0.04861   17.40   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4694 on 30 degrees of freedom
Multiple R-squared:  0.9098, Adjusted R-squared:  0.9068
F-statistic: 302.7 on 1 and 30 DF,  p-value: < 2.2e-16

C2.6. En el ejemplo 2.12 se usan los datos de MEAP93.RAW. Ahora se quiere explorar la relación entre la tasa de aprobados en matemáticas (math10) y el gasto por estudiante (expend). 

> rm(list=ls())
> attach(meap93)

i) ¿Piensa que cada dólar más que se gasta tiene un mismo efecto en la tasa de aprobados o parece más apropiado que haya un efecto decreciente? Explique.

#Pienso es intuitivo pensar que el gasto inicial tenga un mayor efecto y que este efecto irá reduciéndose en la medida en que aumenta el gasto. Aunque debe tenerse claro que esta respuesta es empírica.

ii) En el modelo poblacional math10=f(log(expend)), justifique que beta1/10 es el cambio en puntos porcentuales en math10 dado un aumento de 10% en expend.

iii) Use los datos de MEAP93.RAW para estimar el modelo del inciso ii). Dé la ecuación estimada de la manera usual, incluyendo el tamaño de la muestra y R-cuadrada.

> ec7<-lm(math10 ~log(expend), data=meap93)
> summary(ec7)

Call:
lm(formula = math10 ~ log(expend), data = meap93)

Residuals:
    Min      1Q  Median      3Q     Max
-22.343  -7.100  -0.914   6.148  39.093

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  -69.341     26.530  -2.614 0.009290 **
log(expend)   11.164      3.169   3.523 0.000475 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10.35 on 406 degrees of freedom
Multiple R-squared:  0.02966, Adjusted R-squared:  0.02727
F-statistic: 12.41 on 1 and 406 DF,  p-value: 0.0004752

iv) ¿Qué tan grande es el efecto estimado del gasto? Es decir, si el gasto aumenta 10%, ¿cuál
es el aumento de math10 en puntos porcentuales?

> (coef(ec7)[2]/10)*0.1
log(expend)
   0.111644

v) Puede ser preocupante que el análisis de regresión produzca valores ajustados para math10 que 
sean mayores a 100. ¿Por qué esto no es de preocupar en esta base estándar de datos?

C2.7. Use la base de datos CHARITY.RAW [obtenidos de Franses y Paap (2001)] para responder a las preguntas siguientes:

> rm(list=ls())
> attach(charity)

i) ¿Cuál es el donativo (gift) promedio en esta muestra de 4,268 personas (en florines holandeses)? 
¿Qué porcentaje de estas personas no dio ningún donativo?

> mean(gift)
[1] 7.44447
>
> #count personas no dieron algo
> sum(gift==0)
[1] 2561
>
> #porcentaje no dio nada
> mean(gift==0)
[1] 0.6000469

ii) ¿Cuál es el promedio de envíos por año (mailsyear)? ¿Cuáles son los valores mínimos y
máximos?

> summary(mailsyear)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   0.25    1.75    2.00    2.05    2.50    3.50

iii) Estime el modelo gift =f(mailsyear), mediante MCO y dé los resultados de la manera usual, incluidos el tamaño de la muestra y la R-cuadrada.

> ec8<-lm(gift~log(mailsyear), data=charity)
> summary(ec8)

Call:
lm(formula = gift ~ log(mailsyear), data = charity)

Residuals:
    Min      1Q  Median      3Q     Max
 -9.046  -7.888  -6.346   2.421 244.993

Coefficients:
               Estimate Std. Error t value Pr(>|t|)   
(Intercept)      5.7610     0.4075  14.136  < 2e-16 ***
log(mailsyear)   2.6225     0.5242   5.003 5.87e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.02 on 4266 degrees of freedom
Multiple R-squared:  0.005834,     Adjusted R-squared:  0.0056
F-statistic: 25.03 on 1 and 4266 DF,  p-value: 5.866e-07

iv) Interprete el coeficiente de la pendiente. Si cada envío cuesta un florín, ¿espera la beneficencia obtener una ganancia neta por cada envío? ¿Significa esto que la beneficencia
obtiene una ganancia neta en cada envío? Explique.

v) En esta muestra, ¿cuál es el menor donativo? Usando el análisis de regresión simple, ¿se puede predecir que gift sea igual a cero?

> # Menor donativo
> min(gift[gift>0])
[1] 2
>
> #si

Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...