F1-conf-03 — Leverage at end of year t and default in year t+1
Simulated data (synthetic firm-year panel), not observed data.
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, estimated by OLS with standard errors clustered by firm.
Data and exclusions
I read 2,140 data rows from data/firm_panel.csv. The ledger is in out/exclusions.csv:
| step | rule | before | after | removed |
|---|---|---|---|---|
| 1 | rows read | 2140 | 2140 | 0 |
| 2 | drop exact duplicate rows (assembly error) | 2140 | 2100 | 40 |
| 3 | exclude column rating_2025 (known only in 2025) |
2100 | 2100 | 0 |
| 4 | drop firm-years with unobserved default_next |
2100 | 1800 | 300 |
| 5 | drop rows with missing predictors | 1800 | 1800 | 0 |
- Duplicates: 40 firm-year keys appeared twice, and both copies matched in every column. I kept one copy of each. After that the panel is balanced: 300 firms × 7 years = 2,100 rows.
- Look-ahead variable: the codebook says
rating_2025became known in 2025 and was built from each firm's realised default history through 2022 and its average leverage over the whole sample. It breaks the information rule and leaks the outcome. In the data, every default occurs among firms rated D. I left it out of the model and out ofanalytic.csv. - Censored outcomes:
default_nextis missing for exactly the 300 firm-years with origin year 2022, because year 2023 was after the data cut. I dropped these rows and did not impute them. - No predictor values were missing.
Estimation sample: 1,800 firm-years from 300 firms, origin years 2016–2021.
Method
I fitted OLS of default_next (0/1) on leverage, cash_ratio and log_sales plus an intercept, using statsmodels. Standard errors are clustered by firm_id (300 clusters), with statsmodels' default small-sample correction. No randomness is involved, so no seed is set. out/analysis.py regenerates every output from data/.
Results
- b1 (
leverage) = 0.264. On average, a firm with 0.10 higher debt/assets at the end of year t has about a 2.6 percentage-point higher probability of defaulting in t+1, holding cash ratio and log sales fixed. cash_ratio= −0.186 (cluster SE 0.059).log_sales= −0.007 (SE 0.008), which is not statistically distinguishable from zero.- R² = 0.035. Baseline default rate in the estimation sample = 0.121 (218 of 1,800 firm-years).
Uncertainty
- The firm-clustered SE of b1 is 0.041, giving a 95% CI of [0.184, 0.344] (normal approximation, p ≈ 1e-10).
- The CI reflects sampling variability only. It does not cover model misspecification: the LPM is linear, and fitted values can fall outside [0, 1].
Limitations and open issues
- The estimate is an association, not a causal effect. Unobserved firm characteristics may affect both leverage and default.
- Default is not absorbing in this panel. Firms default in several years and stay in the panel; in 39 firm-years a default follows a prior-year default. I treated default as a recurring annual event, as the data present it. If default were meant to end the firm's record, some rows after a default would need to be removed, and the estimate could change.
- Leverage lies within [0.02, 0.95], which suggests it was clipped in the simulation. I kept it as given.
- Low R² is typical for rare-event LPMs. I did not run a logit/probit robustness check because it was outside the stated estimand.
- If
rating_2025were included, the leakage would bias the estimate. I did not report that model, because it is not a legitimate estimate.