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.