Skip to content

Period, Nest, and Calibration

Period Template

The five stages are wired by namespace matching — the branching stage's branch-keyed poststates match successor stages' prestate fields by name.

name: HousingTenurePeriod

stages:
  - tenure_choice: !stage         # branching: own vs rent
  - owner_housing: !stage         # own path: discrete H' choice
  - owner_cons: !stage            # own path: consumption (EGM)
  - renter_housing: !stage        # rent path: discrete S choice
  - renter_cons: !stage           # rent path: consumption (EGM)
Connection Namespace fields
tenure_choice.ownowner_housing (a_o, H_o, y_o) match by name
tenure_choice.rentrenter_housing (w_r, y_r) match by name
owner_housingowner_cons (w_oc, H_nxt, y_o) match by name
renter_housingrenter_cons (w_rc, S, y_r) match by name

Nest Structure

Every time slot uses the same period template. Both terminal stages produce poststates that map to the arrival \((a, H, y_{\text{pre}})\) via the same inter-period connector. Renters carry \(H_r = 0\), so no constant assignment is needed in the connector.

Period[0] ──▶ Period[1] ──▶ ... ──▶ Period[T-1] ──▶ terminal
name: HousingTenureLifecycle

periods:
  - housing_period: !period    # index 0
  - housing_period: !period    # index 1
  # ... (repeat for T periods)
  - terminal: !period          # index T

inter_connectors:
  - {b_o: a, H_nxt: H, y_o: y_pre, b_r: a, H_r: H, y_r: y_pre}
  - {b_o: a, H_nxt: H, y_o: y_pre, b_r: a, H_r: H, y_r: y_pre}
  # ... (one per period boundary)

The connector maps both owner and renter exits to the same arrival perch: \(b_o \to a\), \(H_{\text{nxt}} \to H\) (owner), \(b_r \to a\), \(H_r \to H\) (renter, with \(H_r = 0\)).

Calibration

Following Fella (2014):

calibration:
  # Preferences
  beta: 0.93           # discount factor
  gamma: 2.0           # CRRA risk aversion
  rho: 0.58            # CES elasticity (0 → Cobb-Douglas)
  theta: 0.77          # consumption weight
  kappa: 0.075         # housing service scale
  iota: 0.01           # housing service shift
  # Prices
  r: 0.06              # interest rate
  phi: 0.07            # housing transaction cost
  P_r: 0.1             # rental price per unit
  # Housing grid (defines XH — these are parameters, not settings)
  n_H: 7
  H_min: 0.0
  H_max: 5.0
  # Rental grid (defines XS)
  n_S: 7
  S_min: 0.0
  S_max: 5.0
  # Income process
  n_y: 48
  Pi: !include Pi_matrix.yaml
  z_vals: !include z_vals.yaml
  # Horizon
  T: 20

settings:
  # Asset grids (numerical approximation — settings, not parameters)
  n_w: 500             # owner cash-on-hand grid
  w_min: 1.0e-10
  w_max: 50.0
  n_w_rent: 500        # renter cash-on-hand grid
  w_rent_min: 1.0e-10
  w_rent_max: 50.0
  # FUES
  m_bar: 1.0           # jump detection threshold (owner)
  m_bar_rent: 1.0      # jump detection threshold (renter)

Key Points

  • Five stages, two branches, CES utility. The branching stage (tenure_choice) fans out to owner and renter paths, each comprising a discrete housing choice followed by continuous consumption.
  • FUES on both consumption stages. The discrete housing/rental grid creates non-concavities in the value function; FUES cleans the upper envelope on both paths. The CES inverse Euler requires numerical inversion.
  • Uniform inter-period connector. The renter consumption stage outputs \(H_r = 0\) explicitly, so both owner and renter exits map to the same arrival \((a, H, y_{\text{pre}})\) via one connector dict — no constant assignment needed.