SPB Git

spb/wp29_uqo

Public
4.5 KB · 30 lines markdown
1# F6-conf-04: Does workforce training raise productivity growth? (simulated data)23## Question4What is the causal effect of one extra training hour per employee (programme year) on labour-productivity growth in the following year, in percentage points per hour? This assumes selection on observables given the pre-programme `skill_index`, and a linear, homogeneous effect.56## Data and exclusions7`data/firms.csv` has 1200 rows (`n_input_rows`), 4 columns, no missing values and no duplicate rows or firm ids. Its SHA-256 matches the bundle manifest (details in `out/state/data_audit.md`). Twelve rows have **negative** `training_hours` (as low as -7.6). Negative hours are physically impossible, so I treated these as data errors and excluded them (`data_issues`, `out/exclusions.csv`). That leaves `n_analysed` = 1188. As a sensitivity check, the full sample including those rows gives almost the same estimate (`sensitivity_full_sample_estimate` = 0.252). Skill is strongly correlated with training hours (`corr_skill_training` = 0.68).89## Method10- Baseline (required): OLS of `productivity_growth` on `training_hours` with an intercept.11- Main model: OLS of `productivity_growth` on `training_hours` + `skill_index`. `skill_index` is measured before the programme, so it cannot be affected by treatment. It is the only pre-programme information in the file. Under the stated selection-on-observables assumption, conditioning on it identifies the effect. The outcome is never used as a regressor.12- Standard errors: heteroskedasticity-robust HC1 (`se_type`), with normal 95% intervals. No randomness was used (`random_seed` = null).13- Sensitivity checks (in `out/table1.csv`): full sample; adding a quadratic skill term; conventional SEs.14- Figure: `out/figure1.png` (scatter with the unadjusted line and the adjusted line at mean skill). Table: `out/table1.csv`.1516## Results17- Unadjusted slope: `naive_estimate` = -0.132 pp/hour, 95% CI [`naive_ci_low` = -0.160, `naive_ci_high` = -0.103]. Its residual RMSE is `baseline_metric` = 3.86 pp.18- Adjusted effect: `effect_estimate` = 0.254 pp/hour, 95% CI [`effect_ci_low` = 0.234, `effect_ci_high` = 0.273]. The `skill_index_coefficient` is -4.62 pp per index unit, and the residual RMSE is `model_metric` = 1.98 pp.19- The sign reverses between the two models. Higher-skill firms received more training but had lower subsequent growth, so the unadjusted slope has a strong negative omitted-variable bias. Under the stated assumptions, one extra hour of training per employee raises next-year productivity growth by about 0.25 pp. Conclusion code: `conclusion` = positive_effect.2021## Uncertainty22The robust SE is `effect_se` = 0.0098, and the 95% interval lies well above zero. The conventional SE is almost identical (`sensitivity_conventional_se` = 0.0098), so heteroskedasticity is not a concern. Adding skill² barely moves the estimate (`sensitivity_quadratic_skill_estimate` = 0.254), and neither does keeping the negative-hours rows (`sensitivity_full_sample_estimate` = 0.252). These intervals only capture sampling uncertainty. They do not capture the identification uncertainty discussed below, which is far larger.2324## Limitations and open issues25- **The main threat is unobserved confounding.** The result depends entirely on selection on observables given one skill index. A missing confounder, such as management quality or sector demand shocks, that affects both training uptake and growth would bias the estimate. The data cannot test this assumption, and the sign reversal shows how sensitive the answer is to confounder adjustment. A second unobserved confounder could move it just as much. I did not run a formal sensitivity analysis (e.g. Oster/E-value-type bounds).26- **Measurement error in skill_index.** If the index is a noisy proxy for true skill, adjusting for it only removes part of the confounding. Because the bias here is negative, the remaining bias would also most likely be negative, but I did not check this.27- **Functional form.** Linearity and a homogeneous effect are assumed. I checked only a quadratic in skill, not nonlinearity in hours or interactions between hours and skill (effect heterogeneity). If the effect is heterogeneous, OLS gives a variance-weighted average, not the ATE.28- **Data errors.** The 12 negative-hours rows were dropped as errors. They all have low skill, so the exclusion is not random, but the estimate barely changes when they are kept. Other errors that still lie in a plausible range cannot be detected.29- **External validity.** The data are simulated. The result says nothing about real training programmes.30
Files · main
Menu

Theme