# WP18 — experiment definitions (CLAUDE.md Phase 3, experiments 1-10). # Each scenario = baseline.yaml + overrides (dotted keys). `kind` selects the solver: # ss : stationary recursive competitive equilibrium (GE: p, p^r, estate lottery re-solved) # ss_pe : household block + simulation at BASELINE prices (partial equilibrium, prices fixed) # mit : perfect-foresight transition after an unanticipated shock (GE) + its PE counterpart # static : temporary equilibria with static (steady-state) expectations (experiment 8, A6) # Results are written to results/data//.json ; every file carries the field # "equilibrium": "GE" | "PE (prices fixed)" | "static expectations". groups: # ---- Experiment 1 & 2: baseline moments, profiles, equal-income paths ---------------------- baseline: - {name: baseline, kind: ss, overrides: {}} # ---- Experiment 3: down-payment constraint and entry threshold sweep ------------------------ theta_sweep: - {name: theta_005, kind: ss, overrides: {mortgage.theta: 0.05}} - {name: theta_010, kind: ss, overrides: {mortgage.theta: 0.10}} - {name: theta_020, kind: ss, overrides: {mortgage.theta: 0.20}} # = baseline - {name: theta_030, kind: ss, overrides: {mortgage.theta: 0.30}} - {name: theta_040, kind: ss, overrides: {mortgage.theta: 0.40}} - {name: theta_005_pe, kind: ss_pe, overrides: {mortgage.theta: 0.05}} - {name: theta_040_pe, kind: ss_pe, overrides: {mortgage.theta: 0.40}} - {name: psi_030, kind: ss, overrides: {mortgage.psi: 0.30}} - {name: psi_050, kind: ss, overrides: {mortgage.psi: 0.50}} # ---- Experiment 4: surprise inflation, contracts, persistence, rent indexation -------------- inflation: - {name: frm_level, kind: mit, shock: {type: inflation, persistence: 1, contract: frm}} - {name: term5_level, kind: mit, shock: {type: inflation, persistence: 1, contract: term5}} - {name: arm_level, kind: mit, shock: {type: inflation, persistence: 1, contract: arm}} - {name: frm_persistent, kind: mit, shock: {type: inflation, persistence: 2, contract: frm}} - {name: term5_persistent, kind: mit, shock: {type: inflation, persistence: 2, contract: term5}} - {name: arm_persistent, kind: mit, shock: {type: inflation, persistence: 2, contract: arm}} - {name: frm_level_rigid_rents, kind: mit, shock: {type: inflation, persistence: 1, contract: frm}, overrides: {rental.eta_rent: 0.0}} - {name: frm_level_unindexed_wages, kind: mit, shock: {type: inflation, persistence: 1, contract: frm}, overrides: {rental.eta_wage: 0.0}} - {name: frm_persistent_taylor, kind: mit, shock: {type: inflation, persistence: 2, contract: frm, phi_r: 0.5}} - {name: term5_persistent_taylor, kind: mit, shock: {type: inflation, persistence: 2, contract: term5, phi_r: 0.5}} - {name: frm_level_fixed_supply, kind: mit, shock: {type: inflation, persistence: 1, contract: frm}, overrides: {supply.eps: 0.05, supply.eps_r: 0.05}} - {name: frm_level_noseg, kind: mit, shock: {type: inflation, persistence: 1, contract: frm}, overrides: {rental.sigma_seg: 0.0}} # ---- Experiment 5: leverage / LTV and negative house-price shocks --------------------------- leverage: - {name: rate_shock_theta020, kind: mit, shock: {type: real_rate, dr_annual: 0.02, persistence: 4}} - {name: rate_shock_theta005, kind: mit, shock: {type: real_rate, dr_annual: 0.02, persistence: 4}, overrides: {mortgage.theta: 0.05}} - {name: rate_shock_theta040, kind: mit, shock: {type: real_rate, dr_annual: 0.02, persistence: 4}, overrides: {mortgage.theta: 0.40}} # negative price shocks are also evaluated as pure accounting on the baseline cross-section # (price_drop_accounting in simulation.py: -10 %, -20 %, -30 %) — PE, prices fixed after the drop. # ---- Experiment 6: bequests on/off, transfer tax -------------------------------------------- bequests: - {name: bequests_off, kind: ss, overrides: {preferences.nu: 0.0}} - {name: bequests_half, kind: ss, overrides: {preferences.nu: 1.5}} - {name: transfer_tax_020, kind: ss, overrides: {government.tau_b: 0.20}} - {name: transfer_tax_050, kind: ss, overrides: {government.tau_b: 0.50}} - {name: bequests_off_pe, kind: ss_pe, overrides: {preferences.nu: 0.0}} # ---- Experiment 7: supply elasticity ------------------------------------------------------- supply: - {name: eps_005, kind: ss, overrides: {supply.eps: 0.05, supply.eps_r: 0.05}} - {name: eps_025, kind: ss, overrides: {supply.eps: 0.25, supply.eps_r: 0.25}} - {name: eps_050, kind: ss, overrides: {supply.eps: 0.5, supply.eps_r: 0.5}} - {name: eps_200, kind: ss, overrides: {supply.eps: 2.0, supply.eps_r: 2.0}} - {name: eps_005_theta005, kind: ss, overrides: {supply.eps: 0.05, supply.eps_r: 0.05, mortgage.theta: 0.05}} - {name: eps_005_theta040, kind: ss, overrides: {supply.eps: 0.05, supply.eps_r: 0.05, mortgage.theta: 0.40}} - {name: eps_200_theta005, kind: ss, overrides: {supply.eps: 2.0, supply.eps_r: 2.0, mortgage.theta: 0.05}} - {name: eps_200_theta040, kind: ss, overrides: {supply.eps: 2.0, supply.eps_r: 2.0, mortgage.theta: 0.40}} - {name: noseg, kind: ss, overrides: {rental.sigma_seg: 0.0}} - {name: halfseg, kind: ss, overrides: {rental.sigma_seg: 0.5}} # ---- Experiment 8: rates, rent growth, earnings risk, expectations ------------------------- sensitivity: - {name: r_001, kind: ss, overrides: {rates.r_annual: 0.01}} - {name: r_003, kind: ss, overrides: {rates.r_annual: 0.03}} - {name: pi_000, kind: ss, overrides: {rates.pi_annual: 0.00}} - {name: pi_004, kind: ss, overrides: {rates.pi_annual: 0.04}} - {name: pi_004_pe, kind: ss_pe, overrides: {rates.pi_annual: 0.04}} # Proposition 3: tilt at fixed prices - {name: phi_002, kind: ss, overrides: {rental.phi: 0.02}} - {name: phi_008, kind: ss, overrides: {rental.phi: 0.08}} - {name: sigma_low, kind: ss, overrides: {income.sigma_annual: 0.10}} - {name: sigma_high, kind: ss, overrides: {income.sigma_annual: 0.20}} - {name: rho_g_040, kind: ss, overrides: {income.rho_intergenerational: 0.40}} - {name: dep_premium_002, kind: ss, overrides: {income.dep_premium_annual: 0.02}} - {name: frm_level_static, kind: static, shock: {type: inflation, persistence: 1, contract: frm}} - {name: rent_growth_pe, kind: rent_growth_pe, overrides: {}, shock: {g_rent_annual: 0.01}} # ---- Experiment 10: robustness (see robustness.py for grid/tolerance/sample-size variants) -- robustness: - {name: beta_094, kind: ss, overrides: {preferences.beta_annual: 0.94}} - {name: beta_098, kind: ss, overrides: {preferences.beta_annual: 0.98}} - {name: gamma_3, kind: ss, overrides: {preferences.gamma: 3.0}} - {name: alpha_025, kind: ss, overrides: {preferences.alpha: 0.25}} - {name: kappa_high, kind: ss, overrides: {housing.kappa_b: 0.05, housing.kappa_s: 0.08}} - {name: kappa_low, kind: ss, overrides: {housing.kappa_b: 0.01, housing.kappa_s: 0.02}} - {name: chi_005, kind: ss, overrides: {preferences.chi: 0.05}} - {name: grid_fine, kind: ss, overrides: {grids.n_a: 80, grids.n_b: 30, grids.n_x: 180, grids.n_B: 16}} - {name: grid_coarse, kind: ss, overrides: {grids.n_a: 30, grids.n_b: 12, grids.n_x: 80, grids.n_B: 8}} - {name: tol_tight, kind: ss, overrides: {equilibrium.tol_excess: 1.0e-5, equilibrium.tol_lottery: 1.0e-4}} - {name: sample_small, kind: ss, overrides: {simulation.n_dynasties: 24000}} - {name: sample_large, kind: ss, overrides: {simulation.n_dynasties: 240000}} - {name: seed_alt, kind: ss, overrides: {meta.seed: 7}}