SPB Git

spb/wp29_uqo

Public
3.6 KB · 32 lines markdown
1# F1-conf-03 — Leverage and next-year default (information-respecting)23## Question4How 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 OLS linear-probability model default_next = a + b1·leverage + b2·cash_ratio + b3·log_sales + e. The model is fit on firm-years with an observed outcome, with standard errors clustered by firm. Data are simulated (synthetic panel).56## Data and exclusions7Input: `data/firm_panel.csv`, 2140 data rows (`n_input_rows`). Exclusion ledger (`out/exclusions.csv`):8- Column `rating_2025` dropped (no rows removed). It is a 2025 final-vintage field built from realised defaults through 2022 and sample-average leverage, so it was not known at the end of t (`variables_excluded`). Diagnostic: the observed default rate is 0 for ratings A/B/C and about 0.227 for D, so the rating effectively encodes the outcome (`default_rate_by_rating_2025_diagnostic`).9- 40 exact duplicate rows removed (identical on every column, no conflicting values). That leaves 2100 rows = 300 firms × 7 years (`data_issues`).10- 300 firm-years with empty `default_next` removed, all with origin year 2022 (the outcome year 2023 lies after the data cut). No outcomes were imputed (`data_issues`).11- No rows had missing predictors.12Estimation sample: `n_analysed` = 1800 firm-years, `n_firms` = 300, origin years 2016–2021. It is written to `out/analytic.csv` with columns firm_id, year, leverage, cash_ratio, log_sales, default_next.1314## Method15Baseline: the unconditional default rate in the estimation sample (`default_rate`). Main model: OLS with an intercept and `predictors_used` = leverage, cash_ratio, log_sales (statsmodels). Standard errors are cluster-robust by `firm_id` (300 clusters, `n_clusters`), using the standard CR1 small-sample correction. An independent numpy recomputation matched the coefficient, SE and R² to within 1e-15 (`out/state/checks.md`). The analysis uses no randomness (`random_seed` = null).1617## Results18- Baseline: the default rate is 0.121 (`default_rate`).19- `beta_leverage` = 0.264: holding cash ratio and log sales fixed, one unit more leverage (debt/assets going from 0 to 1) goes with a 26.4 percentage-point higher probability of default the next year. A one-SD change in leverage (≈0.21, from the audit) therefore corresponds to about 5.5 pp, which is large next to the 12.1% base rate.20- Other coefficients: `beta_cash_ratio` = −0.002 with SE 0.065, so not distinguishable from zero. `beta_log_sales` = 0.012 with SE 0.009. `intercept` = −0.04 (numbers rounded from results.json).21- `r2` = 0.035: the three predictors explain little of the variation in individual defaults.2223## Uncertainty24`se_leverage_cluster` = 0.041 (clustered by firm). The 95% CI is [0.184, 0.344] (`ci95_leverage_cluster`), with p ≈ 1e-10 (`pvalue_leverage_cluster`). These rely on large-cluster asymptotics; 300 clusters is ample.2526## Limitations and open issues27- This is an association in a linear-probability model, not a causal effect. LPM fitted values may fall outside [0,1].28- The data are synthetic. Results describe this simulated panel only.29- Firms keep appearing after a default year, and some default in several years (up to 4). The codebook defines default per year and gives no exit rule, so all firm-years were kept as provided.30- I kept the first copy of each duplicate. Because the copies are identical, the choice does not affect the results.31- I did not test alternatives such as logit/probit or year fixed effects, because the task specifies the model.32
Files · main
Menu

Theme