
Bias-corrected conventional estimates for assumed fathers' effects
Source:R/bias_bounds.R
bias_bounds.RdThe bias-bounding exercise of Leventer (2025, Section 3.3). Under NTD the
conventional estimator (the gender gap in normalized DID) is biased for the
gender gap in normalized effects \(\theta(f) - \theta(m)\) when parallel
trends fails (Theorem 1). If fathers' normalized effect \(\theta(m)\) were
known, the gap would be identified (Proposition 2). This function computes the
bias-corrected gap for each assumed value of \(\theta(m)\), for every
post-treatment cell of results (Proposition 2 applies after
treatment, \(d' > a \ge d\)); comparing it with the conventional estimate
bounds the bias.
Usage
bias_bounds(results, theta_m = c(-0.1, 0.1))Arguments
- results
The data.frame returned by
multiple_treatment_group_analysis, unmodified.- theta_m
Numeric vector of assumed fathers' normalized effects (default
c(-0.1, 0.1), the paper's range).
Value
A data.frame with one row per cell and value of theta_m:
d, dp, a, event_time, theta_m,
est (the bias-corrected gap), se, ci_l, ci_h.
Details
For a post-treatment cell \((d, d', a)\), with \(\hat\Delta\) the
NTD rho_effect estimate (the effect of parenthood on the gender
earnings ratio) and
\(\hat\delta_{APO}(g)\) the DID-imputed counterfactual mean of gender
\(g\) (rows APO, DID_Female / DID_Male), the
bias-corrected gap is (Proposition 2, in the form of the appendix on estimation and inference)
$$\hat\Delta \, \frac{\hat\delta_{APO}(m)}{\hat\delta_{APO}(f)} \, (1 + \theta(m)).$$
It is linear in \(\theta(m)\), so the values at the ends of an interval
bound it over the whole interval. Standard errors come from the delta method on
the stored person-level influence functions, clustered by person.
Examples
# \donttest{
sim <- simulate_data(n_individuals = 2000)
res <- multiple_treatment_group_analysis(sim, treatment_groups = 24:26,
periods_post = 2, periods_pre = NULL, verbose = FALSE)
#> 1 cells could not be estimated (see attr(result, "skipped")), e.g.: No women with age at first birth 26 observed at age 28.
bb <- bias_bounds(res)
# Conventional estimate and the bias-corrected band, d = 25
subset(res, method == "Conventional" & d == 25, c(event_time, est))
#> event_time est
#> 65 0 -0.3594221
#> 84 1 -0.2410713
#> 103 2 -0.2355921
subset(bb, d == 25, c(event_time, theta_m, est, se))
#> event_time theta_m est se
#> 7 0 -0.1 -0.3267637 0.01833033
#> 8 0 0.1 -0.3993778 0.02240374
#> 9 1 -0.1 -0.2419381 0.01831832
#> 10 1 0.1 -0.2957022 0.02238905
#> 11 2 -0.1 -0.2329846 0.01721372
#> 12 2 0.1 -0.2847590 0.02103900
# }