diff --git a/Development/nohablo/PensionRetirementModel.ipynb b/Development/nohablo/PensionRetirementModel.ipynb index caf0dfb..a526b7f 100644 --- a/Development/nohablo/PensionRetirementModel.ipynb +++ b/Development/nohablo/PensionRetirementModel.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 106, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -128,7 +128,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -157,7 +157,7 @@ " 'description': 'normalized (n)et retirement balance'}]" ] }, - "execution_count": 110, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -182,7 +182,7 @@ " 'description': 'normalized pension deposit'}]" ] }, - "execution_count": 111, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -193,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -201,16 +201,16 @@ "text/plain": [ "[{'name': 'perm',\n", " 'description': 'permanent income shock',\n", - " 'distribution': },\n", + " 'distribution': },\n", " {'name': 'tran',\n", " 'description': 'transitory income shock',\n", - " 'distribution': },\n", + " 'distribution': },\n", " {'name': 'risky',\n", " 'description': 'risky asset return',\n", - " 'distribution': }]" + " 'distribution': }]" ] }, - "execution_count": 112, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -228,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -237,7 +237,7 @@ "['expectation', 'deposit', 'consumption']" ] }, - "execution_count": 113, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -255,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -271,13 +271,13 @@ " 'description': 'normalized pension (k)apital before income'}],\n", " 'distributions': [{'name': 'perm',\n", " 'description': 'permanent income shock',\n", - " 'distribution': },\n", + " 'distribution': },\n", " {'name': 'tran',\n", " 'description': 'transitory income shock',\n", - " 'distribution': },\n", + " 'distribution': },\n", " {'name': 'risky',\n", " 'description': 'risky asset return',\n", - " 'distribution': }],\n", + " 'distribution': }],\n", " 'parameters': ['CRRA',\n", " 'Rfree',\n", " 'PermGroFac',\n", @@ -285,14 +285,14 @@ " 'std_tran',\n", " 'mean_risky',\n", " 'std_risky'],\n", - " 'equations': {'objective': ['v(jNrm, kNrm) = PermAdj^(1-CRRA) * w(mNrm, nNrm)'],\n", + " 'equations': {'value': 'v(jNrm, kNrm) = PermAdj^(1-CRRA) * w(mNrm, nNrm)',\n", " 'transitions': ['mNrm = Rfree * jNrm / PermAdj + tran',\n", " 'nNrm = risky * kNrm / PermAdj'],\n", " 'definitions': ['PermAdj = PermGroFac * perm',\n", " 'Rport = (Rfree * jNrm + risky * kNrm) / (jNrm + kNrm)']}}" ] }, - "execution_count": 114, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -310,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -328,12 +328,12 @@ " 'domain': [0.0, 'mNrm'],\n", " 'description': 'normalized pension deposit'}],\n", " 'parameters': ['chi'],\n", - " 'equations': {'objective': ['v(mNrm, nNrm) = w(lNrm, bNrm)'],\n", + " 'equations': {'value': 'v(mNrm, nNrm) = w(lNrm, bNrm)',\n", " 'transitions': ['lNrm = mNrm - dNrm', 'bNrm = nNrm + dNrm + g(dNrm)'],\n", " 'definitions': ['g(dNrm) = chi * log(dNrm + 1)']}}" ] }, - "execution_count": 115, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -352,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -370,13 +370,13 @@ " 'domain': [0.0, 'lNrm'],\n", " 'description': 'normalized consumption'}],\n", " 'parameters': ['CRRA', 'DiscFac', 'LivPrb'],\n", - " 'equations': {'objective': ['v(lNrm, bNrm) = u(cNrm) + beta * w(aNrm, bNrm)'],\n", + " 'equations': {'value': 'v(lNrm, bNrm) = u(cNrm) + beta * w(aNrm, bNrm)',\n", " 'transitions': ['aNrm = lNrm - cNrm'],\n", " 'definitions': ['u(cNrm) = cNrm ** (1 - CRRA) / (1 - CRRA)',\n", " 'beta = DiscFac * LivPrb']}}" ] }, - "execution_count": 116, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -402,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -424,16 +424,16 @@ "\n", "\n", "def parse_block(block):\n", - " objective = parse_eq(block[\"equations\"][\"objective\"][0])\n", + " value = parse_eq(block[\"equations\"][\"value\"])\n", " transitions = [parse_eq(eq) for eq in block[\"equations\"][\"transitions\"]]\n", " definitions = [parse_eq(eq) for eq in block[\"equations\"][\"definitions\"]]\n", "\n", - " return objective, transitions, definitions\n", + " return value, transitions, definitions\n", "\n", "\n", "def subs_eq_lr(eq, substitutes):\n", " eq = eq.doit()\n", - " # Substitute transitions and definitions into objective\n", + " # Substitute transitions and definitions into value\n", " for subs_eq in substitutes:\n", " eq = eq.subs(subs_eq.lhs, subs_eq.rhs)\n", "\n", @@ -442,7 +442,7 @@ "\n", "def subs_eq_rl(eq, substitutes):\n", " eq = eq.doit()\n", - " # Substitute transitions and definitions into objective\n", + " # Substitute transitions and definitions into value\n", " for subs_eq in substitutes:\n", " eq = eq.subs(subs_eq.rhs, subs_eq.lhs)\n", "\n", @@ -451,7 +451,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -463,19 +463,19 @@ "v(m, n) = w(l, b)" ] }, - "execution_count": 118, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "objective_eq, transitions_eqs, definitions_eqs = parse_block(deposit_block)\n", - "objective_eq\n" + "value_eq, transitions_eqs, definitions_eqs = parse_block(deposit_block)\n", + "value_eq\n" ] }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -487,17 +487,17 @@ "v(m, n) = w(-d + m, χ⋅log(d + 1) + d + n)" ] }, - "execution_count": 119, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "objective_eq = subs_eq_lr(objective_eq, transitions_eqs)\n", - "objective_eq = subs_eq_lr(objective_eq, definitions_eqs)\n", + "value_eq = subs_eq_lr(value_eq, transitions_eqs)\n", + "value_eq = subs_eq_lr(value_eq, definitions_eqs)\n", "\n", "# Simplify the final equation\n", - "final_eq = simplify(objective_eq)\n", + "final_eq = simplify(value_eq)\n", "\n", "final_eq" ] @@ -511,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -525,7 +525,7 @@ "∂m ∂l " ] }, - "execution_count": 120, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -539,7 +539,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -553,7 +553,7 @@ "∂n ∂b " ] }, - "execution_count": 121, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -574,7 +574,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -592,7 +592,7 @@ " ⎠│ξ₁=-d + m" ] }, - "execution_count": 122, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -604,33 +604,33 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\frac{\\chi \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }} - \\left. \\partial_{\\xi_{1}} w(\\xi_{1}, \\chi \\log{\\left(d + 1 \\right)} + d + n) \\right|_{\\substack{ \\xi_{1}=- d + m }} + \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }}}{\\left. \\partial_{\\xi_{1}} w(\\xi_{1}, \\chi \\log{\\left(d + 1 \\right)} + d + n) \\right|_{\\substack{ \\xi_{1}=- d + m }} - \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }}}$" + "$\\displaystyle \\frac{- \\chi \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }} + \\left. \\partial_{\\xi_{1}} w(\\xi_{1}, \\chi \\log{\\left(d + 1 \\right)} + d + n) \\right|_{\\substack{ \\xi_{1}=- d + m }} - \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }}}{- \\left. \\partial_{\\xi_{1}} w(\\xi_{1}, \\chi \\log{\\left(d + 1 \\right)} + d + n) \\right|_{\\substack{ \\xi_{1}=- d + m }} + \\left. \\partial_{\\xi_{2}} w(- d + m, \\xi_{2}) \\right|_{\\substack{ \\xi_{2}=\\chi \\log{\\left(d + 1 \\right)} + d + n }}}$" ], "text/plain": [ - " ⎛ ∂ ⎞│ ⎛ ∂ \n", - "χ⋅⎜───(w(-d + m, ξ₂))⎟│ - ⎜───(w(ξ₁, χ⋅log(d + 1) + d +\n", - " ⎝∂ξ₂ ⎠│ξ₂=χ⋅log(d + 1) + d + n ⎝∂ξ₁ \n", + " ⎛ ∂ ⎞│ ⎛ ∂ \n", + "- χ⋅⎜───(w(-d + m, ξ₂))⎟│ + ⎜───(w(ξ₁, χ⋅log(d + 1) + d\n", + " ⎝∂ξ₂ ⎠│ξ₂=χ⋅log(d + 1) + d + n ⎝∂ξ₁ \n", "──────────────────────────────────────────────────────────────────────────────\n", - " ⎛ ∂ ⎞│ ⎛ ∂ \n", - " ⎜───(w(ξ₁, χ⋅log(d + 1) + d + n))⎟│ - ⎜───(w(\n", - " ⎝∂ξ₁ ⎠│ξ₁=-d + m ⎝∂ξ₂ \n", + " ⎛ ∂ ⎞│ ⎛ ∂ \n", + " - ⎜───(w(ξ₁, χ⋅log(d + 1) + d + n))⎟│ + ⎜───(\n", + " ⎝∂ξ₁ ⎠│ξ₁=-d + m ⎝∂ξ₂ \n", "\n", - " ⎞│ ⎛ ∂ ⎞│ \n", - " n))⎟│ + ⎜───(w(-d + m, ξ₂))⎟│ \n", - " ⎠│ξ₁=-d + m ⎝∂ξ₂ ⎠│ξ₂=χ⋅log(d + 1) + d + n\n", - "──────────────────────────────────────────────────────────────\n", - " ⎞│ \n", - "-d + m, ξ₂))⎟│ \n", - " ⎠│ξ₂=χ⋅log(d + 1) + d + n " + " ⎞│ ⎛ ∂ ⎞│ \n", + " + n))⎟│ - ⎜───(w(-d + m, ξ₂))⎟│ \n", + " ⎠│ξ₁=-d + m ⎝∂ξ₂ ⎠│ξ₂=χ⋅log(d + 1) + d + n\n", + "────────────────────────────────────────────────────────────────\n", + " ⎞│ \n", + "w(-d + m, ξ₂))⎟│ \n", + " ⎠│ξ₂=χ⋅log(d + 1) + d + n " ] }, - "execution_count": 123, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -643,7 +643,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -662,7 +662,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -680,7 +680,7 @@ " ∂b ∂l " ] }, - "execution_count": 125, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -698,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -710,19 +710,19 @@ "v(l, b) = β⋅w(a, b) + u(c)" ] }, - "execution_count": 126, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "objective_eq, transitions_eqs, definitions_eqs = parse_block(consumption_block)\n", - "objective_eq\n" + "value_eq, transitions_eqs, definitions_eqs = parse_block(consumption_block)\n", + "value_eq\n" ] }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -737,17 +737,17 @@ " ρ - 1 " ] }, - "execution_count": 127, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "objective_eq = subs_eq_lr(objective_eq, transitions_eqs)\n", - "objective_eq = subs_eq_lr(objective_eq, definitions_eqs)\n", + "value_eq = subs_eq_lr(value_eq, transitions_eqs)\n", + "value_eq = subs_eq_lr(value_eq, definitions_eqs)\n", "\n", "# Simplify the final equation\n", - "final_eq = simplify(objective_eq)\n", + "final_eq = simplify(value_eq)\n", "\n", "final_eq" ] @@ -761,7 +761,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -775,7 +775,7 @@ "∂l ∂a " ] }, - "execution_count": 128, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -789,7 +789,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -803,7 +803,7 @@ "∂b ∂b " ] }, - "execution_count": 129, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -824,7 +824,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -841,7 +841,7 @@ " ρ - 1 " ] }, - "execution_count": 130, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -853,7 +853,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -870,7 +870,7 @@ "╲╱ ⎝∂ξ₁ ⎠│ξ₁=-c + l " ] }, - "execution_count": 131, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -883,7 +883,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -902,7 +902,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -919,7 +919,7 @@ " ╲╱ ∂a " ] }, - "execution_count": 133, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -930,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -947,7 +947,7 @@ "╲╱ ∂a " ] }, - "execution_count": 134, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } diff --git a/Development/nohablo/cis.yml b/Development/nohablo/cis.yml new file mode 100644 index 0000000..3ba0d42 --- /dev/null +++ b/Development/nohablo/cis.yml @@ -0,0 +1,81 @@ +model: ConsIndShockModel +author: Alan Lujan +affiliation: + - Johns Hopkins University + - Econ-ARK +date: 12/15/2023 +abstract: Consumption-Savings Model with Idiosyncratic Income Shocks + +symbols: + states: + - name: aNrm + domain: [0.0, inf] + description: normalized (a)ssets after consumption + - name: mNrm + domain: [0.0, inf] + description: normalized (m)arket resources + - name: kNrm + domain: [0.0, inf] + description: normalized (k)apital after income + + controls: + - name: cNrm + domain: [0.0, mNrm] + description: normalized (c)onsumption + + distributions: + - name: perm + description: permanent shock to income + distribution: !MeanOneLogNormal + std: sigma_psi + - name: tran + description: transitory shock to income + distribution: !MeanOneLogNormal + std: sigma_tsi + + parameters: [CRRA, DiscFac, LivPrb, PermGroFac, Rfree] + +equations: + value: v(m) = u(c) + beta * v_alt(a) + transitions: + - a = m - c + - k = Rfree * a / PermAdj + tran + definitions: + - PermAdj = PermGroFac * perm + - v_alt(a) = PermAdj^(1-CRRA) * w(k) + - beta = DiscFac * LivPrb + - u(c) = c^(1-CRRA) / (1-CRRA) + +links: w(k) = v(a) # how to connect this problem to a subsequent problem + +options: + repeat: .inf + tolerance: 0.001 + + calibration: + - CRRA: 2.0 + - DiscFac: 0.96 + - LivPrb: 0.99 + - PermGroFac: 1.01 + - Rfree: 1.03 + - sigma_psi: 0.1 + - sigma_tsi: 0.1 + + grids: &grids # this is a quick way to parametrize all grids + min: 1e-6 + max: 100 + size: 100 + spacing: log + + states: + aNrm: *grids + mNrm: *grids + kNrm: *grids + + approx: &approx # this is a quick way to parametrize all distributions + size: 7 + method: gauss-hermite + + distributions: + perm: *approx + tran: *approx diff --git a/Development/nohablo/ret_pen copy.yml b/Development/nohablo/ret_pen copy.yml new file mode 100644 index 0000000..43dbfb0 --- /dev/null +++ b/Development/nohablo/ret_pen copy.yml @@ -0,0 +1,185 @@ +model: Consumption-Pension Deposit Model +author: Alan Lujan +date: 12/13/2023 +affiliation: + - Johns Hopkins University + - Econ-ARK + +--- +name: working + +states: + - &aNrm + name: aNrm + domain: [0.0, inf] + - &bNrm + name: bNrm + domain: [0.0, inf] + - &jNrm + name: jNrm + domain: [0.0, inf] + - &kNrm + name: kNrm + domain: [0.0, inf] + - &lNrm + name: lNrm + domain: [0.0, inf] + - &mNrm + name: mNrm + domain: [0.0, inf] + - &nNrm + name: nNrm + domain: [0.0, inf] + +controls: + - &cNrm + name: cNrm + domain: [0.0, lNrm] + - &dNrm + name: dNrm + domain: [0.0, mNrm] + +distributions: # exogenous section defining the kind of shocks which drive the model + - &perm + name: perm + distribution: !MeanOneLogNormal + std: std_perm + - &tran + name: tran + distribution: !MeanOneLogNormal + std: std_tran + - &risky + name: risky + distribution: !LogNormal + mean: mean_risky + std: std_risky + +blocks: + - name: expectation + states: [*jNrm, *kNrm] + distributions: [*perm, *tran, *risky] + parameters: + [CRRA, Rfree, PermGroFac, std_perm, std_tran, mean_risky, std_risky] + equations: + value: v(jNrm, kNrm) = PermAdj^(1-CRRA) * w(mNrm, nNrm) + transitions: + - mNrm = Rfree * jNrm / PermAdj + tran + - nNrm = risky * kNrm / PermAdj + definitions: + - PermAdj = PermGroFac * perm + - Rport = (Rfree * jNrm + risky * kNrm) / (jNrm + kNrm) + + - name: deposit + states: [*mNrm, *nNrm] + controls: [*dNrm] + parameters: [chi] + equations: + value: v(mNrm, nNrm) = w(lNrm, bNrm) + transitions: + - lNrm = mNrm - dNrm + - bNrm = nNrm + dNrm + g(dNrm) + definitions: + - g(dNrm) = chi * log(dNrm + 1) + + - name: consumption + states: [*lNrm, *bNrm] + controls: [*cNrm] + parameters: [CRRA, DiscFac, LivPrb] + equations: + value: v(lNrm, bNrm) = u(cNrm) + beta * w(aNrm, bNrm) + transitions: + - aNrm = lNrm - cNrm + definitions: + - u(cNrm) = cNrm ** (1 - CRRA) / (1 - CRRA) + - beta = DiscFac * LivPrb + +links: + block: # links between blocks, determines what w(aNrm, bNrm) means in the last block (consumption) + - w(aNrm, bNrm) = v(jNrm, kNrm) + lifecycle: # links between lifecycle blocks (stages), determines what w(aNrm, bNrm) means in the last block (consumption) given the first block of the next life stage + - w(aNrm, bNrm) = v(aNrm + bNrm) + +calibration: + DiscFac: 0.96 + CRRA: 2.0 + LivPrb: 0.99 + Rfree: 1.03 + PermGroFac: 1.01 + chi: 0.1 + std_perm: 0.1 + std_tran: 0.1 + mean_risky: 1.08 + std_risky: 0.2 + +options: + repeat: 20 # repeated 20 times given above calibration means the same values are used 20 times + + grids: &grids # this is a quick way to parametrize all grids + min: 1e-6 + max: 100 + size: 100 + spacing: log + + states: + aNrm: *grids + bNrm: *grids + lNrm: *grids + + approx: &approx # this is a quick way to parametrize all distributions + size: 7 + method: gauss-hermite + + distributions: + perm: *approx + tran: *approx + std_risky: + size: 3 + method: gauss-hermite + +--- +name: retirement + +states: + - &mNrm + name: mNrm + domain: [0.0, inf] + +controls: + - &cNrm + name: cNrm + domain: [0.0, mNrm] + +equations: + value: v(mNrm) = u(cNrm) + beta * w(mNrm') + transitions: + - aNrm = mNrm - cNrm + - mNrm' = Rfree * aNrm + 1 + definitions: + - u(cNrm) = cNrm ** (1 - CRRA) / (1 - CRRA) + - beta = DiscFac * LivPrb + +links: + terminal: + - w(mNrm) = u(mNrm) + block: + - w(mNrm') = v(mNrm) + definitions: + - u(mNrm) = mNrm ** (1 - CRRA) / (1 - CRRA) + +calibration: + DiscFac: 0.96 + CRRA: 2.0 + Rfree: 1.03 + LivPrb: 0.99 + +options: + repeat: 9 + + grids: &grids + min: 1e-6 + max: 100 + size: 100 + spacing: log + + states: + mNrm: *grids diff --git a/Development/nohablo/ret_pen.yml b/Development/nohablo/ret_pen.yml index 175514b..3a50348 100644 --- a/Development/nohablo/ret_pen.yml +++ b/Development/nohablo/ret_pen.yml @@ -82,8 +82,7 @@ blocks: parameters: [CRRA, Rfree, PermGroFac, std_perm, std_tran, mean_risky, std_risky] equations: - objective: - - v(jNrm, kNrm) = PermAdj^(1-CRRA) * w(mNrm, nNrm) + value: v(jNrm, kNrm) = PermAdj^(1-CRRA) * w(mNrm, nNrm) transitions: - mNrm = Rfree * jNrm / PermAdj + tran - nNrm = risky * kNrm / PermAdj @@ -97,8 +96,7 @@ blocks: controls: [*dNrm] parameters: [chi] equations: - objective: - - v(mNrm, nNrm) = w(lNrm, bNrm) + value: v(mNrm, nNrm) = w(lNrm, bNrm) transitions: - lNrm = mNrm - dNrm - bNrm = nNrm + dNrm + g(dNrm) @@ -111,8 +109,7 @@ blocks: controls: [*cNrm] parameters: [CRRA, DiscFac, LivPrb] equations: - objective: - - v(lNrm, bNrm) = u(cNrm) + beta * w(aNrm, bNrm) + value: v(lNrm, bNrm) = u(cNrm) + beta * w(aNrm, bNrm) transitions: - aNrm = lNrm - cNrm definitions: @@ -179,8 +176,7 @@ controls: description: normalized consumption equations: - objective: - - v(mNrm) = u(cNrm) + beta * w(mNrm') + value: v(mNrm) = u(cNrm) + beta * w(mNrm') transitions: - aNrm = mNrm - cNrm - mNrm' = Rfree * aNrm + 1