F1-conf-03 — Leverage and next-year default (information-respecting)
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 OLS linear-probability model default_next = a + b1·leverage + b2·cash_ratio + b3·log_sales + e. The model is fit on firm-years with an observed outcome, with standard errors clustered by firm. Data are simulated (synthetic panel).
Data and exclusions
Input: data/firm_panel.csv, 2140 data rows (n_input_rows). Exclusion ledger (out/exclusions.csv):
- Column
rating_2025dropped (no rows removed). It is a 2025 final-vintage field built from realised defaults through 2022 and sample-average leverage, so it was not known at the end of t (variables_excluded). Diagnostic: the observed default rate is 0 for ratings A/B/C and about 0.227 for D, so the rating effectively encodes the outcome (default_rate_by_rating_2025_diagnostic). - 40 exact duplicate rows removed (identical on every column, no conflicting values). That leaves 2100 rows = 300 firms × 7 years (
data_issues). - 300 firm-years with empty
default_nextremoved, all with origin year 2022 (the outcome year 2023 lies after the data cut). No outcomes were imputed (data_issues). - No rows had missing predictors.
Estimation sample:
n_analysed= 1800 firm-years,n_firms= 300, origin years 2016–2021. It is written toout/analytic.csvwith columns firm_id, year, leverage, cash_ratio, log_sales, default_next.
Method
Baseline: the unconditional default rate in the estimation sample (default_rate). Main model: OLS with an intercept and predictors_used = leverage, cash_ratio, log_sales (statsmodels). Standard errors are cluster-robust by firm_id (300 clusters, n_clusters), using the standard CR1 small-sample correction. An independent numpy recomputation matched the coefficient, SE and R² to within 1e-15 (out/state/checks.md). The analysis uses no randomness (random_seed = null).
Results
- Baseline: the default rate is 0.121 (
default_rate). beta_leverage= 0.264: holding cash ratio and log sales fixed, one unit more leverage (debt/assets going from 0 to 1) goes with a 26.4 percentage-point higher probability of default the next year. A one-SD change in leverage (≈0.21, from the audit) therefore corresponds to about 5.5 pp, which is large next to the 12.1% base rate.- Other coefficients:
beta_cash_ratio= −0.002 with SE 0.065, so not distinguishable from zero.beta_log_sales= 0.012 with SE 0.009.intercept= −0.04 (numbers rounded from results.json). r2= 0.035: the three predictors explain little of the variation in individual defaults.
Uncertainty
se_leverage_cluster = 0.041 (clustered by firm). The 95% CI is [0.184, 0.344] (ci95_leverage_cluster), with p ≈ 1e-10 (pvalue_leverage_cluster). These rely on large-cluster asymptotics; 300 clusters is ample.
Limitations and open issues
- This is an association in a linear-probability model, not a causal effect. LPM fitted values may fall outside [0,1].
- The data are synthetic. Results describe this simulated panel only.
- Firms keep appearing after a default year, and some default in several years (up to 4). The codebook defines default per year and gives no exit rule, so all firm-years were kept as provided.
- I kept the first copy of each duplicate. Because the copies are identical, the choice does not affect the results.
- I did not test alternatives such as logit/probit or year fixed effects, because the task specifies the model.