The paper studies the effect of class size on student performance (test score in particular).
Students be randomly distributed into types of class sizes but taught by same teachers across class sizes.
Randomly distributing students and teachers to different class sizes.
The size of class assigned to a student doesn’t impact parent’s behavior – shifting their kid’s school or classes, for instance.
The paper studies the economic returns to schooling.
In an ideal experiment, level of schooling would be randomly assigned to respondents.
To rule out correlations related to ability and other genetic and family confounders, the paper focuses on outcomes of monozygotic twins.
How family characteristics are related with other characteristics of twins is assumed to be the same for each twin.
library(haven)
library(stargazer)
library(reshape)
#Loading data
data <- read_dta("D:/downloads/AshenfelterKrueger1994_twins.dta")
ed_dif <- data$educ1-data$educ2 #First difference for education
wage_dif <- data$lwage1-data$lwage2 #First difference for wage
reg1 <- lm(wage_dif ~ ed_dif, data=data) #running regression
#Regression results
stargazer(reg1, title="Table 3", align=TRUE, type="text",
dep.var.labels=c("First difference (v)"),
covariate.labels = c("Own education"))
##
## Table 3
## ===============================================
## Dependent variable:
## ---------------------------
## First difference (v)
## -----------------------------------------------
## Own education 0.092***
## (0.024)
##
## Constant -0.079*
## (0.045)
##
## -----------------------------------------------
## Observations 149
## R2 0.092
## Adjusted R2 0.086
## Residual Std. Error 0.554 (df = 147)
## F Statistic 14.914*** (df = 1; 147)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
The impact of difference in schooling on difference in wages is 9.2%
#Wage
wage_comb <- cbind(data$lwage1, data$lwage2)
wage <- melt(wage_comb) #reshaping wage
wage <- wage$value
#Education
educ_comb <- cbind(data$educ1, data$educ2)
educ <- melt(educ_comb)
educ <- educ$value
#Age
age_comb <- cbind(data$age, data$age)
age <- melt(age_comb)
age <- age$value
#Age squared
agesq <- (age^2)/100
#Male
male_comb <- cbind(data$male1,data$male2)
male <- melt(male_comb)
male <- male$value
#White
white_comb <- cbind(data$white1,data$white2)
white <- melt(white_comb)
white <- white$value
data2 <- cbind(wage, educ, age, agesq, male, white) #combining into a new data
data3 <- data.frame(data2)
#Running regression and printing table
reg2 <- lm(wage ~ educ+age+agesq+male+white, data=data3)
stargazer(reg2, reg1, title="Table 3", align=TRUE, type="text",
dep.var.labels=c("OLS (i)", "First difference (v)"),
covariate.labels = c("Own education", "Age", "Age squared / 100",
"Male", "White")) #regression table
##
## Table 3
## ===================================================================
## Dependent variable:
## -----------------------------------------------
## OLS (i) First difference (v)
## (1) (2)
## -------------------------------------------------------------------
## Own education 0.084***
## (0.014)
##
## Age 0.088***
## (0.019)
##
## Age squared / 100 -0.087***
## (0.023)
##
## Male 0.204***
## (0.063)
##
## White -0.410***
## (0.127)
##
## ed_dif 0.092***
## (0.024)
##
## Constant -0.471 -0.079*
## (0.426) (0.045)
##
## -------------------------------------------------------------------
## Observations 298 149
## R2 0.272 0.092
## Adjusted R2 0.260 0.086
## Residual Std. Error 0.532 (df = 292) 0.554 (df = 147)
## F Statistic 21.860*** (df = 5; 292) 14.914*** (df = 1; 147)
## ===================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
An additional year of schooling increases wage on average by 8.4%
An additional year increase in age leads to a higher wage on average by 8.8%. On average, wage of male is higher than female by 20.4%. On average, wage of white people is lower than non–whites by 41%