# 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_id`s 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.