SPB Git

spb/wp29_uqo

Public
2.6 KB · 24 lines markdown
1# F2-smoke-01 — Slope of y on x with firm-clustered uncertainty23## Question4Estimate the population linear-projection slope β in y = α + βx + ε for a (synthetic) firm panel, with standard errors that allow arbitrary dependence among observations of the same firm (independence across firms only). This is a descriptive projection coefficient, not a causal effect.56## Data and exclusions7`data/panel.csv` (SHA-256 968410b9…ce5a8): 2000 rows read (`n_input_rows`), columns firm_id, x, y. No missing, non-finite or duplicate rows; 50 firms with exactly 40 observations each. The single exclusion rule (drop incomplete rows) removed 0 rows (`out/exclusions.csv`), so `n_analysed` = 2000 and `n_clusters` = 50. `data_issues` is empty. Full audit: `out/state/data_audit.md`.89## Method10OLS of y on x with an intercept (closed form). Baseline uncertainty: conventional homoskedastic OLS standard error (`se_ols`). Main uncertainty: cluster-robust sandwich variance by `firm_id` with the CR1 small-sample factor G/(G−1)·(N−1)/(N−K) (Stata/statsmodels default); the 95% CI uses t critical values with G−1 = 49 degrees of freedom (`ci_t_critical_df_G_minus_1` = 2.0096). No randomness is used (`random_seed` = null). Implemented in `out/analysis.py`; results cross-checked against statsmodels.1112## Results13- Slope `beta_hat` = 0.8051; intercept `alpha_hat` = 1.4440.14- Clustered SE `se_cluster` = 0.0731; 95% CI [`beta_ci_low`, `beta_ci_high`] = [0.658, 0.952].15- Naïve baseline `se_ols` = 0.0241 (baseline CI [`baseline_ci_low_ols`, `baseline_ci_high_ols`] = [0.758, 0.852]).1617## Uncertainty18The clustered SE is about 3.0 times the naïve SE (`se_ratio_cluster_over_ols` = 3.03). Both the residuals and x contain substantial firm-level components (the share of variance between firm means is 0.53 for residuals, `share_between_firm_var_resid`, and 0.45 for x, `share_between_firm_var_x`), so the conventional SE strongly overstates precision. The clustered CI (`beta_ci_low`, `beta_ci_high`) is the one to use for inference. It still excludes zero by a wide margin.1920## Limitations and open issues21- Cluster-robust inference is asymptotic in the number of clusters. 50 balanced clusters is usually enough, but coverage may still be a little below nominal. A wild cluster bootstrap could serve as a robustness check, but the task does not require one.22- OLS uses within- and between-firm variation together. If the firm shock is correlated with x, β is still the population projection slope the task asks for, but it should not be read causally or as a within-firm effect.23- The data are synthetic; no external validity is implied.24
Files · main
Menu

Theme