diff --git a/10_Data_Fluctuation.ipynb b/10_Data_Fluctuation.ipynb index a4102a5b..68afe76c 100644 --- a/10_Data_Fluctuation.ipynb +++ b/10_Data_Fluctuation.ipynb @@ -1669,7 +1669,7 @@ "hidden": true }, "source": [ - "一方,政府支出の値は負であり,景気循環をコントロールしようとする政府の政策の現れと解釈できる。GDPのトレンドからの乖離が負の場合、景気対策として政府支出を増やし傾向にある。また、GDPの乖離が正であれば、経済のオーバーヒート(インフレの発生)することを避けるために政府支出を減少させると理解できる。\n", + "一方,政府支出の値は負であり,景気循環をコントロールしようとする政府の政策の現れと解釈できる。GDPのトレンドからの乖離が負の場合、景気対策として政府支出を増やし傾向にある。また、GDPの乖離が正であれば、経済のオーバーヒート(インフレの発生)を避けるために政府支出を減少させると理解できる。\n", "\n", "一方、値が小さいのは,時間的なラグがあるためだと思われる。景気に関するデータを集計するには数ヶ月かかり,国会審議や支出の実行にも時間を取られることになる。この点を確認するために,`Series`のメソッド`.shift()`を使って相関係数を再計算してみよう。" ] @@ -1715,7 +1715,7 @@ "hidden": true }, "source": [ - "GDPの乖離は`3`四半期先の政府支出との相関係数が最大となっている。景気循環に対する政府の姿勢が確認できる一方,政府の対応には長いの時間が掛かることを示す結果となっている。" + "GDPの乖離は`3`四半期先の政府支出との相関係数が最大となっている。景気循環に対する政府の姿勢が確認できる一方,政府の対応は長いの時間が掛かることを示す結果となっている。" ] }, { diff --git a/11_Macro_Variables.ipynb b/11_Macro_Variables.ipynb index 27ff7461..24cdc014 100644 --- a/11_Macro_Variables.ipynb +++ b/11_Macro_Variables.ipynb @@ -539,8 +539,7 @@ { "cell_type": "markdown", "metadata": { - "heading_collapsed": true, - "jp-MarkdownHeadingCollapsed": true + "heading_collapsed": true }, "source": [ "## フィリップス曲線" @@ -709,8 +708,7 @@ "cell_type": "markdown", "metadata": { "heading_collapsed": true, - "hidden": true, - "jp-MarkdownHeadingCollapsed": true + "hidden": true }, "source": [ "### フラット化するフィリップス曲線" @@ -902,7 +900,7 @@ "color_lst = ['orange','black', 'blue', 'red'] #1\n", "\n", "#2\n", - "ax = df.head(0).plot(x='unemployment_rate', y='inflation', legend=False)\n", + "ax = df.head(0).plot(legend=False)\n", "\n", "for d, c in zip(decade_lst, color_lst):\n", " \n", @@ -978,15 +976,17 @@ "A mathematician, a theoretical economist and an econometrician are asked to find a black cat (who doesn't really exist) in a closed room with the lights off: \n", "* The mathematician (数学者) gets crazy trying to find a black cat that doesn't exist inside the darkened room and ends up in a psychiatric hospital. \n", "* The theoretical economist (理論経済学者) is unable to catch the black cat that doesn't exist inside the darkened room, but exits the room proudly proclaiming that he can construct a model to describe all his movements with extreme accuracy. \n", - "* The econometrician (計量経済学者,特に経済データを用いて実証研究をする学者) walks securely into the darkened room, spend one hour looking for the black cat that doesn't exits and shouts from inside the room that he has it catched by the neck.\" \n", + "* The econometrician (計量経済学者,特に経済データを用いて実証研究をする学者) walks securely into the darkened room, spend one hour looking for the black cat that doesn't exits and shouts from inside the room that he has it catched by the neck.\n", "\n", - "[経済学のジョークのGoogle検索結果](https://www.google.co.jp/search?q=economics+jokes)\n", + "[経済学のジョークのGoogle検索結果](https://www.google.com/search?q=economics+jokes)\n", "```" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## インフレ率とマネーストックの増加率" ] diff --git a/7_DifferenceEq.ipynb b/7_DifferenceEq.ipynb index 536946c8..998c3c8b 100644 --- a/7_DifferenceEq.ipynb +++ b/7_DifferenceEq.ipynb @@ -57,8 +57,7 @@ { "cell_type": "markdown", "metadata": { - "heading_collapsed": true, - "jp-MarkdownHeadingCollapsed": true + "heading_collapsed": true }, "source": [ "## 1階差分方程式" @@ -68,7 +67,8 @@ "cell_type": "markdown", "metadata": { "heading_collapsed": true, - "hidden": true + "hidden": true, + "jp-MarkdownHeadingCollapsed": true }, "source": [ "### 説明" @@ -103,7 +103,7 @@ "&=a^2(ax_{t-2}+b)+b(1+a)=a^3x_{t-2}+b(1+a+a^2) \\\\\n", "&=a^3(ax_{t-3}+b)+b(1+a+a^2)=a^4x_{t-3}+b(1+a+a^2+a^3) \\\\\n", "&\\qquad\\vdots \\\\\n", - "&=a^{t+1}x_0+b\\sum_{i=0}^ta^t\n", + "&=a^{t+1}x_0+b\\sum_{i=0}^ta^i\n", "\\end{align*}\n", "$$" ] @@ -119,8 +119,8 @@ "$t\\rightarrow\\infty$とすると($x_0\\ne 0$)\n", "* $a=1$の場合\n", " * $b=0$の場合,$x_t$は同じ値$x_0$にとどまる。\n", - " * $b>0$の場合,$b\\sum_{i=0}^ta^t\\rightarrow\\infty$となり$x_t$は発散する。\n", - " * $b<0$の場合,$b\\sum_{i=0}^ta^t\\rightarrow-\\infty$となり$x_t$は発散する。\n", + " * $b>0$の場合,$b\\sum_{i=0}^ta^i=b(1+t)\\rightarrow\\infty$となり$x_t$は発散する。\n", + " * $b<0$の場合,$b\\sum_{i=0}^ta^i=b(1+t)\\rightarrow-\\infty$となり$x_t$は発散する。\n", "* $a=-1$の場合\n", " * $b$の値に関わらず,$x_t$は振動する。\n", "* $a>1$の場合,$a^{t+1}\\rightarrow\\infty$となり$x_t$は正の無限大に発散する。\n", @@ -170,9 +170,11 @@ "hidden": true }, "source": [ - "$$\n", - "x_{t+1}=0.4x_{t}+3\n", - "$$ (eq:8-1)\n", + "* 初期値:$x_0=1$\n", + "\n", + " $$\n", + " x_{t+1}=0.4x_{t}+3\n", + " $$ (eq:8-1)\n", "\n", "* $0.4<1$なため収束することが分かる。\n", "* 定常状態は次の値となる。\n", @@ -244,13 +246,13 @@ "source": [ "x = 1 # 1\n", "\n", - "x_list = [x] # 2\n", + "x_lst = [x] # 2\n", "\n", "for i in range(20):\n", " \n", " x = 0.4 * x + 3 # 3\n", " \n", - " x_list.append(x) # 4" + " x_lst.append(x) # 4" ] }, { @@ -262,7 +264,7 @@ "```{admonition} コードの説明\n", ":class: dropdown\n", "\n", - "1. `x`はアップデート用の変数として設定するために初期値を1とする。\n", + "1. `x`はアップデート用の変数として使う。初期値は1。\n", "2. 初期値が入ったリストであり、このリストに計算結果を追加する。\n", "3. 来期の`x`の計算\n", " * 1回目のループ:右辺では(1)で設定した`x`の初期値を使い計算し,結果を左辺の`x`に割り当てる。この時点で,(1)の`x`は(3)の左辺の`x`と同じ変数なので,同じ計算結果が割り当てられアップデートされる。\n", @@ -294,7 +296,7 @@ }, "outputs": [], "source": [ - "df = pd.DataFrame({'X':x_list})\n", + "df = pd.DataFrame({'X':x_lst})\n", "\n", "df.head()" ] @@ -326,7 +328,7 @@ "hidden": true }, "source": [ - "この図の縦軸は$x_t$であり,小数点になっているが横軸はループの回数となる(自動表示なので整数となる場合もある)。強制的に横軸に整数を表示したい場合は`df.plot()`の代わりに次のコードを使えば良いだろう。\n", + "この図の縦軸は$x_t$であり,横軸は行インデックスが`float`として表示されており,ループの回数と同じ(自動表示なので整数となる場合もある)。強制的に横軸に整数を表示したい場合は`df.plot()`の代わりに次のコードを使えば良いだろう。\n", "```\n", "ax_ = df.plot()\n", "ax_.set_xticks(range(21))\n", @@ -367,15 +369,15 @@ }, "outputs": [], "source": [ - "x_list = [1] # 1\n", + "x_lst = [1] # 1\n", "\n", "for i in range(20):\n", " \n", - " x = 0.4 * x_list[i] + 3 # 2\n", + " x = 0.4 * x_lst[i] + 3 # 2\n", " \n", - " x_list.append(x) # 3\n", + " x_lst.append(x) # 3\n", "\n", - "pd.DataFrame({'X':x_list}).plot()\n", + "pd.DataFrame({'X':x_lst}).plot()\n", "pass" ] }, @@ -430,7 +432,7 @@ " \n", " arr[i+1] = 0.4 * arr[i] + 3 # 4\n", "\n", - "pd.DataFrame({'X':x_list}).plot()\n", + "pd.DataFrame({'X':arr}).plot()\n", "pass" ] }, @@ -500,15 +502,15 @@ "source": [ "x = 1.1 # 初期値 x0\n", "\n", - "x_list = [x]\n", + "x_lst = [x]\n", "\n", "for i in range(50):\n", " \n", " x = 1.2 * x - 0.2\n", " \n", - " x_list.append(x)\n", + " x_lst.append(x)\n", "\n", - "pd.DataFrame({'X':x_list}).plot()\n", + "pd.DataFrame({'X':x_lst}).plot()\n", "pass" ] }, @@ -532,7 +534,7 @@ "x_{t+1}=ax_{t}^{0.5},\\quad x_t>0,\\;a>0\n", "$$ (eq:8-ex3)\n", "\n", - "この式は上の例と違って非線形の差分方程式となっている。しかし数値計算のための`Python`コードに関しては大きな違いはない。単に,コードの中で非線形の式を書くだけで良い。しかし収束か発散かの安定性(stability)を解析的に確認するには,定常状態の**近傍**を考える必要がある。基本的なアイデアは次のようなものである。定常状態に非常に近い周辺を考えよう。十分に定常状態に近ければ、非線形差分方程式は線形に非常に近くなる。例えば、地球は丸いが、その上で暮らす小さな人間にとって大きな地球は平らに感じる。これは無意識に線形近似を行なっているのと同じである。この考えを使い、非線形差分方程式を定常状態の周りで線形近似することで,あたかも線形の様に考えて安定性を確認できる。手法としてはテイラー展開を使い線形近似する。\n", + "この式は上の例と違って非線形の差分方程式となっている。しかし,数値計算のための`Python`コードに関しては大きな違いはない。単に,コードの中で非線形の式を書くだけで良い。しかし収束か発散かの安定性(stability)を解析的に確認するには,定常状態の**近傍**を考える必要がある。基本的なアイデアは次のようなものである。定常状態に非常に近い周辺を考えよう。十分に定常状態に近ければ、非線形差分方程式は線形に非常に近くなる。例えば、地球は丸いが、その上で暮らす小さな人間にとって大きな地球は平らに感じる。これは無意識に線形近似を行なっているのと同じである。この考えを使い、非線形差分方程式を定常状態の周りで線形近似することで,あたかも線形の様に考えて安定性を確認できる。手法としてはテイラー展開を使い線形近似する。\n", "\n", "<テイラー展開による1次線形近似>\n", "* 関数$y=f(k)$を$k_{*}$でテイラー展開すると次式となる。\n", @@ -569,7 +571,17 @@ "\\end{align*}\n", "$$\n", "\n", - "となる。$0.5<1$なので収束することが確認できた。図示すると{numref}`fig:8-ex3`の様になる。" + "となる。$0.5<1$なので収束することが確認できた。また,定常状態も次のように計算できる。\n", + "\n", + "$$\n", + "x_{*}=0.5x_{*}+0.5a^2\n", + "\\quad\n", + "\\Rightarrow\n", + "\\quad\n", + "x_{*}=a^2\n", + "$$\n", + "\n", + "図示すると{numref}`fig:8-ex3`の様になる。" ] }, { @@ -587,6 +599,144 @@ "```" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "差分方程式が**45度線近傍で増加関数**の場合はもっと簡単な判定方法がある。\n", + "> 縦軸に$x_{t+1}$,横軸に$x_t$の図で差分方程式が45度線と\n", + "> * 「上から交差」する場合,$x_t$は定常値へ収束する(定常状態は安定的)\n", + "> * 「下から交差」する場合,$x_t$は発散する(定常状態は不安定)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$a=2$としてコードを書いて実行してみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "x = 3.5 # 初期値 x0\n", + "\n", + "x_lst = [x]\n", + "\n", + "for i in range(20):\n", + " \n", + " x = 2 * x ** 0.5\n", + " \n", + " x_lst.append(x)\n", + "\n", + "pd.DataFrame({'X':x_lst}).plot()\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "heading_collapsed": true, + "hidden": true + }, + "source": [ + "### 例4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次の非線形差分方程式を考えてみよう。\n", + "\n", + "$$\n", + "x_{t+1}=a * x_{t}^{b} + 10,\n", + "\\qquad x_t>0,\n", + "\\quad a\\ne 0,\n", + "\\quad b\\ne 0\n", + "$$\n", + "\n", + "数値計算をせずとも,$01$のケースをプロットしてみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "my_dynamics(x0=40, a=1, b=1.1, n=15).plot(marker='o')\n", + "pass" + ] + }, { "cell_type": "markdown", "metadata": { @@ -658,7 +808,7 @@ }, "outputs": [], "source": [ - "def model45(y0,a,b,d,f,n=10):\n", + "def model45(y0, a, b, d, f, n=10):\n", " \"\"\"引数 #1\n", " y0: GDPの初期値\n", " a: 所得に依存しない消費\n", @@ -671,18 +821,18 @@ " \n", " y = y0 #2\n", " \n", - " y_list = [y0] #3\n", + " y_lst = [y0] #3\n", "\n", " for i in range(n):\n", " \n", " y = y * f / (1-b) + (a+d) / (1-b) # 4\n", - " y_list.append(y) # 5\n", + " y_lst.append(y) # 5\n", "\n", " yss = (a+d) / (1-b-f) # 6\n", " \n", " print(f'定常状態での産出量:{yss:.1f}') # 7\n", " \n", - " return pd.DataFrame({'output':y_list}) # 8" + " return pd.DataFrame({'output':y_lst}) # 8" ] }, { @@ -859,29 +1009,30 @@ }, "outputs": [], "source": [ - "def cobweb(p0,a,b,c,d,n=10):\n", + "def cobweb(p0, a, b, c, d, n=10):\n", " \"\"\"引数\n", " p0: 初期値\n", " a: 需要曲線の切片\n", " b: 需要曲線の傾き\n", " c: 供給曲線の切片\n", " d: 供給曲線の傾き\n", + " n: ループ計算の回数\n", " 返り値:\n", " 価格と量のDataFrame\n", " \"\"\"\n", " \n", " p = p0 # 初期の価格\n", " \n", - " q_list = []\n", - " p_list = []\n", + " q_lst = []\n", + " p_lst = []\n", "\n", " for i in range(n):\n", " \n", " p = (a+c) / b - (d/b) * p\n", " q = a - b * p\n", "\n", - " q_list.append(q)\n", - " p_list.append(p)\n", + " q_lst.append(q)\n", + " p_lst.append(p)\n", "\n", " # 定常状態\n", " pss = (a+c) / (b+d)\n", @@ -889,7 +1040,7 @@ " \n", " print(f'定常状態での価格:{pss:.1f}\\n定常状態での量: {qss:.1f}')\n", " \n", - " dic = {'output':q_list, 'price':p_list}\n", + " dic = {'output':q_lst, 'price':p_lst}\n", " return pd.DataFrame(dic)" ] },