F1-conf-03 — Next-year default and leverage (information-respecting analytic dataset)
Question
How is a firm's leverage at the end of year t associated with default in year t+1, using only information available at the end of year t? Estimand: coefficient b1 on leverage in the linear-probability model default_next = a + b1·leverage + b2·cash_ratio + b3·log_sales + e, OLS on firm-years with observed outcome, SEs clustered by firm. The data are simulated (synthetic), not observed.
Data and exclusions
data/firm_panel.csv has 2140 data rows (n_input_rows). Steps (see out/exclusions.csv):
- Column
rating_2025removed (0 rows): it is assigned in 2025 from the firm's realised default history through 2022, so it was not known at the end of year t (variables_excluded). In the data every default carries rating D and A/B/C firms never default, confirming the leakage. - 40 rows that exactly duplicated another row (same firm-year, identical values) dropped → 2100 rows = 300 firms × 7 years (
data_issues). - 300 firm-years with empty
default_nextdropped (all origin year 2022; outcome year 2023 lies beyond the end-2022 data cut). No outcomes imputed. - Missing predictors: none (0 removed).
Estimation sample: n_analysed = 1800 firm-years, n_firms = 300, origin years 2016–2021. Predictors: predictors_used = leverage, cash_ratio, log_sales. firm_id and year are not regressors (firm_id is used only for clustering).
Method
OLS of default_next on an intercept and the three predictors (statsmodels), with a cluster-robust covariance by firm_id (CR1, small-sample factor G/(G−1)·(N−1)/(N−K), 300 clusters). Baseline: unconditional default rate in the estimation sample (default_rate). No randomness (random_seed = null). Estimates were checked against an independent numpy computation (out/state/checks.md).
Results
- Baseline default rate:
default_rate= 0.121. beta_leverage= 0.264: holding cash_ratio and log_sales fixed, a 0.1 increase in leverage (debt/assets) goes with about 2.6 percentage points higher probability of default next year.r2= 0.035. Other coefficients, reported insupplementary(not required): cash_ratio −0.186, log_sales −0.0073.
Uncertainty
se_leverage_cluster = 0.0408 (firm-clustered). The 95% CI is [0.184, 0.344] (supplementary.ci95_leverage_cluster), with p < 1e-9 (supplementary.p_leverage_cluster). The heteroskedasticity-robust SE without clustering is 0.0374 (supplementary.se_leverage_hc1), so clustering makes the SE somewhat larger.
Limitations and open issues
- The result is an association, not a causal effect. The LPM can produce fitted probabilities outside [0,1]. R² is low, so leverage explains only a small share of the variation in default.
- Some firms have default_next = 1 in more than one year. The codebook does not say that default is absorbing, so these rows were kept. If default should end a firm's time at risk, the sample definition would change.
- Leverage is bounded exactly at 0.02 and 0.95, which suggests truncation in the source. Values were kept as recorded.
- Duplicates were treated as assembly errors because the copies were identical on every column, so no conflicts had to be resolved.
- Feasibility: complete (
feasibility).