SPB Git

spb/wp29_uqo

Public

# F6-conf-04 — Training hours and productivity growth (simulated firm data)

# Question

What is the causal effect of one additional training hour per employee during the programme year on productivity growth in the following year (pp per hour)? Identification assumes selection on observables: conditional on the pre-programme skill_index, training hours are as good as randomly assigned, with a linear, homogeneous effect. The data are simulated, not observed.

# Data and exclusions

data/firms.csv: 1200 firms (n_input_rows), no missing values, no duplicate firms. 12 rows have negative training_hours (minimum −7.585), which is physically impossible. I treat these as recording errors and exclude them (data_issues; out/exclusions.csv step 3), so the main sample has 1188 firms (n_analysed). The excluded firms all have low skill. Sensitivity checks that keep these rows, or set them to 0, are reported below. Full audit: out/state/data_audit.md.

# Method

  • Baseline (unadjusted): OLS of productivity_growth on training_hours with an intercept.
  • Target model: OLS of productivity_growth on training_hours + skill_index. skill_index is measured before the programme, so it is a valid confounder control and not a post-treatment variable. It is also the only covariate available. In the data, skill is strongly correlated with hours (corr_hours_skill) and with growth. Under the stated assumptions, its coefficient on hours identifies the estimand.
  • Standard errors: HC1 heteroskedasticity-robust. 95% CIs use the normal approximation (estimate ± 1.96·SE; se_type). Fit is measured by in-sample residual RMSE. No randomness is involved (random_seed = null).
  • Robustness checks: keeping or censoring the negative-hours rows; adding skill² and skill³ (functional form of the confounder); adding hours²; conventional SEs. All are in out/sensitivity.csv.

# Results

model estimate (pp/hour) 95% CI RMSE
Unadjusted −0.132 (naive_estimate) [−0.160, −0.103] (naive_ci_low, naive_ci_high) 3.86 (baseline_metric)
Adjusted for skill (target) 0.254 (effect_estimate) [0.234, 0.273] (effect_ci_low, effect_ci_high) 1.98 (model_metric)

(out/table1.csv; out/figure1.png.)

The unadjusted association is negative. Once baseline skill is held fixed, one extra training hour per employee is associated with about 0.25 pp higher productivity growth the following year. The conclusion code is positive_effect (conclusion). The sign flips because of confounding: higher-skill firms took more training (corr_hours_skill = 0.68) but grew more slowly (skill_index_coefficient = −4.62 pp per index unit). The omitted-variable-bias identity reproduces the gap between the two estimates exactly (out/state/checks.md). Adding skill cuts the residual RMSE roughly in half (baseline_metric vs model_metric).

# Uncertainty

The robust SE of the effect is 0.0098 (effect_se); the conventional SE is almost the same, 0.0098 (sens_effect_conventional_se). The point estimate barely moves across specifications: 0.252 with all 1200 rows (sens_effect_all_rows), 0.254 with negative hours censored at 0 (sens_effect_censored0), and 0.254 with quadratic or cubic skill terms (sens_effect_skill_sq, sens_effect_skill_cubic). These intervals reflect sampling uncertainty only. They do not cover uncertainty about the identifying assumption, which is the main risk.

# Limitations and open issues

  • What would invalidate the result: any unobserved factor that affects both training uptake and later growth (management quality, sector trends, firms anticipating a downturn, mean reversion beyond what skill captures). The file contains no other variables, so selection on observables cannot be tested. If it fails, 0.254 is a biased conditional association rather than a causal effect. The sign reversal shows how sensitive the estimate is to confounder adjustment: a second omitted confounder of similar strength could change the answer again.
  • Measurement error in skill_index: a noisily measured confounder only partially removes confounding. With a positive hours–skill correlation and a negative skill effect, residual confounding would bias the estimate downward toward the naive value. This was not checked; no reliability information exists.
  • Negative training hours: the 12 impossible values show that the treatment variable contains recording errors. If similar errors affect values that are not obviously invalid, the estimate suffers attenuation bias. Excluding or censoring the 12 rows does not change the result materially.
  • Functional form and homogeneity: linearity in hours was checked only through a quadratic term (the linear coefficient stayed at 0.249). Heterogeneous effects, for example by skill level, were not estimated. If effects differ across firms, the OLS coefficient is a variance-weighted average rather than the average effect. Overlap is limited at extreme combinations of skill and hours.
  • Not checked: spillovers between firms, clustering (there is no grouping variable), and out-of-sample predictive performance (both RMSEs are in-sample). The data are simulated, so nothing here is evidence about real training programmes.
Files · main
Menu

Theme