-
-
Notifications
You must be signed in to change notification settings - Fork 25
Open
Description
We have adopted an 80 character wide line limit for code in code-cells.
We should update the theme to ensure the 80 character width is always visible so there is no scrolling required right <-> left
Here is some example code
```{code-cell} python
class SamuelsonLSS(LinearStateSpace):
"""
This subclass creates a Samuelson multiplier-accelerator model
as a linear state space system.
"""
def __init__(self, y_0=100, y_1=50, α=0.8, β=0.9, γ=10, σ=1, g=10):
self.α, self.β = α, β
self.y_0, self.y_1, self.g = y_0, y_1, g
self.γ, self.σ = γ, σ
# Define intial conditions
self.μ_0 = [1, y_0, y_1]
self.ρ1 = α + β
self.ρ2 = -β
# Define transition matrix
self.A = [[1, 0, 0], [γ + g, self.ρ1, self.ρ2], [0, 1, 0]]
# Define output matrix
self.G = [
[γ + g, self.ρ1, self.ρ2], # this is Y_{t+1}
[γ, α, 0], # this is C_{t+1}
[0, β, -β],
] # this is I_{t+1}
self.C = np.zeros((3, 1))
self.C[1] = σ # stochastic
# Initialize LSS with parameters from Samuelson model
LinearStateSpace.__init__(self, self.A, self.C, self.G, mu_0=self.μ_0)
def plot_simulation(self, ts_length=100, stationary=True):
# Temporarily store original parameters
temp_mu = self.mu_0
temp_Sigma = self.Sigma_0
# Set distribution parameters equal to their stationary
# values for simulation
if stationary == True:
try:
self.mu_x, self.mu_y, self.Sigma_x, self.Sigma_y, self.Sigma_yx = (
self.stationary_distributions()
)
self.mu_0 = self.mu_x
self.Sigma_0 = self.Sigma_x
# Exception where no convergence achieved when
# calculating stationary distributions
except ValueError:
print("Stationary distribution does not exist")
x, y = self.simulate(ts_length)
fig, axes = plt.subplots(3, 1, sharex=True, figsize=(12, 8))
titles = ["Output ($Y_t$)", "Consumption ($C_t$)", "Investment ($I_t$)"]
colors = ["darkblue", "red", "purple"]
for ax, series, title, color in zip(axes, y, titles, colors):
ax.plot(series, color=color)
ax.set(title=title, xlim=(0, n))
ax.grid()
axes[-1].set_xlabel("Iteration")
# Reset distribution parameters to their initial values
self.mu_0 = temp_mu
self.Sigma_0 = temp_Sigma
return fig
def plot_irf(self, j=5):
x, y = self.impulse_response(j)
# Reshape into 3 x j matrix for plotting purposes
yimf = np.array(y).flatten().reshape(j + 1, 3).T
fig, axes = plt.subplots(3, 1, sharex=True, figsize=(12, 8))
labels = ["$Y_t$", "$C_t$", "$I_t$"]
colors = ["darkblue", "red", "purple"]
for ax, series, label, color in zip(axes, yimf, labels, colors):
ax.plot(series, color=color)
ax.set(xlim=(0, j))
ax.set_ylabel(label, rotation=0, fontsize=14, labelpad=10)
ax.grid()
axes[0].set_title("Impulse Response Functions")
axes[-1].set_xlabel("Iteration")
return fig
def multipliers(self, j=5):
x, y = self.impulse_response(j)
return np.sum(np.array(y).flatten().reshape(j + 1, 3), axis=0)
```that Jupyter-book converts to
<div class="cell docutils container">
<div class="cell_input docutils container">
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre id="codecell42"><span></span><span class="k">class</span><span class="w"> </span><span class="nc">SamuelsonLSS</span><span class="p">(</span><span class="n">LinearStateSpace</span><span class="p">):</span>
<span class="w"> </span><span class="sd">"""</span>
<span class="sd"> This subclass creates a Samuelson multiplier-accelerator model</span>
<span class="sd"> as a linear state space system.</span>
<span class="sd"> """</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">y_0</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">y_1</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">α</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">β</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">γ</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">σ</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">g</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">α</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">β</span> <span class="o">=</span> <span class="n">α</span><span class="p">,</span> <span class="n">β</span>
<span class="bp">self</span><span class="o">.</span><span class="n">y_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">y_1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">g</span> <span class="o">=</span> <span class="n">y_0</span><span class="p">,</span> <span class="n">y_1</span><span class="p">,</span> <span class="n">g</span>
<span class="bp">self</span><span class="o">.</span><span class="n">γ</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">σ</span> <span class="o">=</span> <span class="n">γ</span><span class="p">,</span> <span class="n">σ</span>
<span class="c1"># Define intial conditions</span>
<span class="bp">self</span><span class="o">.</span><span class="n">μ_0</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="n">y_0</span><span class="p">,</span> <span class="n">y_1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span> <span class="o">=</span> <span class="n">α</span> <span class="o">+</span> <span class="n">β</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span> <span class="o">=</span> <span class="o">-</span><span class="n">β</span>
<span class="c1"># Define transition matrix</span>
<span class="bp">self</span><span class="o">.</span><span class="n">A</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">γ</span> <span class="o">+</span> <span class="n">g</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>
<span class="c1"># Define output matrix</span>
<span class="bp">self</span><span class="o">.</span><span class="n">G</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">[</span><span class="n">γ</span> <span class="o">+</span> <span class="n">g</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ρ2</span><span class="p">],</span> <span class="c1"># this is Y_{t+1}</span>
<span class="p">[</span><span class="n">γ</span><span class="p">,</span> <span class="n">α</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="c1"># this is C_{t+1}</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">β</span><span class="p">,</span> <span class="o">-</span><span class="n">β</span><span class="p">],</span>
<span class="p">]</span> <span class="c1"># this is I_{t+1}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">C</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">C</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">σ</span> <span class="c1"># stochastic</span>
<span class="c1"># Initialize LSS with parameters from Samuelson model</span>
<span class="n">LinearStateSpace</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">A</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">C</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">G</span><span class="p">,</span> <span class="n">mu_0</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">μ_0</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">plot_simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">stationary</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="c1"># Temporarily store original parameters</span>
<span class="n">temp_mu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span>
<span class="n">temp_Sigma</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span>
<span class="c1"># Set distribution parameters equal to their stationary</span>
<span class="c1"># values for simulation</span>
<span class="k">if</span> <span class="n">stationary</span> <span class="o">==</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mu_x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_yx</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stationary_distributions</span><span class="p">()</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mu_x</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Sigma_x</span>
<span class="c1"># Exception where no convergence achieved when</span>
<span class="c1"># calculating stationary distributions</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Stationary distribution does not exist"</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulate</span><span class="p">(</span><span class="n">ts_length</span><span class="p">)</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
<span class="n">titles</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Output ($Y_t$)"</span><span class="p">,</span> <span class="s2">"Consumption ($C_t$)"</span><span class="p">,</span> <span class="s2">"Investment ($I_t$)"</span><span class="p">]</span>
<span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"darkblue"</span><span class="p">,</span> <span class="s2">"red"</span><span class="p">,</span> <span class="s2">"purple"</span><span class="p">]</span>
<span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">series</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">titles</span><span class="p">,</span> <span class="n">colors</span><span class="p">):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">series</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">,</span> <span class="n">xlim</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span>
<span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>
<span class="n">axes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"Iteration"</span><span class="p">)</span>
<span class="c1"># Reset distribution parameters to their initial values</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mu_0</span> <span class="o">=</span> <span class="n">temp_mu</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Sigma_0</span> <span class="o">=</span> <span class="n">temp_Sigma</span>
<span class="k">return</span> <span class="n">fig</span>
<span class="k">def</span><span class="w"> </span><span class="nf">plot_irf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">j</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">impulse_response</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="c1"># Reshape into 3 x j matrix for plotting purposes</span>
<span class="n">yimf</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span><span class="o">.</span><span class="n">T</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
<span class="n">labels</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"$Y_t$"</span><span class="p">,</span> <span class="s2">"$C_t$"</span><span class="p">,</span> <span class="s2">"$I_t$"</span><span class="p">]</span>
<span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"darkblue"</span><span class="p">,</span> <span class="s2">"red"</span><span class="p">,</span> <span class="s2">"purple"</span><span class="p">]</span>
<span class="k">for</span> <span class="n">ax</span><span class="p">,</span> <span class="n">series</span><span class="p">,</span> <span class="n">label</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">yimf</span><span class="p">,</span> <span class="n">labels</span><span class="p">,</span> <span class="n">colors</span><span class="p">):</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">series</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xlim</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">j</span><span class="p">))</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">labelpad</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>
<span class="n">axes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"Impulse Response Functions"</span><span class="p">)</span>
<span class="n">axes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"Iteration"</span><span class="p">)</span>
<span class="k">return</span> <span class="n">fig</span>
<span class="k">def</span><span class="w"> </span><span class="nf">multipliers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">j</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">impulse_response</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
</pre><button class="copybtn o-tooltip--left" data-tooltip="Copy" data-clipboard-target="#codecell42"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#000000" fill="none" stroke-linecap="round" stroke-linejoin="round">
<title>Copy to clipboard</title>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<rect x="8" y="8" width="12" height="12" rx="2"></rect>
<path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>
</svg></button></div>
</div>
</div>
</div>
Copilot
Metadata
Metadata
Assignees
Labels
No labels