<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><blockquote>
<p>do it best , economy and management.<br>
Author : Daniel tulips liu .<br>
University : Renmin Universtiy of China.<br>
Copyright © heerburk</p>
</blockquote>
<h2 id="a-dsge-model-use-python">A DSGE Model use Python</h2>
<p>我了显示的格式更美观,必须要打字一部分,占用帖子的前面部分。<br>
很久没有能发 MARKDOWN 格式的帖子了,<br>
没想到今天又能发;</p>
<p>挺不错的。</p>
<p>嘿嘿。</p>
<p><mark>OLG DSGE Model</mark></p>
<h2 id="codes">codes</h2>
<pre class=" language-c"><code class="prism language-c"># <span class="token operator">-</span><span class="token operator">*</span><span class="token operator">-</span> coding<span class="token punctuation">:</span> utf<span class="token number">-8</span> <span class="token operator">-</span><span class="token operator">*</span><span class="token operator">-</span>
<span class="token string">""</span>"
Created on Fri Dec <span class="token number">11</span> <span class="token number">11</span><span class="token punctuation">:</span><span class="token number">16</span><span class="token punctuation">:</span><span class="token number">54</span> <span class="token number">2020</span>
@author<span class="token punctuation">:</span> heerburk
OLG_simple_VI<span class="token punctuation">.</span>py
simple value function iteration <span class="token keyword">for</span> the optimization paper with Alfred Maussner
you may need to adjust the load path <span class="token keyword">for</span> the excel file <span class="token function">below</span> <span class="token punctuation">(</span>line <span class="token number">20</span><span class="token punctuation">)</span>
<span class="token string">""</span>"
<span class="token macro property"># Part 1: import libraries </span>
import pandas as pd
import numpy as np
import quantecon as qe
from scipy<span class="token punctuation">.</span>stats import norm
import time
import math
<span class="token macro property"># abbreviations </span>
exp <span class="token operator">=</span> np<span class="token punctuation">.</span>e
log <span class="token operator">=</span> math<span class="token punctuation">.</span>log
<span class="token macro property"># Part 2: Import data </span>
data <span class="token operator">=</span> pd<span class="token punctuation">.</span><span class="token function">read_excel</span> <span class="token punctuation">(</span>r<span class="token string">'C:\Users\Administrator\Desktop\upen_jesusfv 2021\python_chapter10_heer_maussner_dsge\survival_probs.xlsx'</span><span class="token punctuation">)</span>
df <span class="token operator">=</span> pd<span class="token punctuation">.</span><span class="token function">Datafr ame</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> columns<span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'sp1'</span><span class="token punctuation">,</span><span class="token string">'ef'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token macro property">#print(df) </span>
arr <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">array</span><span class="token punctuation">(</span>df<span class="token punctuation">)</span>
<span class="token macro property">#print(arr) </span>
sp1 <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span>
ef <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span><span class="token number">45</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">]</span>
<span class="token macro property">#print(ef) </span>
<span class="token macro property"># Part 3: Parameterization of the model </span>
<span class="token macro property"># demographics </span>
nage<span class="token operator">=</span><span class="token number">70</span> # maximum age nw<span class="token operator">=</span><span class="token number">45</span> # number of working years Rage<span class="token operator">=</span><span class="token number">46</span> # first period of retirement nr<span class="token operator">=</span>nage<span class="token operator">-</span>Rage<span class="token operator">+</span><span class="token number">1</span> # number of retirement years
popgrowth0 <span class="token operator">=</span> <span class="token number">0.0075400000</span> # preferences
b<span class="token operator">=</span><span class="token number">1.011</span> # discount factor sigma<span class="token operator">=</span><span class="token number">2.0</span> # coefficient of relative risk aversion hbar<span class="token operator">=</span><span class="token number">0.3</span> # fixed shift length mu0<span class="token operator">=</span><span class="token number">123</span> # disutility of labor
mu1<span class="token operator">=</span><span class="token number">0.5</span> # Frisch elasticity of labor supply
averagehours<span class="token operator">=</span><span class="token number">0.3</span> # average number of working hours to calibrate mu0
<span class="token macro property"># production </span>
r<span class="token operator">=</span><span class="token number">0.04</span> # initial value of the interest <span class="token function">rate</span> <span class="token punctuation">(</span>in order to compute kbar<span class="token punctuation">)</span>
alp<span class="token operator">=</span><span class="token number">0.36</span> # production elasticity of capital delta<span class="token operator">=</span><span class="token number">0.06</span> # rate of depreciation
<span class="token macro property"># productivity of workers </span>
lamb0<span class="token operator">=</span><span class="token punctuation">.</span><span class="token number">96</span> # autoregressive parameter sigmay1<span class="token operator">=</span><span class="token number">0.38</span> # variance <span class="token keyword">for</span> <span class="token number">20</span><span class="token operator">-</span>year old<span class="token punctuation">,</span> log earnings <span class="token operator">*</span><span class="token operator">/</span>
sigmae<span class="token operator">=</span><span class="token number">0.045</span> # earnings disturbance term variance <span class="token operator">*</span><span class="token operator">/</span>
ny<span class="token operator">=</span><span class="token number">5</span> # number of productivity types
m<span class="token operator">=</span><span class="token number">2</span> # width of the productivity grid
<span class="token macro property"># parameters of the algorighm </span>
psi1<span class="token operator">=</span><span class="token number">0.0001</span> # parameter of utility function <span class="token keyword">for</span> zero or negative consumption
update_agg<span class="token operator">=</span><span class="token number">0.8</span> # parameter <span class="token keyword">for</span> the update of initial values
nq<span class="token operator">=</span><span class="token number">50</span> # maximum number of iterations to find a solution
tol<span class="token operator">=</span><span class="token number">0.001</span> # percentage deviation of final solution
<span class="token macro property"># grids </span>
kmin<span class="token operator">=</span><span class="token number">0</span> # inidividual wealth
kmax<span class="token operator">=</span><span class="token number">20</span> # upper limit of capital grid na<span class="token operator">=</span><span class="token number">100</span> # number of grid points over assets a in <span class="token punctuation">[</span>kmin<span class="token punctuation">,</span>kmax<span class="token punctuation">]</span>
a <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">linspace</span><span class="token punctuation">(</span>kmin<span class="token punctuation">,</span> kmax<span class="token punctuation">,</span> na<span class="token punctuation">)</span> # asset grid emin<span class="token operator">=</span><span class="token number">0</span> # individual cumulated earnings
emax<span class="token operator">=</span><span class="token number">3</span>
nce<span class="token operator">=</span><span class="token number">20</span> # number of grid points on cumulated earnings
e <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">linspace</span><span class="token punctuation">(</span>emin<span class="token punctuation">,</span> emax<span class="token punctuation">,</span> nce<span class="token punctuation">)</span> # grid over cumulated earnings
labormin<span class="token operator">=</span><span class="token number">0</span>
labormax<span class="token operator">=</span><span class="token number">0.7</span> # maximum labor supply
nlabor<span class="token operator">=</span><span class="token number">100</span>
lgrid<span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">linspace</span><span class="token punctuation">(</span>labormin<span class="token punctuation">,</span> labormax<span class="token punctuation">,</span> nlabor<span class="token punctuation">)</span> # grid over labor supply
ymin<span class="token operator">=</span><span class="token number">0</span>
ymax<span class="token operator">=</span><span class="token number">4</span>
nin<span class="token operator">=</span><span class="token number">100</span>
incomegrid <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">linspace</span><span class="token punctuation">(</span>ymin<span class="token punctuation">,</span> ymax<span class="token punctuation">,</span> nin<span class="token punctuation">)</span> # grid <span class="token keyword">for</span> gross income
<span class="token macro property"># measure of living persons </span>
mass <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">ones</span><span class="token punctuation">(</span>nage<span class="token punctuation">)</span>
<span class="token keyword">for</span> i in <span class="token function">range</span><span class="token punctuation">(</span>nage<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token function">print</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span>
mass<span class="token punctuation">[</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span>mass<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">*</span>sp1<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span>popgrowth0<span class="token punctuation">)</span>
mass <span class="token operator">=</span> mass <span class="token operator">/</span> mass<span class="token punctuation">.</span><span class="token function">sum</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token macro property"># compute productivity grid </span>
sy <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span>sigmae<span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>lamb0<span class="token operator">*</span><span class="token operator">*</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> # earnings variance x0<span class="token operator">=</span><span class="token number">1</span> nsim<span class="token operator">=</span><span class="token number">10</span>
ye <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">linspace</span><span class="token punctuation">(</span><span class="token operator">-</span>m<span class="token operator">*</span>sy<span class="token punctuation">,</span> m<span class="token operator">*</span>sy<span class="token punctuation">,</span> ny<span class="token punctuation">)</span>
ye1 <span class="token operator">=</span> exp<span class="token operator">*</span><span class="token operator">*</span>ye
<span class="token macro property"># transition matrix using Tauchen's approximation </span>
<span class="token macro property"># return is a class 'Markov Chain' </span>
mc <span class="token operator">=</span> qe<span class="token punctuation">.</span>markov<span class="token punctuation">.</span>approximation<span class="token punctuation">.</span><span class="token function">tauchen</span><span class="token punctuation">(</span>lamb0<span class="token punctuation">,</span> sigmae<span class="token punctuation">,</span> <span class="token number">0.0</span><span class="token punctuation">,</span> m<span class="token punctuation">,</span> ny<span class="token punctuation">)</span>
<span class="token macro property"># transition matrix is stored in ob ject 'PÄ </span>
py <span class="token operator">=</span> mc<span class="token punctuation">.</span>P
<span class="token macro property"># mass of the workers </span>
muy <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token punctuation">(</span>nw<span class="token punctuation">,</span>ny<span class="token punctuation">)</span><span class="token punctuation">)</span>
w <span class="token operator">=</span> ye<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">-</span>ye<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token macro property"># first year mass distribution </span>
muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> norm<span class="token punctuation">.</span><span class="token function">cdf</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>ye<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">+</span>w<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">/</span>np<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span>sigmay1<span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">*</span> mass<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>ny<span class="token number">-1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">-</span>norm<span class="token punctuation">.</span><span class="token function">cdf</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>ye<span class="token punctuation">[</span>ny<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">-</span>w<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">/</span>np<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span>sigmay1<span class="token punctuation">)</span><span class="token punctuation">)</span>
muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>ny<span class="token number">-1</span><span class="token punctuation">]</span> <span class="token operator">=</span> muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>ny<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">*</span>mass<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">for</span> i in <span class="token function">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span>ny<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token function">print</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span>
muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span> norm<span class="token punctuation">.</span><span class="token function">cdf</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>ye<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">+</span>w<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">/</span>np<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span>sigmay1<span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">-</span>
norm<span class="token punctuation">.</span><span class="token function">cdf</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>ye<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span>w<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">/</span>np<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span>sigmay1<span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span>
muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> muy<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>i<span class="token punctuation">]</span><span class="token operator">*</span>mass<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">for</span> i in <span class="token function">range</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span>nw<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token function">print</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span>
muy<span class="token punctuation">[</span>i<span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token operator">=</span> muy<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span> @ py <span class="token operator">*</span> sp1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span>popgrowth0<span class="token punctuation">)</span>
<span class="token macro property"># initial guess for aggregate effective labor supply </span>
temp <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">transpose</span><span class="token punctuation">(</span>muy<span class="token operator">*</span>ye1<span class="token punctuation">)</span> <span class="token operator">*</span> ef
nbar <span class="token operator">=</span> temp<span class="token punctuation">.</span><span class="token function">sum</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> hbar <span class="token operator">/</span> <span class="token function">sum</span><span class="token punctuation">(</span>mass<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span>nw<span class="token punctuation">]</span><span class="token punctuation">)</span>
xmat <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span>nq<span class="token punctuation">)</span><span class="token punctuation">)</span> # stores initial values at each iteration q
<span class="token macro property"># initial guesses </span>
kbar <span class="token operator">=</span> <span class="token punctuation">(</span>alp<span class="token operator">/</span><span class="token punctuation">(</span>r<span class="token operator">+</span>delta<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">*</span>nbar
wage <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span><span class="token operator">*</span>kbar<span class="token operator">*</span><span class="token operator">*</span>alp <span class="token operator">*</span> nbar<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token operator">-</span>alp<span class="token punctuation">)</span>
tau <span class="token operator">=</span> <span class="token number">0.068</span><span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span> # pensions in the US are <span class="token number">6.8</span> of GDP in <span class="token number">2012</span><span class="token punctuation">,</span> since wage income <span class="token function">is</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alpha<span class="token punctuation">)</span><span class="token operator">*</span>GDP<span class="token punctuation">,</span> <span class="token number">6.8</span><span class="token operator">%</span><span class="token operator">/</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span> provides an initial guess
tau <span class="token operator">=</span> <span class="token number">0.124</span> # social security tax in the US <span class="token number">2020</span> trbar <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">mean</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>sp1<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span>nage<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">*</span> kbar # proxy of accidental bequests
<span class="token macro property"># part 4: definition of the functions </span>
#
<span class="token macro property"># wage function </span>
def <span class="token function">wage_rate</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span>l<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span> <span class="token operator">*</span> k<span class="token operator">*</span><span class="token operator">*</span>alp <span class="token operator">*</span> l<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token operator">-</span>alp<span class="token punctuation">)</span>
<span class="token macro property"># interest rate function </span>
def <span class="token function">interest_rate</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span>l<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> alp <span class="token operator">*</span> k<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span>alp <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">*</span> l<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span> <span class="token operator">-</span> delta
<span class="token macro property"># utility function # I changed this: only if c.le.0, a small amout is added @ </span>
def <span class="token function">u</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token punctuation">:</span>
x1 <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>x<span class="token operator"><=</span><span class="token number">0</span><span class="token punctuation">,</span> psi1<span class="token punctuation">,</span> x<span class="token punctuation">)</span> # replace negative values by psi1
<span class="token keyword">if</span> sigma<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token function">log</span><span class="token punctuation">(</span>x1<span class="token punctuation">)</span> <span class="token operator">-</span> mu0<span class="token operator">*</span>y<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token operator">/</span>mu1<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token operator">/</span>mu1<span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> x1<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>sigma<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>sigma<span class="token punctuation">)</span> <span class="token operator">-</span>mu0<span class="token operator">*</span>y<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token operator">/</span>mu1<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token operator">/</span>mu1<span class="token punctuation">)</span>
<span class="token macro property"># pension schedule </span>
<span class="token macro property"># see Huggett and Parra (2010, JPE)def pension(x): </span>
bendpoint1 <span class="token operator">=</span> <span class="token number">0.20</span><span class="token operator">*</span>meanincome
bendpoint2 <span class="token operator">=</span> <span class="token number">1.24</span><span class="token operator">*</span>meanincome
bmin <span class="token operator">=</span> penmin
<span class="token keyword">if</span> x<span class="token operator"><</span>bendpoint1<span class="token punctuation">:</span>
y <span class="token operator">=</span> bmin<span class="token operator">+</span><span class="token number">0.9</span><span class="token operator">*</span>x
elif x<span class="token operator">>=</span>bendpoint1 and x<span class="token operator"><=</span>bendpoint2<span class="token punctuation">:</span>
y <span class="token operator">=</span> bmin <span class="token operator">+</span> <span class="token number">0.9</span><span class="token operator">*</span>bendpoint1 <span class="token operator">+</span> <span class="token number">0.32</span><span class="token operator">*</span><span class="token punctuation">(</span>x<span class="token operator">-</span>bendpoint1<span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
y <span class="token operator">=</span> bmin<span class="token operator">+</span> <span class="token number">0.9</span><span class="token operator">*</span>bendpoint1 <span class="token operator">+</span> <span class="token number">0.32</span><span class="token operator">*</span><span class="token punctuation">(</span>bendpoint2<span class="token operator">-</span>bendpoint1<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">0.15</span><span class="token operator">*</span><span class="token punctuation">(</span>x<span class="token operator">-</span>bendpoint2<span class="token punctuation">)</span>
<span class="token keyword">return</span> y
<span class="token macro property"># computes the gini for distribution where x has measure g(x) def ginid(x,gy,ng): </span>
x <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>x<span class="token operator"><=</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> x<span class="token punctuation">)</span>
xmean <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">dot</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>gy<span class="token punctuation">)</span>
<span class="token macro property"># y = np.c_[x,gy] </span>
<span class="token macro property"># sorting according to first column still has to be implemented# y0 = np.sort(y,axis=0) </span>
<span class="token macro property"># x = y0[:,0] </span>
<span class="token macro property"># g = y0[:,1] </span>
g <span class="token operator">=</span> gy
f <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span>ng<span class="token punctuation">)</span> # accumulated frequency <span class="token operator">*</span><span class="token operator">/</span>
f<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> g<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">*</span>x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">/</span>xmean
gini <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">-</span> f<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">*</span> g<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">for</span> i in <span class="token function">range</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span>ng<span class="token punctuation">)</span><span class="token punctuation">:</span>
f<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> f<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span> <span class="token operator">+</span> g<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">*</span>x<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">/</span>xmean
gini <span class="token operator">=</span> gini <span class="token operator">-</span> <span class="token punctuation">(</span>f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">+</span>f<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">*</span>g<span class="token punctuation">[</span>i<span class="token punctuation">]</span>
<span class="token keyword">return</span> gini
start_time <span class="token operator">=</span> time<span class="token punctuation">.</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token macro property"># part 5: main program </span>
<span class="token macro property"># outer loop </span>
q<span class="token operator">=</span><span class="token number">0</span>
crit <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">+</span>tol
<span class="token keyword">while</span> q<span class="token operator"><</span>nq and crit<span class="token operator">></span>tol<span class="token punctuation">:</span>
<span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"q: "</span> <span class="token operator">+</span> <span class="token function">str</span><span class="token punctuation">(</span>q<span class="token punctuation">)</span><span class="token punctuation">)</span>
xmat<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span>q<span class="token punctuation">]</span> <span class="token operator">=</span> kbar
xmat<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span>q<span class="token punctuation">]</span> <span class="token operator">=</span> nbar
xmat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span>q<span class="token punctuation">]</span> <span class="token operator">=</span> tau
xmat<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span>q<span class="token punctuation">]</span> <span class="token operator">=</span> trbar
<span class="token macro property"># compute variables derived from (kbar,nbar,tau,trbar) </span>
<span class="token macro property"># required for the computation of decision rules </span>
wage <span class="token operator">=</span> <span class="token function">wage_rate</span><span class="token punctuation">(</span>kbar<span class="token punctuation">,</span> nbar<span class="token punctuation">)</span>
rate <span class="token operator">=</span> <span class="token function">interest_rate</span><span class="token punctuation">(</span>kbar<span class="token punctuation">,</span> nbar<span class="token punctuation">)</span>
ybar<span class="token operator">=</span>kbar<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span>alp<span class="token punctuation">)</span> <span class="token operator">*</span> nbar<span class="token operator">*</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>alp<span class="token punctuation">)</span> # produciton
meanincome<span class="token operator">=</span>wage<span class="token operator">*</span>nbar <span class="token operator">/</span> np<span class="token punctuation">.</span><span class="token function">sum</span><span class="token punctuation">(</span>mass<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span>nw<span class="token punctuation">]</span><span class="token punctuation">)</span> # average earnings of the workers
penmin<span class="token operator">=</span><span class="token number">0.1242</span><span class="token operator">*</span>ybar # minimum pension
start_time1 <span class="token operator">=</span> time<span class="token punctuation">.</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span> # time to compute decision rules
<span class="token macro property"># initialization of agents' value function: retired households </span>
vr <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token punctuation">(</span>na<span class="token operator">*</span>nce<span class="token punctuation">,</span>nr<span class="token punctuation">)</span><span class="token punctuation">)</span> # value function
aropt <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token punctuation">(</span>na<span class="token operator">*</span>nce<span class="token punctuation">,</span>nr<span class="token punctuation">)</span><span class="token punctuation">)</span> # optimal asset
cropt <span class="token operator">=</span> np<span class="token punctuation">.</span><span class="token function">zeros</span><span class="token punctuation">(</span><span class="token punctuation">(</span>na<span class="token operator">*</span>nce<span class="token punctuation">,</span>nr<span class="token punctuation">)</span><span class="token punctuation">)</span> # optimal consumption
k0 <span class="token operator">=</span> <span class="token number">0</span> # initialization of workers
k1 <span class="token operator">=</span> <span class="token number">0</span> # current assets and cumulated earnings<span class="token punctuation">,</span>
e0 <span class="token operator">=</span> <span class="token number">0</span> # next<span class="token operator">-</span>period assets and
e1 <span class="token operator">=</span> <span class="token number">0</span> # cumulated earnings
</code></pre>
<h1 id="enjoy">Enjoy</h1>
<p><strong>Yours</strong> Daniel Tulips Liu</p>
<p>Renmin University of China , Beijing.</p>
</div>
</div>