SPB Git

spb/wp29_uqo

Public

# 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: 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. The data are simulated (a synthetic panel), not observed data.

# Data and exclusions

Input: data/firm_panel.csv, 2,140 data rows, 300 firms, years 2016–2022.

step rule n_before n_after removed
1 rows read 2140 2140 0
2 drop column rating_2025 (information rule) 2140 2140 0
3 drop exact duplicate rows 2140 2100 40
4 drop rows with missing default_next 2100 1800 300
5 drop rows with missing predictors 1800 1800 0

Data issues I found and how I handled them:

  • rating_2025 breaks the information rule. It was assigned in 2025, using each firm's realised default history through 2022 and its average leverage over the whole sample. It therefore leaks the outcome: every default in the data has rating D. I left it out of the analytic dataset and the model, and it is listed in variables_excluded.
  • 40 exact duplicate rows. These are assembly errors: 40 firms have 8 rows instead of 7. Every duplicate is identical in all columns, so I kept one copy of each. After this step there is exactly one row per firm-year.
  • 300 missing outcomes. All of them, and only them, are origin year 2022. Their outcome year, 2023, falls after the end-2022 data cut. I excluded them and did not impute.
  • Leverage piles up at its minimum value of 0.02. 54 analysed rows sit exactly there, which suggests floor-coding. I kept the values as recorded.
  • Repeat defaults. 56 firms have default_next = 1 in more than one year, i.e. firms do not leave the panel after defaulting. I kept these rows because the estimand is defined over firm-years, and the firm-clustered standard errors allow for correlation within a firm.

Final estimation sample (out/analytic.csv): 1,800 firm-years, 300 firms, origin years 2016–2021. Columns: firm_id, year, leverage, cash_ratio, log_sales, default_next.

# Method

OLS linear probability model with predictors leverage, cash_ratio and log_sales (all measured at the end of year t), using statsmodels. Standard errors are clustered by firm_id (300 clusters) with statsmodels' default small-sample correction. The method is deterministic, so no random seed is used. out/analysis.py regenerates every output from data/.

# Results

  • Baseline default rate in the sample: 0.1211 (218 of 1,800 firm-years).
  • beta_leverage = 0.2638: holding cash ratio and log sales fixed, an increase of 1.0 in leverage (e.g. from 0 to 1) goes with a 26.4 percentage-point higher probability of default next year. Equivalently, about 2.6 pp per 0.10 of leverage.
  • cash_ratio: −0.186 (clustered SE 0.059). log_sales: −0.0073 (SE 0.0076). Intercept: 0.090.
  • R² = 0.0349.

# Uncertainty

The firm-clustered SE of beta_leverage is 0.0408, giving a 95% CI of [0.184, 0.344] and p ≈ 1e-10. Leverage is positively associated with next-year default. The intervals reflect sampling variation within this synthetic panel only.

# Limitations and open issues

  • The estimate is an association, not a causal effect. Confounders that were not observed are not controlled for.
  • A linear probability model can predict values outside [0, 1], and its errors are heteroskedastic by construction. Clustered SEs are robust to the heteroskedasticity.
  • The floor at leverage = 0.02 may be censoring, which would slightly distort the slope. I did not correct for it.
  • Because defaults repeat within firms, "default" here is a recurring event rather than an absorbing one. If the outcome was meant to be first default, the sample definition would have to change.
  • The data are simulated, so the results describe how the data were generated, not real firms.
  • Feasibility: complete.
Files · main
Menu

Theme