SPB Git

spb/wp29_uqo

Public

# F1-conf-03 — Leverage and next-year default (information-respecting)

# Question

How strongly is a firm's leverage at the end of year t associated with default in year t+1, after conditioning on cash_ratio and log_sales? Only information known at the end of year t may be used. The estimand is b1 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 (synthetic).

# Data and exclusions

  • Input: data/firm_panel.csv, 2140 data rows (n_input_rows).
  • rating_2025 was removed. It was assigned in 2025 from each firm's realised default history through 2022, so it contains the outcome. In years before 2022, ratings A, B and C have a 0 % default rate and D has about 23 % (see out/state/data_audit.md). That makes it target leakage (variables_excluded).
  • 40 exact duplicate firm-year rows were dropped. These were assembly errors; after dropping them the panel is balanced, 300 firms × 7 years (data_issues).
  • 300 rows have no observed default_next. These are all from origin year 2022, whose outcome year (2023) falls after the data cut. They were excluded, not imputed (data_issues, out/exclusions.csv).
  • No predictor values were missing.
  • Estimation sample: n_analysed = 1800 firm-years from n_firms = 300 firms, covering origin years 2016–2021. Every step appears in out/exclusions.csv: 2140 − 40 − 300 = 1800.

# Method

  • Baseline: the unconditional default rate in the estimation sample (default_rate, also baseline_default_rate).
  • Main model: OLS linear-probability model on predictors_used = leverage, cash_ratio, log_sales, plus an intercept. Standard errors are cluster-robust by firm_id, using statsmodels' default small-sample correction (n_clusters = 300).
  • The analysis uses no randomness (random_seed = null). out/analysis.py regenerates every output deterministically.

# Results

  • Baseline default rate: 0.1211 (default_rate).
  • Leverage coefficient: beta_leverage = 0.2638. A 0.10 increase in leverage goes with about 2.6 percentage points higher next-year default probability, holding cash_ratio and log_sales fixed.
  • Other coefficients: beta_cash_ratio = −0.1859, beta_log_sales = −0.0073, intercept = 0.0900.
  • In-sample fit: r2 = 0.0349.

# Uncertainty

  • Firm-clustered SE: se_leverage_cluster = 0.0408. The 95 % CI is [0.1839, 0.3437] (ci95_leverage_cluster), with p ≈ 1e-10 (p_leverage_cluster).
  • The classical (non-clustered) SE is 0.0358 (se_leverage_classical). The clustered SE is somewhat larger because outcomes are correlated within firms.

# Limitations and open issues

  • This is a descriptive conditional association, not a causal effect.
  • A linear-probability model can produce fitted values outside [0, 1], and its errors are heteroskedastic. The cluster-robust SE accounts for the heteroskedasticity.
  • Leverage has a mass point at its minimum value of 0.02 (54 estimation firm-years), which suggests flooring or censoring in the extract. These values were kept as recorded (data_issues).
  • Origin year 2022 cannot be used because its outcomes are not yet observed.
  • Year effects are not included, because the specified model does not include them.
  • The data are synthetic, so these results say nothing about real firms.
  • Feasibility: feasibility = "complete".
Files · main
Menu

Theme