F1-conf-03 — Leverage and next-year default
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: the coefficient b1 on leverage in the linear probability model default_next = a + b1·leverage + b2·cash_ratio + b3·log_sales + e, fit by OLS on firm-years with an observed outcome, with standard errors clustered by firm. The data are simulated (synthetic panel), not observed data.
Data and exclusions
I read data/firm_panel.csv: 2140 data rows (n_input_rows), 300 firms, origin years 2016–2022. The exclusion ledger is in out/exclusions.csv:
- Column
rating_2025dropped (0 rows removed). The rating was assigned in 2025 from each firm's realised default history through 2022 and its sample-average leverage, so nobody could have known it at the end of year t. In the raw data, ratings A/B/C go with a 0% default rate and D with about 23%, which shows the leakage directly. It is listed invariables_excluded. - 40 exact duplicate rows removed (same firm-year, every value identical), 2140 → 2100. After this the panel is balanced at 300 firms × 7 years.
- 300 firm-years with an empty
default_nextremoved, 2100 → 1800. These are all the origin-2022 rows, whose outcome year (2023) falls after the data cut. Outcomes were not imputed. - Rows with missing predictors: none (0 removed).
Estimation sample: n_analysed = 1800 firm-years from n_firms = 300 firms, origin years 2016–2021 (out/analytic.csv). Every detected problem is listed in data_issues.
Method
- Baseline: the unconditional default rate in the estimation sample (
default_rate). - Main model: OLS of
default_nexton an intercept,leverage,cash_ratioandlog_sales(predictors_used). - Standard errors: clustered by
firm_id(statsmodels cluster covariance with its default small-sample correction, 300 clusters). - Randomness: none, so
random_seedis null. - Reproducibility:
out/analysis.pyregenerates every output fromdata/.
Results
- Baseline default rate: 0.121 (
default_rate; 218 defaults,supp_n_defaults). - Leverage coefficient: 0.264 (
beta_leverage). Holding cash ratio and log sales fixed, firm-years with 0.1 higher leverage have a next-year default probability about 2.6 percentage points higher. - Other coefficients:
- cash_ratio: −0.186 (
supp_coef_cash_ratio) - log_sales: −0.0073 (
supp_coef_log_sales) - intercept: 0.090 (
supp_intercept)
- cash_ratio: −0.186 (
- In-sample R²: 0.035 (
r2).
Uncertainty
- Firm-clustered standard error: 0.0408 (
se_leverage_cluster). - 95% CI: [0.184, 0.344] (
supp_ci95_leverage_cluster). - p-value: about 1e-10 (
supp_pvalue_leverage_cluster). - Comparison: the non-clustered (iid) standard error is 0.0358 (
supp_se_leverage_iid). This is smaller, which fits with outcomes being correlated within firms.
Limitations and open issues
- Association only: the estimate is a conditional association, not a causal effect. The LPM assumes a linear conditional mean, and fitted values may fall outside [0,1].
- Low R²: the model explains little of the variation in default (
r2). - Repeated defaults: some firms default in more than one year and stay in the panel after defaulting. The panel's construction (a synthetic extract) is unexplained, so I kept every firm-year as given rather than impose an exit rule that the task does not ask for.
- Duplicate handling: I treated the 40 duplicates as assembly errors because their values were identical. Keeping them would have double-counted those firm-years.
- Feasibility: complete (
feasibility).