全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1352 0
2021-04-04
<!-- 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">2&#48;2&#48;</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">2&#48;</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 2&#48;21\python_chapter1&#48;_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">&#48;</span><span class="token punctuation">]</span>  
ef <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token number">&#48;</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">7&#48;</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  
popgrowth&#48; <span class="token operator">=</span> <span class="token number">&#48;.&#48;&#48;754&#48;&#48;&#48;&#48;&#48;</span> # preferences  
b<span class="token operator">=</span><span class="token number">1.&#48;11</span> # discount factor sigma<span class="token operator">=</span><span class="token number">2.&#48;</span> # coefficient of relative risk aversion hbar<span class="token operator">=</span><span class="token number">&#48;.3</span> # fixed shift length mu&#48;<span class="token operator">=</span><span class="token number">123</span> # disutility of labor  
mu1<span class="token operator">=</span><span class="token number">&#48;.5</span> # Frisch elasticity of labor supply  
averagehours<span class="token operator">=</span><span class="token number">&#48;.3</span> # average number of working hours to calibrate mu&#48;  
  
<span class="token macro property"># production  </span>
r<span class="token operator">=</span><span class="token number">&#48;.&#48;4</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">&#48;.36</span> # production elasticity of capital delta<span class="token operator">=</span><span class="token number">&#48;.&#48;6</span> # rate of depreciation   
<span class="token macro property"># productivity of workers  </span>
lamb&#48;<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">&#48;.38</span> # variance <span class="token keyword">for</span> <span class="token number">2&#48;</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">&#48;.&#48;45</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">&#48;.&#48;&#48;&#48;1</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">&#48;.8</span> # parameter <span class="token keyword">for</span> the update of initial values  
nq<span class="token operator">=</span><span class="token number">5&#48;</span> # maximum number of iterations to find a solution  
  
tol<span class="token operator">=</span><span class="token number">&#48;.&#48;&#48;1</span> # percentage deviation of final solution   
<span class="token macro property"># grids  </span>
kmin<span class="token operator">=</span><span class="token number">&#48;</span> # inidividual wealth  
kmax<span class="token operator">=</span><span class="token number">2&#48;</span> # upper limit of capital grid na<span class="token operator">=</span><span class="token number">1&#48;&#48;</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">&#48;</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">2&#48;</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">&#48;</span>  
labormax<span class="token operator">=</span><span class="token number">&#48;.7</span> # maximum labor supply  
nlabor<span class="token operator">=</span><span class="token number">1&#48;&#48;</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">&#48;</span>  
ymax<span class="token operator">=</span><span class="token number">4</span>  
nin<span class="token operator">=</span><span class="token number">1&#48;&#48;</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>popgrowth&#48;<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>lamb&#48;<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 x&#48;<span class="token operator">=</span><span class="token number">1</span> nsim<span class="token operator">=</span><span class="token number">1&#48;</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>lamb&#48;<span class="token punctuation">,</span> sigmae<span class="token punctuation">,</span> <span class="token number">&#48;.&#48;</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">&#48;</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">&#48;</span><span class="token punctuation">,</span><span class="token number">&#48;</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">&#48;</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">&#48;</span><span class="token punctuation">]</span>  
muy<span class="token punctuation">[</span><span class="token number">&#48;</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">&#48;</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">&#48;</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">&#48;</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">&#48;</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">&#48;</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">&#48;</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">&#48;</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>popgrowth&#48;<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">&#48;</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">&#48;.&#48;68</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">2&#48;12</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">&#48;.124</span> # social security tax in the US <span class="token number">2&#48;2&#48;</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">&#48;</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.&#48;, 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">&lt;=</span><span class="token number">&#48;</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> mu&#48;<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>mu&#48;<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 (2&#48;1&#48;, JPE)def pension(x):     </span>
    bendpoint1 <span class="token operator">=</span> <span class="token number">&#48;.2&#48;</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">&lt;</span>bendpoint1<span class="token punctuation">:</span>  
        y <span class="token operator">=</span> bmin<span class="token operator">+</span><span class="token number">&#48;.9</span><span class="token operator">*</span>x  
    elif x<span class="token operator">&gt;=</span>bendpoint1 and x<span class="token operator">&lt;=</span>bendpoint2<span class="token punctuation">:</span>  
        y <span class="token operator">=</span> bmin <span class="token operator">+</span> <span class="token number">&#48;.9</span><span class="token operator">*</span>bendpoint1 <span class="token operator">+</span> <span class="token number">&#48;.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">&#48;.9</span><span class="token operator">*</span>bendpoint1 <span class="token operator">+</span> <span class="token number">&#48;.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">&#48;.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">&lt;=</span><span class="token number">&#48;</span><span class="token punctuation">,</span> <span class="token number">&#48;</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#    y&#48; = np.sort(y,axis=&#48;)  </span>
<span class="token macro property">#    x = y&#48;[:,&#48;]  </span>
<span class="token macro property">#    g = y&#48;[:,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">&#48;</span><span class="token punctuation">]</span> <span class="token operator">=</span> g<span class="token punctuation">[</span><span class="token number">&#48;</span><span class="token punctuation">]</span><span class="token operator">*</span>x<span class="token punctuation">[</span><span class="token number">&#48;</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">&#48;</span><span class="token punctuation">]</span> <span class="token operator">*</span> g<span class="token punctuation">[</span><span class="token number">&#48;</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">&#48;</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">&lt;</span>nq and crit<span class="token operator">&gt;</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">&#48;</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">&#48;</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">&#48;.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   
  k&#48; <span class="token operator">=</span> <span class="token number">&#48;</span> # initialization of workers  
  k1 <span class="token operator">=</span> <span class="token number">&#48;</span> # current assets and cumulated earnings<span class="token punctuation">,</span>  
  e&#48; <span class="token operator">=</span> <span class="token number">&#48;</span> # next<span class="token operator">-</span>period assets and   
e1 <span class="token operator">=</span> <span class="token number">&#48;</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>
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群