# F2-smoke-01 — Slope estimate with firm-clustered uncertainty ## Question Estimate the population linear-projection slope β in y = α + βx + ε for a synthetic firm panel, with standard errors that allow arbitrary correlation within firms (independence across firms only). ## Data and exclusions `data/panel.csv` (synthetic) has 2000 rows (`n_input_rows`), 50 firms (`n_clusters`), 40 observations per firm (`obs_per_firm_min`, `obs_per_firm_max`). No missing values, non-numeric entries or duplicate rows were found, so `data_issues` is empty. The two exclusion rules (complete cases, exact duplicates) removed 0 rows (`out/exclusions.csv`), so 2000 observations were analysed (`n_analysed`). ## Method OLS of y on x with an intercept. Baseline: conventional homoskedastic OLS standard error (`se_ols`). Main inference: cluster-robust (CR1) variance clustered by `firm_id`, with the small-sample factor G/(G−1)·(N−1)/(N−K) (statsmodels; checked against a manual computation). The 95% CI is β̂ ± t₀.₉₇₅,G−1 · SE_cluster with G−1 = 49 degrees of freedom (`ci_critical_value_t_df`, `ci_critical_value`). No randomness is involved (`random_seed` = null). ## Results - Slope β̂ = 0.8051 (`beta_hat`); intercept α̂ = 1.4440 (`alpha_hat`). - Clustered 95% CI for β: [0.6581, 0.9521] (`beta_ci_low`, `beta_ci_high`). ## Uncertainty - Naïve OLS SE = 0.0241 (`se_ols`); firm-clustered SE = 0.0731 (`se_cluster`), a ratio of 3.03 (`se_ratio_cluster_over_ols`). - The naïve 95% CI [0.7578, 0.8524] (`baseline_ci_low_ols`, `baseline_ci_high_ols`) is roughly one third as wide as the clustered one. It treats the 2000 rows as independent when they are not, so it overstates precision. - Both intervals exclude zero. ## Limitations and open issues - The clustered SE is only valid if firms are independent and G = 50 is large enough for the asymptotics. 50 balanced clusters is usually considered adequate, but the t(G−1) reference distribution is only an approximation. - β is a projection coefficient, not a causal effect. - The data are synthetic, and no robustness alternatives (e.g. wild cluster bootstrap) were computed because the task did not require them.