F1-conf-03 — Leverage at end of year t and default in year t+1
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 in the linear-probability model default_next = a + b1·leverage + b2·cash_ratio + b3·log_sales + e, estimated by OLS with firm-clustered standard errors. The data are simulated (a synthetic panel), not observed firms.
Data and exclusions
- I read 2,140 data rows from
data/firm_panel.csv. The panel should have 300 firms × 7 years = 2,100 rows. - Column excluded:
rating_2025. It only becomes known in 2025, and it was built from each firm's realised default history through 2022 and from its average leverage over the sample. It therefore contains future outcome information (leakage), so it breaks the end-of-year-t rule. I removed it from the analytic dataset and from the model.firm_idis used only for clustering, andyearis not part of the specified model. - Exact duplicate rows: 40 removed. These are assembly errors: each firm-year is repeated with identical values in every field. After removing them there are 2,100 rows, with every firm present exactly 7 times. No firm-year had conflicting duplicates.
- Missing outcome: 300 removed. Every origin-2022 firm-year has an empty
default_next, because the outcome year (2023) falls after the end-2022 data cut. No outcome is missing for any other year. I did not impute these values. - Missing predictors: none.
- Estimation sample: 1,800 firm-years (origin years 2016–2021) covering 300 firms. The step-by-step ledger is in
out/exclusions.csv, and the sample itself is inout/analytic.csv.
Method
OLS of default_next on an intercept, leverage, cash_ratio and log_sales (statsmodels). Standard errors are clustered by firm_id (300 clusters) using statsmodels' default small-sample correction. No randomness is involved, so no seed is used. Running out/analysis.py regenerates every output.
Results
| term | coef | cluster SE |
|---|---|---|
| intercept | 0.0900 | 0.0435 |
| leverage | 0.2638 | 0.0408 |
| cash_ratio | −0.1859 | 0.0589 |
| log_sales | −0.0073 | 0.0076 |
- R² = 0.0349, n = 1,800 firm-years, 300 firms.
- Baseline: the default rate in the sample is 0.1211.
- Interpretation: holding cash ratio and log sales fixed, a leverage that is 0.10 higher (10 percentage points of debt/assets) goes with a next-year default probability about 2.6 percentage points higher.
Uncertainty
- The 95% CI for the leverage coefficient (firm-clustered) is [0.184, 0.344], p ≈ 1e-10.
- Clustering accounts for correlation within each firm across years. It does not account for common shocks within a year, and with only 6 origin years, clustering by year would not be reliable anyway.
Limitations and open issues
- This is an association, not a causal effect. Leverage is correlated with omitted firm characteristics.
- A linear-probability model can produce fitted values outside [0,1], and its errors are heteroskedastic (cluster-robust SEs address the latter).
- Default is not absorbing in this extract: 56 firms have
default_next = 1in more than one year. I kept every firm-year as given, treating default as a repeatable annual event. If default were meant to end a firm's history, the years after its first default would have to be dropped, and the estimate would change. - Dropping the 2022 origin year is required, because its outcome cannot be observed. It is not a selection on outcomes.
- The data are synthetic, so the numbers say nothing about real firms.