SPB Git

spb/wp29_uqo

Public

# F5-conf-04 — VFI against the closed-form policy (log-utility optimal growth)

# Question

A planner maximises Σ β^t ln c_t subject to y_{t+1} = (y_t − c_t)^α (Cobb–Douglas, full depreciation, productivity 1). We derive the closed-form policy and value function, solve the Bellman equation numerically by value-function iteration (VFI) on the prescribed grid, and compare the two at y = 0.5, 1, 2 (policy) and y = 1 (value).

# Data and exclusions

Only data/model.csv (10 parameter rows, n_input_rows; SHA-256 checked, see out/state/data_audit.md): α = 0.36, β = 0.95, 400 grid points log-spaced on [0.05, 5] (grid_points_used = n_analysed = 400), tolerance 1e-8. No rows excluded (out/exclusions.csv). One design issue (data_issues): the evaluation points 0.5, 1, 2 are not grid nodes (log step = diag_grid_log_step ≈ 0.01154), so the VFI policy and value are linearly interpolated in ln y between adjacent nodes, as TASK.md allows. No other deviation from the prescribed design.

# Method

Closed form (guess and verify). Assumptions: log utility, Cobb–Douglas technology y' = k^α with 0<α<1, full depreciation, productivity 1, 0<β<1, interior solution 0<c<y. Guess V(y) = A + B ln y. The FOC of max_c {ln c + β(A + Bα ln(y−c))} gives 1/c = αβB/(y−c), i.e. c = y/(1+αβB). Matching the coefficient on ln y gives B = 1 + αβB ⇒ B = 1/(1−αβ), hence

c(y) = (1 − αβ) y, savings rate (y−c)/y = αβ, A = [ln(1−αβ) + (αβ/(1−αβ)) ln(αβ)] / (1−β).

With α=0.36, β=0.95: B = diag_closed_form_B ≈ 1.5198, A = diag_closed_form_A ≈ −19.524. The solution was verified numerically as a Bellman fixed point by independent continuous maximisation (out/state/checks.md, check 4). The interior solution holds for every y>0 because c/y = 1−αβ ∈ (0,1).

Contraction. The Bellman operator T satisfies Blackwell's sufficient conditions on bounded functions: monotonicity (V ≤ W ⇒ TV ≤ TW) and discounting (T(V+a) = TV + βa). Hence it is a contraction in the sup norm with modulus β (contraction_modulus = 0.95). On the finite grid with discrete choice, utility is bounded, so this applies directly to the discretised operator, guaranteeing a unique fixed point and geometric convergence from any start.

VFI. State: the 400 log-spaced y nodes. Control: next-period output y' chosen from the same grid, with consumption c = y − y'^{1/α} (infeasible pairs c ≤ 0 excluded). V_0 = 0; iterate V_{n+1}(y) = max_{y'} {ln c + β V_n(y')} until sup|V_{n+1} − V_n| < 1e-8. The policy c(y) on the grid comes from the argmax of the converged VFI (never from the closed form), then is interpolated linearly in ln y at the evaluation points. Choice-grid bounds never bind (diag_choice_bound_binds = 0). No randomness (random_seed = null). Baseline: the closed-form savings rate (baseline_savings_rate_closed_form).

# Results

y closed form c VFI c
0.5 0.3290 (c_closed_y05) 0.32882 (c_num_y05)
1.0 0.6580 (c_closed_y1) 0.65899 (c_num_y1)
2.0 1.3160 (c_closed_y2) 1.30963 (c_num_y2)
  • Maximum absolute policy discrepancy over the three points: 0.00637 units of output (max_abs_error_policy), attained at y = 2 (≈0.5% relative).
  • V(1): closed form −19.52441 (value_closed_y1), VFI −19.52476 (value_num_y1); gap ≈ 3.4e-4 utils.
  • Closed-form savings rate αβ = 0.342 (savings_rate_closed_form); the average VFI savings rate over grid nodes is 0.34202 (diag_mean_savings_rate_num_grid).
  • VFI converged in 361 iterations (n_iterations) with final sup-norm change 9.997e-9 (final_sup_change) < 1e-8.
  • Over all grid nodes: max |V_num − V_closed| = 4.8e-4 (diag_max_abs_value_error_grid), max |c_num − c_closed| = 0.0251 (diag_max_abs_policy_error_grid).

# Uncertainty

The problem is deterministic; there is no sampling uncertainty. The only errors are numerical: (i) stopping error: by the contraction property, ‖V_n − V*_grid‖ ≤ β/(1−β)·final_sup_change ≈ 1.9e-7 (diag_stopping_error_bound), negligible relative to (ii); (ii) discretisation error: the control y' is restricted to grid nodes (log step ≈ 0.0115), so the chosen y' can be off by up to half a step in ln y', which shifts consumption by roughly (k/α)·Δln y'/2 — growing with y (hence the largest error at y = 2 and the larger grid-wide max at high y); plus linear interpolation error between nodes at the evaluation points. The value function is much more accurate than the policy (envelope/first-order-condition argument: value errors are second order in policy errors).

# Limitations and open issues

  • Scope of the validation: one parameter point (α=0.36, β=0.95), one grid (400 log-spaced points on [0.05, 5]), discrete choice on the same grid, linear interpolation in ln y. The discrepancy figures are specific to this design; they would shrink with a finer grid or a continuous-choice (interpolated) maximisation, which were not run because they are not part of the prescribed design.
  • Policy errors at the evaluation points partly reflect where 0.5, 1, 2 fall between grid nodes (they are not nodes; see data_issues); the reported errors are not monotone in y for that reason.
  • The closed form relies on log utility, Cobb–Douglas output, full depreciation and productivity normalised to one; it does not extend to partial depreciation or CRRA ≠ 1.
Files · main
Menu

Theme