# 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`: 1. Column `rating_2025` dropped (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 in `variables_excluded`. 2. 40 exact duplicate rows removed (same firm-year, every value identical), 2140 → 2100. After this the panel is balanced at 300 firms × 7 years. 3. 300 firm-years with an empty `default_next` removed, 2100 → 1800. These are all the origin-2022 rows, whose outcome year (2023) falls after the data cut. Outcomes were not imputed. 4. 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_next` on an intercept, `leverage`, `cash_ratio` and `log_sales` (`predictors_used`). - **Standard errors:** clustered by `firm_id` (statsmodels cluster covariance with its default small-sample correction, 300 clusters). - **Randomness:** none, so `random_seed` is null. - **Reproducibility:** `out/analysis.py` regenerates every output from `data/`. ## 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`) - **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`).