SPB Git

spb/wp29_uqo

Public

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

# Question

What is the causal effect of one extra training hour per employee (programme year) on firm productivity growth in the following year (pp per hour), assuming selection on observables given the pre-programme skill_index, and a linear, homogeneous effect? The unadjusted OLS slope is reported as the baseline.

# Data and exclusions

  • data/firms.csv: 1200 rows, 4 columns. There are no missing values, no duplicate firm_ids and no duplicate rows.
  • Issue: 12 firms have negative training_hours (minimum −7.585). Hours per employee cannot be negative, so I treated these values as invalid and excluded them, which leaves n = 1188 for the main estimates. All 12 are low-skill firms (skill_index between −3.0 and −1.0), so they look like the lower tail of a simulated, untruncated hours variable. Two sensitivity checks cover this choice: keeping the rows as they are, and setting their hours to 0. Neither materially changes the result (table1).
  • skill_index was measured in the year before the programme, so it is a valid pre-treatment covariate and cannot be a mediator. productivity_growth is measured after the programme. In the raw data, the correlations are: skill vs hours +0.69, skill vs growth −0.79, hours vs growth −0.28.

# Method

  1. Baseline: OLS of productivity_growth ~ training_hours.
  2. Main model: OLS of productivity_growth ~ training_hours + skill_index. Under the stated selection-on-observables assumption, the only available confounder is skill_index. It strongly predicts both treatment intensity (higher-skill firms train more) and the outcome (higher-skill firms grow less), so adjusting for it is required. With a linear, homogeneous effect, its coefficient on training_hours identifies the estimand.
  3. Standard errors are HC1 heteroskedasticity-robust, with 95% normal-approximation CIs. Conventional SEs are also reported in table1. No randomness is used (random_seed = null).
  4. Fit metric: in-sample residual RMSE, sqrt(mean(e²)).

# Results

model estimate (pp/hour) 95% CI
Unadjusted −0.132 [−0.160, −0.103]
Adjusted for skill_index (main) 0.254 [0.234, 0.273]
  • The coefficient on skill_index in the main model is −4.62 pp per index unit.
  • Residual RMSE falls from 3.86 pp (unadjusted) to 1.98 pp (adjusted).
  • The unadjusted association is negative, but it reverses sign after adjustment. This is a classic confounding pattern: training went disproportionately to high-skill firms, and those firms have lower productivity growth.
  • Conclusion: positive_effect. One extra training hour per employee raises next-year productivity growth by about 0.25 pp.
  • Figure 1 (figure1.png) shows the scatter with both fitted lines; the adjusted line is evaluated at the mean skill_index. Table 1 (table1.csv) lists all models, including the sensitivity checks.

# Uncertainty

  • The robust SE of the main effect is 0.0098, giving a 95% CI of [0.234, 0.273], far from zero.
  • Conventional SEs are almost identical (0.00984 conventional vs 0.00981 HC1), so heteroskedasticity is not driving the result.
  • Sensitivity checks:
    • Including the negative-hours rows gives 0.252.
    • Setting those hours to 0 gives 0.254.
    • Adding skill_index² gives 0.254.
  • All of these fall inside the main CI.
  • The CI covers sampling uncertainty only. It does not cover uncertainty about the identifying assumption.

# Limitations and open issues

  • Identification rests entirely on selection on observables. If unobserved factors drive both training hours and growth, the estimate is biased in an unknown direction. Examples are management quality, sector, firm size, or anticipated demand shocks. The data contain only one covariate, so this cannot be tested here. The 3.9 → 2.0 RMSE drop and the sign reversal show that confounding by observables is strong, which makes residual confounding by unobservables plausible in any real-world analogue.
  • Measurement of the confounder: skill_index is a single index. If it measures true skill with error, adjustment is incomplete. Because the confounding runs in the direction that makes the naive estimate too low, incomplete adjustment would likely bias the estimate downward. This is not checked.
  • Functional form: I assumed a linear, homogeneous effect, as the task specifies. I checked one nonlinearity in the confounder (a quadratic in skill) but did not test nonlinear effects of hours, effect heterogeneity by skill, or overlap/common support in detail. If effects are heterogeneous, the OLS coefficient is a variance-weighted average and not the ATE.
  • Negative hours: I excluded these 12 rows as invalid. If they signal a broader recording or simulation problem with training_hours, such as noise added to all values, then the treatment is measured with error and the coefficient would be attenuated. I cannot verify this. The sensitivity checks show the 12 rows themselves do not matter.
  • Other unchecked points: influential observations and outliers, beyond the summary statistics. Interference between firms and timing issues, such as growth partly occurring during the programme year, also cannot be assessed from these data.
  • The data are simulated, so the result says nothing about real training programmes.
Files · main
Menu

Theme