## Load data
#| echo: false
#| message: false
library(tidyverse)
library(tidymodels)
library(haven)
library(gt)
library(modelsummary)
library(corrplot)
library(MatchIt)
library(marginaleffects)
options(kableExtra.latex.load_packages = FALSE)
lalonde_df <- haven::read_dta(here::here("data", "lalonde.dta"))
psid_df <- haven::read_dta(here::here("data", "psid.dta"))assignment_1
Part 1: Regression Analysis
1. Estimate ATE by calculating mean difference in earnings between treatment and control group
lalonde_df |>
group_by(treat) |>
summarise(mean_earnings = mean(re78)) |>
gt::gt() |>
tab_header(
title = "Mean difference in earnings, 1978"
) |>
cols_label(
treat = "Received job training",
mean_earnings = "Mean earnings, 1978 dollars"
)| Mean difference in earnings, 1978 | |
| Received job training | Mean earnings, 1978 dollars |
|---|---|
| 0 | 4554.802 |
| 1 | 6349.145 |
2. Estimate ATE using non-experimental data
psid_df |>
group_by(treat) |>
summarise(mean_earnings = mean(re78)) |>
gt::gt() |>
tab_header(
title = "Mean difference in earnings, 1978"
) |>
cols_label(
treat = "Received job training",
mean_earnings = "Mean earnings, 1978 dollars"
)| Mean difference in earnings, 1978 | |
| Received job training | Mean earnings, 1978 dollars |
|---|---|
| 0 | 21553.921 |
| 1 | 6349.145 |
3. Estimate ATE using OLS on all covariates
lm_1 <- lm(re78 ~ treat + age + educ + black + hisp + marr + re74 + re75 + u74 + u75, data = psid_df)
summary(lm_1)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr +
re74 + re75 + u74 + u75, data = psid_df)
Residuals:
Min 1Q Median 3Q Max
-65427 -4347 -369 3783 111501
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.536e+02 1.371e+03 0.696 0.4866
treat 1.154e+02 1.007e+03 0.115 0.9088
age -8.977e+01 2.194e+01 -4.091 4.41e-05 ***
educ 5.141e+02 7.644e+01 6.726 2.13e-11 ***
black -4.542e+02 4.969e+02 -0.914 0.3607
hisp 2.197e+03 1.092e+03 2.013 0.0442 *
marr 1.205e+03 5.855e+02 2.058 0.0397 *
re74 3.126e-01 3.163e-02 9.883 < 2e-16 ***
re75 5.436e-01 3.090e-02 17.592 < 2e-16 ***
u74 -1.462e+03 9.472e+02 -1.543 0.1228
u75 2.390e+03 1.024e+03 2.333 0.0197 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 10060 on 2664 degrees of freedom
Multiple R-squared: 0.5871, Adjusted R-squared: 0.5855
F-statistic: 378.8 on 10 and 2664 DF, p-value: < 2.2e-16
4. Estimate ATE using simple difference in 1978 and 1975 wages
#manual method
psid_df |>
group_by(treat) |>
summarise(
mean_75 = mean(re75),
mean_78 = mean(re78),
simple_ate = (mean_78 - mean_75)
) |>
gt::gt() |>
tab_header(
title = "Mean Difference in 1978 and 1975 Wages"
) |>
cols_label(
mean_75 = "Mean earnings, 1975",
mean_78 = "Mean earnings, 1978",
simple_ate = "Average treatment effect"
)| Mean Difference in 1978 and 1975 Wages | |||
| Treatment indicator | Mean earnings, 1975 | Mean earnings, 1978 | Average treatment effect |
|---|---|---|---|
| 0 | 19063.337 | 21553.921 | 2490.585 |
| 1 | 1532.056 | 6349.145 | 4817.090 |
5. Estimate the average treatment effect using the regression-adjusted differences
psid_df <- psid_df |>
mutate(diff = (re78 - re75))
ate_ols <- lm(diff ~ treat + age + educ + black + hisp + marr + re74 + u74 + u75, data = psid_df)
summary(ate_ols)
Call:
lm(formula = diff ~ treat + age + educ + black + hisp + marr +
re74 + u74 + u75, data = psid_df)
Residuals:
Min 1Q Median 3Q Max
-69217 -4434 -405 3939 114605
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.596e+03 1.425e+03 1.120 0.26274
treat 1.029e+03 1.045e+03 0.985 0.32488
age -1.111e+02 2.277e+01 -4.879 1.13e-06 ***
educ 3.791e+02 7.892e+01 4.803 1.65e-06 ***
black -1.763e+02 5.163e+02 -0.341 0.73280
hisp 2.803e+03 1.134e+03 2.470 0.01356 *
marr 1.091e+03 6.088e+02 1.792 0.07322 .
re74 -5.531e-02 2.026e-02 -2.729 0.00639 **
u74 4.835e+03 8.795e+02 5.498 4.21e-08 ***
u75 -2.643e+03 1.005e+03 -2.631 0.00857 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 10470 on 2665 degrees of freedom
Multiple R-squared: 0.04552, Adjusted R-squared: 0.0423
F-statistic: 14.12 on 9 and 2665 DF, p-value: < 2.2e-16
Part 2: Matching
1. Estimate the probability of treatment (the propensity score) as a function of all the pre-treatment variables
pscores_mi <- matchit(treat ~ age + educ + black + hisp + marr + re75 +
re74 + u74 + u75, data = psid_df)
summary(pscores_mi)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = psid_df)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.0236 2.2091 10.7691 0.4852
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
re75 1532.0556 19063.3368 -5.4458 0.0561 0.4695
re74 2095.5740 19428.7453 -3.5471 0.1329 0.4681
u74 0.6000 0.1000 1.0206 . 0.5000
u75 0.7081 0.0863 1.3676 . 0.6218
eCDF Max
distance 0.8869
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
re75 0.7736
re74 0.7292
u74 0.5000
u75 0.6218
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.2574 1.4245 1.7607 0.0477
age 25.8162 29.2054 -0.4737 0.4720 0.0869
educ 10.3459 10.5892 -0.1210 0.4983 0.0436
black 0.8432 0.7297 0.3122 . 0.1135
hisp 0.0595 0.0649 -0.0229 . 0.0054
marr 0.1892 0.5189 -0.8419 . 0.3297
re75 1532.0556 3450.3586 -0.5959 0.7658 0.0719
re74 2095.5740 4933.3903 -0.5807 0.7146 0.0833
u74 0.6000 0.3730 0.4634 . 0.2270
u75 0.7081 0.3838 0.7134 . 0.3243
eCDF Max Std. Pair Dist.
distance 0.6432 1.4245
age 0.1405 1.3092
educ 0.1459 1.2340
black 0.1135 0.8772
hisp 0.0054 0.4343
marr 0.3297 1.1179
re75 0.3351 1.0537
re74 0.3568 1.0470
u74 0.2270 1.1034
u75 0.3243 1.1890
Sample Sizes:
Control Treated
All 2490 185
Matched 185 185
Unmatched 2305 0
Discarded 0 0
#probit model
pscores <- glm(treat ~ age + educ + black + hisp + marr + re75 +
re74 + u74 + u75, family = binomial(link = "probit"), data = psid_df)Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
modelsummary(pscores, stars = TRUE)| (1) | |
|---|---|
| (Intercept) | 0.775 |
| (0.506) | |
| age | -0.059*** |
| (0.009) | |
| educ | -0.055+ |
| (0.029) | |
| black | 1.415*** |
| (0.180) | |
| hisp | 1.167*** |
| (0.303) | |
| marr | -0.840*** |
| (0.142) | |
| re75 | 0.000*** |
| (0.000) | |
| re74 | 0.000 |
| (0.000) | |
| u74 | -0.544* |
| (0.236) | |
| u75 | 1.721*** |
| (0.251) | |
| Num.Obs. | 2675 |
| AIC | 451.4 |
| BIC | 510.3 |
| Log.Lik. | -215.687 |
| F | 32.032 |
| RMSE | 0.15 |
| + p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001 | |
pscores_fitted <- fitted(pscores)
psid_df$pscores <- pscores_fitted2. Reestimate the propensity score with common support
pscores_cs <- matchit(
formula = treat ~ age + educ + black + hisp + marr + re75 + re74 + u74 + u75,
distance = "glm",
discard = "both",
data = psid_df
)
summary(pscores_cs)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = psid_df, distance = "glm",
discard = "both")
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.0236 2.2091 10.7691 0.4852
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
re75 1532.0556 19063.3368 -5.4458 0.0561 0.4695
re74 2095.5740 19428.7453 -3.5471 0.1329 0.4681
u74 0.6000 0.1000 1.0206 . 0.5000
u75 0.7081 0.0863 1.3676 . 0.6218
eCDF Max
distance 0.8869
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
re75 0.7736
re74 0.7292
u74 0.5000
u75 0.6218
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6767 0.2604 1.3973 1.7492 0.0464
age 25.9341 29.1044 -0.4431 0.4753 0.0813
educ 10.3571 10.6099 -0.1257 0.5008 0.0433
black 0.8407 0.7253 0.3174 . 0.1154
hisp 0.0604 0.0659 -0.0232 . 0.0055
marr 0.1923 0.5165 -0.8277 . 0.3242
re75 1546.4132 3436.4065 -0.5871 0.7206 0.0685
re74 2130.1164 4934.2940 -0.5738 0.7086 0.0826
u74 0.6099 0.3791 0.4711 . 0.2308
u75 0.7033 0.3901 0.6889 . 0.3132
eCDF Max Std. Pair Dist.
distance 0.6374 1.3974
age 0.1264 1.2709
educ 0.1538 1.3281
black 0.1154 1.0125
hisp 0.0055 0.5344
marr 0.3242 0.9680
re75 0.3242 0.9980
re74 0.3462 1.0320
u74 0.2308 0.9870
u75 0.3132 1.0273
Sample Sizes:
Control Treated
All 2490 185
Matched 182 182
Unmatched 1093 0
Discarded 1215 3
plot(pscores_cs, type = "density", which.xs = ~age + educ + re75 + re74 + u74 + u75)3a. Estimate the average treatment effect for the treated using nearest neighbor matching based on the propensity score.
pscores_ncs <- matchit(
formula = treat ~ age + educ + black + hisp + marr + re75 + re74 + u74 + u75,
method = "nearest",
distance = "glm",
link = "probit",
replace = TRUE,
discard = "none",
data = psid_df
)
summary(pscores_ncs)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = psid_df, method = "nearest",
distance = "glm", link = "probit", discard = "none", replace = TRUE)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6613 0.0251 2.1847 10.3530 0.4993
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
re75 1532.0556 19063.3368 -5.4458 0.0561 0.4695
re74 2095.5740 19428.7453 -3.5471 0.1329 0.4681
u74 0.6000 0.1000 1.0206 . 0.5000
u75 0.7081 0.0863 1.3676 . 0.6218
eCDF Max
distance 0.8825
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
re75 0.7736
re74 0.7292
u74 0.5000
u75 0.6218
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6613 0.6623 -0.0035 0.9568 0.0010
age 25.8162 24.8649 0.1330 0.7715 0.0721
educ 10.3459 10.6432 -0.1479 0.6351 0.0366
black 0.8432 0.7622 0.2230 . 0.0811
hisp 0.0595 0.1135 -0.2286 . 0.0541
marr 0.1892 0.1243 0.1656 . 0.0649
re75 1532.0556 2490.2992 -0.2977 0.6553 0.0342
re74 2095.5740 2230.1760 -0.0275 0.9654 0.0102
u74 0.6000 0.4000 0.4082 . 0.2000
u75 0.7081 0.6865 0.0476 . 0.0216
eCDF Max Std. Pair Dist.
distance 0.0595 0.0257
age 0.2486 0.9217
educ 0.1351 1.2017
black 0.0811 0.8772
hisp 0.0541 0.7314
marr 0.0649 0.4140
re75 0.2000 0.7985
re74 0.0757 0.5157
u74 0.2000 0.8717
u75 0.0216 0.4756
Sample Sizes:
Control Treated
All 2490. 185
Matched (ESS) 23.95 185
Matched 60. 185
Unmatched 2430. 0
Discarded 0. 0
mdata_a <- match.data(pscores_ncs)
fit_a <- lm(re78 ~ treat + age + educ + black + hisp + marr + re75 + re74 + u74 + u75, data = mdata_a)
summary(fit_a)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = mdata_a)
Residuals:
Min 1Q Median 3Q Max
-12374 -5063 -1332 3302 51090
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2689.1973 3750.9391 -0.717 0.47413
treat 739.8824 1174.0052 0.630 0.52917
age -0.7872 65.8083 -0.012 0.99047
educ 528.3949 226.1950 2.336 0.02034 *
black -24.1616 1520.9149 -0.016 0.98734
hisp -39.3648 2379.8769 -0.017 0.98682
marr 962.9716 1221.5496 0.788 0.43131
re75 0.2448 0.1878 1.303 0.19374
re74 0.3122 0.1369 2.280 0.02352 *
u74 -3230.9958 1514.9344 -2.133 0.03399 *
u75 5086.6401 1699.7399 2.993 0.00306 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 7371 on 234 degrees of freedom
Multiple R-squared: 0.1372, Adjusted R-squared: 0.1003
F-statistic: 3.72 on 10 and 234 DF, p-value: 0.0001198
3b. Estimate the average treatment effect for the treated by stratifying on the propensity score.
#strata
pscores_stratified <- matchit(
formula = treat ~ age + educ + black + hisp + marr + re75 + re74 + u74 + u75,
method = "subclass",
estimand = "ATT",
subclass = 5,
distance = "glm",
discard = "none",
data = psid_df
)
summary(pscores_stratified)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = psid_df, method = "subclass",
distance = "glm", estimand = "ATT", discard = "none", subclass = 5)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.0236 2.2091 10.7691 0.4852
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
re75 1532.0556 19063.3368 -5.4458 0.0561 0.4695
re74 2095.5740 19428.7453 -3.5471 0.1329 0.4681
u74 0.6000 0.1000 1.0206 . 0.5000
u75 0.7081 0.0863 1.3676 . 0.6218
eCDF Max
distance 0.8869
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
re75 0.7736
re74 0.7292
u74 0.5000
u75 0.6218
Summary of Balance Across Subclasses
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.6452 0.1227 0.6944 0.0834
age 25.8162 25.7160 0.0140 0.6592 0.0663
educ 10.3459 10.8872 -0.2692 0.5558 0.0443
black 0.8432 0.6999 0.3942 . 0.1433
hisp 0.0595 0.0750 -0.0656 . 0.0155
marr 0.1892 0.1859 0.0084 . 0.0033
re75 1532.0556 4947.4273 -1.0609 0.1078 0.0919
re74 2095.5740 5487.8700 -0.6942 0.2208 0.0926
u74 0.6000 0.3613 0.4871 . 0.2387
u75 0.7081 0.5925 0.2543 . 0.1156
eCDF Max
distance 0.1479
age 0.2480
educ 0.1777
black 0.1433
hisp 0.0155
marr 0.0033
re75 0.2387
re74 0.1550
u74 0.2387
u75 0.1156
Sample Sizes:
Control Treated
All 2490. 185
Matched (ESS) 29.72 185
Matched 2490. 185
Unmatched 0. 0
Discarded 0. 0
mdata_b <- match.data(pscores_stratified)
fit_b <- lm(re78 ~ treat + age + educ + black + hisp + marr, data = mdata_b)
summary(fit_b)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr,
data = mdata_b)
Residuals:
Min 1Q Median 3Q Max
-34511 -7379 -112 6816 105656
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9039.09 1864.99 -4.847 1.33e-06 ***
treat -5889.75 1239.03 -4.754 2.11e-06 ***
age 166.86 27.65 6.036 1.80e-09 ***
educ 1774.90 97.84 18.140 < 2e-16 ***
black -2731.22 679.76 -4.018 6.03e-05 ***
hisp 884.79 1506.87 0.587 0.557
marr 4533.46 803.35 5.643 1.85e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 13910 on 2668 degrees of freedom
Multiple R-squared: 0.2102, Adjusted R-squared: 0.2084
F-statistic: 118.3 on 6 and 2668 DF, p-value: < 2.2e-16
5b Estimate ATE without labor market covariates
pscores_ncs_no_labor_market <- matchit(
formula = treat ~ age + educ + black + hisp + marr,
method = "nearest",
distance = "glm",
link = "probit",
replace = TRUE,
discard = "none",
data = psid_df
)
summary(pscores_ncs_no_labor_market)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr, data = psid_df,
method = "nearest", distance = "glm", link = "probit", discard = "none",
replace = TRUE)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.4204 0.0433 1.5857 4.7499 0.5114
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
eCDF Max
distance 0.7492
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.4204 0.4201 0.0012 0.9883 0.0008
age 25.8162 25.7243 0.0128 1.0112 0.0276
educ 10.3459 10.2865 0.0296 0.8196 0.0181
black 0.8432 0.8757 -0.0892 . 0.0324
hisp 0.0595 0.0216 0.1600 . 0.0378
marr 0.1892 0.1946 -0.0138 . 0.0054
eCDF Max Std. Pair Dist.
distance 0.0486 0.0116
age 0.1081 0.4737
educ 0.0973 0.6318
black 0.0324 0.3271
hisp 0.0378 0.2971
marr 0.0054 0.2070
Sample Sizes:
Control Treated
All 2490. 185
Matched (ESS) 54.76 185
Matched 101. 185
Unmatched 2389. 0
Discarded 0. 0
mdata <- match.data(pscores_ncs_no_labor_market)
fit <- lm(re78 ~ treat + age + educ + black + hisp + marr, data = mdata)
summary(fit)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr,
data = mdata)
Residuals:
Min 1Q Median 3Q Max
-17218 -5261 -1120 4188 53668
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1086.8 3735.7 -0.291 0.7713
treat -5239.3 1039.9 -5.038 8.45e-07 ***
age 153.2 66.6 2.300 0.0222 *
educ 954.0 234.9 4.061 6.36e-05 ***
black -1817.1 1496.1 -1.215 0.2256
hisp 703.1 2573.7 0.273 0.7849
marr 1801.7 1180.4 1.526 0.1281
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 8186 on 279 degrees of freedom
Multiple R-squared: 0.1822, Adjusted R-squared: 0.1646
F-statistic: 10.36 on 6 and 279 DF, p-value: 2.304e-10
pscores_ncs_no_labor_market_stratified <- matchit(
formula = treat ~ age + educ + black + hisp + marr,
method = "subclass",
estimand = "ATT",
subclass = 5,
distance = "glm",
discard = "none",
data = psid_df
)
summary(pscores_ncs_no_labor_market_stratified)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr, data = psid_df,
method = "subclass", distance = "glm", estimand = "ATT",
discard = "none", subclass = 5)
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.4287 0.0424 1.5059 5.4867 0.5110
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
eCDF Max
distance 0.7492
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
Summary of Balance Across Subclasses
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.4287 0.4067 0.0858 0.8814 0.0711
age 25.8162 26.8575 -0.1455 0.6410 0.0458
educ 10.3459 10.3987 -0.0263 0.5258 0.0390
black 0.8432 0.7564 0.2389 . 0.0868
hisp 0.0595 0.0337 0.1088 . 0.0257
marr 0.1892 0.2484 -0.1513 . 0.0593
eCDF Max
distance 0.1307
age 0.1283
educ 0.1209
black 0.0868
hisp 0.0257
marr 0.0593
Sample Sizes:
Control Treated
All 2490. 185
Matched (ESS) 123.34 185
Matched 2490. 185
Unmatched 0. 0
Discarded 0. 0
mdata2 <- match.data(pscores_ncs_no_labor_market_stratified)
fit2 <- lm(re78 ~ treat + age + educ + black + hisp + marr, data = mdata2)
summary(fit2)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr,
data = mdata2)
Residuals:
Min 1Q Median 3Q Max
-34511 -7379 -112 6816 105656
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9039.09 1864.99 -4.847 1.33e-06 ***
treat -5889.75 1239.03 -4.754 2.11e-06 ***
age 166.86 27.65 6.036 1.80e-09 ***
educ 1774.90 97.84 18.140 < 2e-16 ***
black -2731.22 679.76 -4.018 6.03e-05 ***
hisp 884.79 1506.87 0.587 0.557
marr 4533.46 803.35 5.643 1.85e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 13910 on 2668 degrees of freedom
Multiple R-squared: 0.2102, Adjusted R-squared: 0.2084
F-statistic: 118.3 on 6 and 2668 DF, p-value: < 2.2e-16
6b.
pscores_cs <- matchit(
formula = treat ~ age + educ + black + hisp + marr + re75 + re74 + u74 + u75,
distance = "glm",
discard = "both",
data = psid_df
)
summary(pscores_cs)
Call:
matchit(formula = treat ~ age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = psid_df, distance = "glm",
discard = "both")
Summary of Balance for All Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6818 0.0236 2.2091 10.7691 0.4852
age 25.8162 34.8506 -1.2627 0.4696 0.2317
educ 10.3459 12.1169 -0.8808 0.4255 0.1091
black 0.8432 0.2506 1.6301 . 0.5926
hisp 0.0595 0.0325 0.1139 . 0.0269
marr 0.1892 0.8663 -1.7287 . 0.6771
re75 1532.0556 19063.3368 -5.4458 0.0561 0.4695
re74 2095.5740 19428.7453 -3.5471 0.1329 0.4681
u74 0.6000 0.1000 1.0206 . 0.5000
u75 0.7081 0.0863 1.3676 . 0.6218
eCDF Max
distance 0.8869
age 0.3771
educ 0.4029
black 0.5926
hisp 0.0269
marr 0.6771
re75 0.7736
re74 0.7292
u74 0.5000
u75 0.6218
Summary of Balance for Matched Data:
Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
distance 0.6767 0.2604 1.3973 1.7492 0.0464
age 25.9341 29.1044 -0.4431 0.4753 0.0813
educ 10.3571 10.6099 -0.1257 0.5008 0.0433
black 0.8407 0.7253 0.3174 . 0.1154
hisp 0.0604 0.0659 -0.0232 . 0.0055
marr 0.1923 0.5165 -0.8277 . 0.3242
re75 1546.4132 3436.4065 -0.5871 0.7206 0.0685
re74 2130.1164 4934.2940 -0.5738 0.7086 0.0826
u74 0.6099 0.3791 0.4711 . 0.2308
u75 0.7033 0.3901 0.6889 . 0.3132
eCDF Max Std. Pair Dist.
distance 0.6374 1.3974
age 0.1264 1.2709
educ 0.1538 1.3281
black 0.1154 1.0125
hisp 0.0055 0.5344
marr 0.3242 0.9680
re75 0.3242 0.9980
re74 0.3462 1.0320
u74 0.2308 0.9870
u75 0.3132 1.0273
Sample Sizes:
Control Treated
All 2490 185
Matched 182 182
Unmatched 1093 0
Discarded 1215 3
mdata_cs <- match.data(pscores_cs)
fit_cs <- lm(re78 ~ treat + age + educ + black + hisp + marr + re75 + re74 + u74 + u75, data = mdata_cs)
summary(fit_cs)
Call:
lm(formula = re78 ~ treat + age + educ + black + hisp + marr +
re75 + re74 + u74 + u75, data = mdata_cs)
Residuals:
Min 1Q Median 3Q Max
-19335 -4867 -1629 3276 103230
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -6.859e+02 3.788e+03 -0.181 0.8564
treat 8.151e+01 1.140e+03 0.072 0.9430
age -8.520e+01 6.581e+01 -1.295 0.1962
educ 4.659e+02 2.174e+02 2.143 0.0328 *
black 8.281e+02 1.485e+03 0.558 0.5774
hisp 1.971e+02 2.327e+03 0.085 0.9326
marr 1.853e+03 1.112e+03 1.667 0.0965 .
re75 -1.012e-02 1.894e-01 -0.053 0.9574
re74 6.714e-01 1.278e-01 5.253 2.6e-07 ***
u74 -1.151e+03 1.621e+03 -0.710 0.4782
u75 3.512e+03 1.823e+03 1.927 0.0548 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 9077 on 353 degrees of freedom
Multiple R-squared: 0.1474, Adjusted R-squared: 0.1232
F-statistic: 6.101 on 10 and 353 DF, p-value: 1.388e-08
fit_ate_ols <- lm(diff ~ treat + age + educ + black + hisp + marr + re74 + u74 + u75, data = mdata_cs)
summary(fit_ate_ols)
Call:
lm(formula = diff ~ treat + age + educ + black + hisp + marr +
re74 + u74 + u75, data = mdata_cs)
Residuals:
Min 1Q Median 3Q Max
-28817 -4870 -1533 2879 107627
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4252.0674 3869.9324 -1.099 0.272626
treat 708.1219 1176.6732 0.602 0.547693
age -68.5173 68.2328 -1.004 0.315983
educ 461.7625 225.6787 2.046 0.041484 *
black 288.6996 1537.7855 0.188 0.851190
hisp 434.5207 2415.2860 0.180 0.857331
marr 1439.5616 1151.6774 1.250 0.212136
re74 0.4675 0.1266 3.693 0.000257 ***
u74 3066.6001 1469.3595 2.087 0.037600 *
u75 2614.0372 1884.1405 1.387 0.166196
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 9422 on 354 degrees of freedom
Multiple R-squared: 0.07841, Adjusted R-squared: 0.05498
F-statistic: 3.347 on 9 and 354 DF, p-value: 0.0006022