diff --git a/10_Data_Fluctuation.ipynb b/10_Data_Fluctuation.ipynb index 191181d3..e8f11342 100644 --- a/10_Data_Fluctuation.ipynb +++ b/10_Data_Fluctuation.ipynb @@ -5,7 +5,7 @@ "metadata": {}, "source": [ "(chap:10-gdp)=\n", - "# GDPと失業及びトレンド" + "# マクロ変数とトレンド" ] }, { @@ -231,18 +231,37 @@ "ここで$g_x$の値は,例えば`0.02`(`2%`)のような値となる。この式の両辺に対数を取り,近似を使うと次のように書き直すことができる。\n", "\n", "$$\n", - "\\log(1+g_x)=\\log(x_{t+1})-\\log(x_{t})\n", - "$$\n", + "\\begin{aligned}\n", + "\\log(1+g_x)&=\\log(x_{t+1})-\\log(x_{t})\\\\\n", + "&\\Downarrow\\text{左辺を近似}\\;\\log(1+g_x)\\approx g_x\\\\\n", + "g_x&\\approx\\log(x_{t+1})-\\log(x_{t})\n", + "\\end{aligned}\n", + "$$ (eq:10-log-growth)\n", + "\n", + "`x`の成長率である$g_x$は,`x`の対数の差分ということになる。即ち,縦軸に`x`の対数,横軸に時間をおけば,プロットの傾きは`x`の成長率と等しいことになる。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この特徴は、`1`期(ここでは`1`四半期)のみに有効なことではなく、`2`期以上を考える場合も有効である。`n`期間における平均成長率を$g_x$と置くと次式が成立する。\n", "\n", "$$\n", - "\\qquad\\qquad\\quad\\Downarrow\\text{左辺を近似}\\;\\log(1+g_x)\\approx g_x\n", + "(1+g_x)^n=\\frac{x_{t+n}}{x_{t}}\n", "$$\n", "\n", + "両辺に対数を取り,近似を使うと次のように書き直すことができる。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "n\\log(1+g_x)&=\\log(x_{t+n})-\\log(x_{t})\\\\\n", + "&\\Downarrow\\\\\n", + "g_x&\\approx\\frac{\\log(x_{t+n})-\\log(x_{t})}{n}\n", + "\\end{aligned}\n", "$$\n", - "g_x\\approx\\log(x_{t+1})-\\log(x_{t})\n", - "$$ (eq:10-log-growth)\n", "\n", - "`x`の成長率である$g_x$は,`x`の対数の差分ということになる。即ち,縦軸に`x`の対数,横軸に時間をおけば,プロットの傾きは`x`の成長率と等しいことになる。\n", + "右辺は`n`期間の平均成長率となる。従って、縦軸に`x`の対数がある場合、複数期間にまたがって直線を書いた場合、その傾きが平均成長率と等しい事になる。\n", "\n", "では実際にプロットしよう。" ] @@ -500,14 +519,14 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "## 失業率" + "## 失業率とインフレ率" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "次に失業のデータをプロットしてみよう。" + "次に失業率とインフレ率のデータをプロットしてみよう。" ] }, { @@ -516,14 +535,18 @@ "metadata": {}, "outputs": [], "source": [ - "df.plot(y='unemployment_rate', title='失業率(%)')" + "cols = ['inflation', 'unemployment_rate']\n", + "df.plot(y=cols, subplots=True)\n", + "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "1995年頃から2015年頃の約`20`年間は、その前後と比較して高い値になっている。\n", + "インフレ率(年率)は,バブル崩壊後は`4`%以下の低い率をキープし、デフレに陥った期間も長く続いた。\n", + "\n", + "失業率に関して述べると、1995年頃から2015年頃の約`20`年間は、その前後と比較して高い値になっている。\n", "2002年第3四半期の一つ目のピークは`5.43`%であり、バブル崩壊の影響によるものである。就職氷河期と呼ばれる期間である。\n", "2009年第3四半期の二つ目のピークはリーマンショックによる影響であり、同じ`5.43`%である。\n", "2020年第4四半期にも`3.07`%のピークがあるが、コロナ感染症に端を発している。\n", @@ -1317,14 +1340,16 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "### GDPとの相関度" + "## 変動の相関度" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ - "#### 復習" + "### 復習" ] }, { @@ -1332,7 +1357,7 @@ "metadata": {}, "source": [ "`2`つのランダム変数$X_i$と$Y_i$, $i=1,2,3,\\cdots,n$を考えよう。\n", - "`2`変数の不偏分散は次のように定義される。\n", + "`2`変数の**不偏分散**は次のように定義される。\n", "\n", "$$\n", "\\sigma_{X}^2=\\frac{1}{n-1}\\sum_{i=1}^{n}\n", @@ -1342,14 +1367,22 @@ "\\left(Y_i-\\overline{Y}\\right)^2\n", "$$\n", "\n", - "ここで$\\overline{X}$と$\\overline{Y}$は平均を表し、それぞれの標準偏差は$\\sigma_{X}$と$\\sigma_{Y}$となる。\n", + "ここで$\\overline{X}$と$\\overline{Y}$は平均を表し、それぞれの**標準偏差**は\n", + "\n", + "$$\n", + "\\sigma_{X},\n", + "\\quad\n", + "\\sigma_{Y}\n", + "$$\n", + "\n", + "となる。\n", "\n", "ここでは`2`変数の相関度を考えたい訳だが、その尺度として共分散が使われ、次のように定義される。\n", "\n", "$$\n", "\\sigma_{XY}=\\frac{1}{n-1}\\sum_{i=1}^{n}\n", "\\left(X_i-\\overline{X}\\right)\\left(Y_i-\\overline{Y}\\right)\n", - "$$\n", + "$$ (eq:10-covariance)\n", "\n", "次の解釈となる。\n", "* $\\sigma_{XY}=0$:無相関\n", @@ -1364,7 +1397,7 @@ "\\sigma_{YY}=\\sigma_{Y}^2,\n", "$$\n", "\n", - "別々の`2`変数を使うことにより共分散を計算することができるが、その`2`変数が同じな場合(`X`と`X`の`2`変数もしくは`Y`と`Y`の`2`変数)は分散となる。" + "別々の`2`変数を使うことにより共分散を計算することができるが、その`2`変数が同じ変数となる場合(`X`と`X`の`2`変数もしくは`Y`と`Y`の`2`変数)は分散となる。" ] }, { @@ -1377,7 +1410,7 @@ "$$\n", "\\rho_{XY}=\n", "\\frac{\\sigma_{XY}}{\\sigma_X\\sigma_Y}\n", - "$$\n", + "$$ (eq:10-covariance_coef)\n", "\n", "次の特徴がある。\n", "* 分母は必ず正となるので,分子の共分散が符号を決定する。\n", @@ -1397,11 +1430,9 @@ }, { "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true - }, + "metadata": {}, "source": [ - "#### `.cov`と`.corr()`" + "### `.cov`と`.corr()`" ] }, { @@ -1468,9 +1499,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ - "#### GDPと構成要素との相関係数" + "### GDPと構成要素との相関係数" ] }, { @@ -1588,15 +1621,404 @@ "GDPの乖離は`3`四半期先の政府支出との相関係数が最大となっている。景気循環に対する政府の姿勢が確認できる一方,政府の対応には長いの時間が掛かることを示す結果となっている。" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": { - "heading_collapsed": true, "hidden": true, "jp-MarkdownHeadingCollapsed": true }, "source": [ - "### 変動の大きさ" + "(sec:10-autocovariance)=\n", + "## 自己共分散(自己相関)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true, + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## 自己共分散(自己相関)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 復習" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に自己共分散について考えるために,既出のランダム変数`X_i`と`Y_i`、$i=1,2,3,\\cdots,n$を使う。\n", + "`2`変数の相関度を測る共分散$\\sigma_{XY}$は式[](eq:10-covariance)で定義され,相関係数$\\rho_{XY}$は式[] (eq:10-covariance_coef)で与えられる。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで時系列のランダム変数を$\\varepsilon_t$として、次の置き換えてみよう。\n", + "* $X_i\\;\\Rightarrow\\;\\varepsilon_t,\\quad t=0,1,2,3,\\cdots$\n", + "* $Y_i\\;\\Rightarrow\\;\\varepsilon_{t-s},\\quad s=1,2,3,\\cdots$\n", + "\n", + "これにより分散は次のように置き換えることができる。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\sigma_X^2&\\quad\\Rightarrow\\quad\\sigma_{\\varepsilon_t}^2\\\\\n", + "\\sigma_Y^2&\\quad\\Rightarrow\\quad\\sigma_{\\varepsilon_{t-s}}^2\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "$X_i$と$Y_i$のそれぞれの分散は,`s`期ずれているだけの同じランダム変数$\\varepsilon$に置き換わっている。\n", + "更に,共分散は次のように置き換わる事になる。\n", + "\n", + "$$\n", + "X_i\\text{と}Y_i\\text{の共分散}=\\sigma_{XY}\n", + "\\quad\\Rightarrow\\quad\n", + "\\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}\n", + "=s\\text{期間離れた}\\varepsilon\\text{の自己共分散}\n", + "$$\n", + "\n", + "即ち,自己共分散はランダム変数とその変数の`s`期前の値との**自己相関**の度合を示す指標ということになる。\n", + "\n", + "これらの結果を使うと,$\\varepsilon_t$の相関係数は\n", + "\n", + "$$\n", + "\\rho_{\\varepsilon}(s)\\equiv\\rho_{\\varepsilon_t,\\varepsilon_{t-s}}\n", + "=\\frac{\n", + " \\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}\n", + " }{\n", + " \\sigma_{\\varepsilon_t}\n", + " \\sigma_{\\varepsilon_{t-s}}\n", + " }\n", + "$$\n", + "\n", + "で与えられる。一般的には**自己相関関数**と呼ばれる。「関数」と呼ばれる理由は,$\\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}$は`s`の関数として考えることができるためだ。呼称よりも重要なのが数値の解釈である。このサイトでは,`s=1`の場合は自己相関係数と呼ぶ事にする。解釈は次のようになる。\n", + "* $\\rho_{\\varepsilon}(s)=0,\\;s=1,2,3,\\cdots$:何期離れたとしても自己相関はなしという意味である。過去の影響は皆無の状況を指している。\n", + "* $\\rho_{\\varepsilon}(s)>0,\\;s=1,2,3,\\cdots$:今期と`s`期前の値は正の相関があるということを示す。$\\varepsilon_{t-s}$の値が大きければ(小さければ),$\\varepsilon_{t}$も大きい(小さい)傾向にあるという意味であり,`s`期前の影響が強ければ,自己相関係数の絶対値は大きくなる。経済学では`s=1`を考える場合が多く,この性質を**持続性**(persisitence)と呼ぶ。持続性は多くのマクロ変数の重要な特徴となっている。\n", + "* $\\rho_{\\varepsilon}(s)<0,\\;s=1,2,3,\\cdots$:今期と`s`期前の値は負の相関があるということを示す。$\\varepsilon_{t-s}$の値が大きければ(小さければ),$\\varepsilon_{t}$は小さい(大きい)傾向にあるという意味であり,`s`期前の影響が強ければ,自己相関係数の絶対値は大きくなる。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### GDPの場合" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "まずGDPの変動を考えるために,`df`から`gdp_cycle`を`DataFrame`として抽出し,変数`g`に割り当てよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "g = df[['gdp_cycle']]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "次に,`1`期違いの自己共分散$\\sigma_{g_tg_{t-1}}$を計算するために,`g`の列`gdp_cycle`を`1`期シフトさせた新たな列`gdp_cycle_lag`を作成しよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "g['gdp_cycle_lag'] = g['gdp_cycle'].shift()\n", + "g.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`gdp_cycle_lag`の値は`gdp_cycle`の値が`1`期シフトしていることが分かる。\n", + "`0`番目の行の`gdp_cycle`が初期値であり、同じ値が`1`番目の行の`gdp_cycle_lag`に入っている。\n", + "即ち、`1`番目の行を見ると`gdp_cycle`には`1`期の値、`gdp_cycle_lag`には初期(`0`期)の値がある。\n", + "同様に、各行の`gdp_cycle`には`t`期の値、`gdp_cycle_lag`には`t-1`期の値が入っている。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "メソッド`.cov()`を使って分散・自己共分散を計算してみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "g.cov()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "左上と右下の対角線上にあるのは、`gdp_cycle`と`gdp_cycle_lag`の不偏分散である。近い値だが、`gdp_cycle_lag`には欠損値があるため異なる値となっている。一方、右上と左下の値(同じ値となる)が**自己共分散**である。\n", + "\n", + "`g.cov()`を使って自己相関係数を計算することができるが、一点注意する必要がある。`g`の`0`行目には欠損値があるため、自己共分散を計算する際にその行は使われていない。同様に、自己相関係数を計算する際は欠損値がある行を使わずに計算する必要がある。この点に注意し、次のコードで計算することができる。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "varcov = g.dropna().cov()\n", + "varcov.iloc[0,1] / ( varcov.iloc[0,0]**0.5 * varcov.iloc[1,1]**0.5 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "メソッド`.corr()`を使っても同じ結果を得ることができる。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "g.corr()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "また、`g['gdp_cycle']`のメソッド`.autocorr()`を使い、直接**自己相関係数**を計算することも可能である。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "g['gdp_cycle'].autocorr()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "この数値は持続性を意味し,今期のGDPのトレンドからの乖離が正(負)であれば、来季もそれが続く傾向にあることを意味する。\n", + "\n", + "`g`を使って散布図を描いてみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "hidden": true + }, + "outputs": [], + "source": [ + "g.plot(x='gdp_cycle_lag', y='gdp_cycle', kind='scatter')\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "hidden": true + }, + "source": [ + "はっきりと正の相関を確認できるが,例外的な動きをしている観測値もある。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### GDPの構成要素" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まずGDPの構成要素のトレンドからの乖離率の持続性を考察するが,`gdp_cycle`を含めて次の変数を考えよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cycle_lst" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`for`ループを使い、自己相関係数を計算してみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for v in cycle_lst:\n", + " \n", + " autocorr = df[v].autocorr() #1\n", + " print(f'{v:<19}{autocorr:.3f}') #2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{admonision} コードの説明\n", + "* `#1`:`.autocorr()`は自己相関係数を計算するメソッド。\n", + "* `#2`:f-stringを使っている。\n", + " * `<19`は`v`の文字列の長さを空白を足して`19`にし左詰めにする。\n", + " * `.3f`は小数点第3位までの表示を設定している。\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "消費を除いて全て0.5以上であり,全ての変数で持続性が確認できる。\n", + "特に、投資と輸入の持続性は高いことが分かる。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "### インフレ率と失業率" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、失業率とインフレ率の持続性を確認する。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "各変数の乖離を計算するが、注意する点がある。GDPなどの変数と違い、インフレ率と失業率は長期的なトレンドはない。従って、式[](eq:10-decompose_plus)を使い、対数化せずに計算する必要がる。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "infunemp = ['inflation', 'unemployment_rate']\n", + "\n", + "for v in infunemp:\n", + "\n", + " df[v+'_trend'] = py4macro.trend( df[v] )\n", + " df[v+'_cycle'] = df[v] - df[v+'_trend']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず両変数の乖離をプロットしてみよう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cycle_infunemp = [v+'_cycle' for v in infunemp]\n", + "df.plot(y=cycle_infunemp, subplots=True)\n", + "pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "やはり持続性が高いように見える。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for v in cycle_infunemp:\n", + " \n", + " autocorr = df[v].autocorr()\n", + " print(f'{v:<25}{autocorr:.3f}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数字でも強い持続性が確認できる。" ] }, { @@ -1655,6 +2077,13 @@ "変動の大きさを比べるために、変動係数を使うこともできるが、分母に使う平均が`0`に近い値となるため、意味がない比較となってします。\n", "```" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1674,7 +2103,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/13_random_TFP.ipynb b/13_random_TFP.ipynb index 8a7f2391..40120cfd 100644 --- a/13_random_TFP.ipynb +++ b/13_random_TFP.ipynb @@ -113,7 +113,8 @@ { "cell_type": "markdown", "metadata": { - "hidden": true + "hidden": true, + "jp-MarkdownHeadingCollapsed": true }, "source": [ "### 説明" @@ -277,117 +278,11 @@ { "cell_type": "markdown", "metadata": { - "hidden": true - }, - "source": [ - "### 自己共分散(自己相関)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 復習" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "次に自己共分散について考えるために,2つのランダム変数`X_i`と`Y_i`、$i=1,2,3,\\cdots,n$を使い分散と共分散の関係を整理しよう。各変数の分散と共分散を次のように表記しよう。\n", - "\n", - "$$\n", - "X_i\\text{の分散}=\\sigma_X^2,\n", - "\\qquad\n", - "Y_i\\text{の分散}=\\sigma_Y^2\n", - "\\qquad\n", - "X_i\\text{と}Y_i\\text{の共分散}=\\sigma_{XY}\n", - "$$\n", - "\n", - "ここで,次の定義は覚えているだろう。\n", - "\n", - "$$\n", - "X_i\\text{の標準偏差}=\\sigma_X,\n", - "\\qquad\n", - "Y_i\\text{の標準偏差}=\\sigma_Y\n", - "$$\n", - "\n", - "また,次も成立する。\n", - "\n", - "$$\n", - "\\begin{aligned}\n", - "X_i\\text{と}X_i\\text{の共分散}&=\\sigma_{XX}=\\sigma_X^2=X_i\\text{の分散}\\\\\n", - "Y_i\\text{と}Y_i\\text{の共分散}&=\\sigma_{YY}=\\sigma_Y^2=Y_i\\text{の分散}\n", - "\\end{aligned}\n", - "$$\n", - "\n", - "共分散は2変数の相関度を示す指標だが,同じ変数同士の場合は分散となる。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "前章でも説明したが,相関度を表す**相関係数**は次のように定義される。\n", - "\n", - "$$\n", - "X_i\\text{と}Y_i\\text{の共分散}=\n", - "\\rho_{XY}=\n", - "\\frac{\n", - " \\sigma_{XY}\n", - " }{\n", - " \\sigma_X\n", - " \\sigma_Y\n", - " }\n", - "$$\n", - "\n", - "次の特徴がある。\n", - "* 分母は必ず正となるので,分子の共分散が符号を決定する。\n", - "* $\\rho_{XY}$の値は`-1`から`1`の間の値を取る。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "さあ、ここでホワイト・ノイズのランダム変数を$\\varepsilon_t$として、次のように置いてみよう。\n", - "* $X_i=\\varepsilon_t,\\quad t=0,1,2,3,\\cdots$\n", - "* $Y_i=\\varepsilon_{t-s},\\quad s=1,2,3,\\cdots$\n", - "\n", - "$X_i$と$Y_i$のそれぞれの分散は,`s`期ずれているだけの同じランダム変数$\\varepsilon$である。\n", - "更に,$X_i$と$Y_i$を使うと,自己共分散は次のように定義できる。\n", - "\n", - "$$\n", - "X_i\\text{と}Y_i\\text{の共分散}=\\sigma_{XY}\n", - "=\\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}\n", - "=s\\text{期間離れた}\\varepsilon\\text{の自己共分散}\n", - "$$\n", - "\n", - "即ち,自己共分散はランダム変数とその変数の`s`期前の値との**自己相関**の度合を表た指標ということになる。次に,$\\varepsilon_t$の相関係数は\n", - "\n", - "$$\n", - "\\rho_{\\varepsilon}(s)\\equiv\\rho_{\\varepsilon_t,\\varepsilon_{t-s}}\n", - "=\\frac{\n", - " \\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}\n", - " }{\n", - " \\sigma_{\\varepsilon_t}\n", - " \\sigma_{\\varepsilon_{t-s}}\n", - " }\n", - "$$\n", - "\n", - "で与えられる。自己相関係数と呼ばれる場合もあるが,より一般的には**自己相関関数**と呼ばれる。「関数」と呼ばれる理由は,$\\sigma_{\\varepsilon_t,\\varepsilon_{t-s}}$は`s`の関数として考えることができるためだ。呼称よりも重要なのが数値の解釈である。\n", - "* $\\rho_{\\varepsilon}(s)=0,\\;s=1,2,3,\\cdots$:何期離れたとしても自己相関はなしという意味であり,これがまさしくホワイト・ノイズの3つ目の性質である。\n", - "* $\\rho_{\\varepsilon}(s)>0,\\;s=1,2,3,\\cdots$:今期と`s`期前の値は正の相関があるということを示す。解釈しやすくするために`s`$=1$の場合を考えると,$\\varepsilon_{t-1}$の値が大きければ(小さければ),$\\varepsilon_{t}$も大きい(小さい)傾向にあるという意味であり,`s`期前の影響が強ければ,自己相関係数の絶対値は大きくなる。経済学では,この性質を**持続性**(persisitence)と呼ぶ。持続性は多くのマクロ変数の重要な特徴となっている。\n", - "* $\\rho_{\\varepsilon}(s)<0,\\;s=1,2,3,\\cdots$:今期と`s`期前の値は負の相関があるということを示す。`s`$=1$の場合を考えると,$\\varepsilon_{t-1}$の値が大きければ(小さければ),$\\varepsilon_{t}$は小さい(大きい)傾向にあるという意味であり,`s`期前の影響が強ければ,自己相関係数の絶対値は大きくなる。" - ] - }, - { - "cell_type": "markdown", - "metadata": { + "hidden": true, "jp-MarkdownHeadingCollapsed": true }, "source": [ - "#### プロットと計算" + "### 自己共分散(自己相関)" ] }, { @@ -396,7 +291,7 @@ "hidden": true }, "source": [ - "では,`1`期違いの自己共分散$\\sigma_{\\varepsilon_t \\varepsilon_{t-1}}$を計算するために,`dfwn`の列`WN`を`1`期シフトさせた新たな列`WNlag`を作成しよう。" + "`1`期違いの自己共分散$\\sigma_{\\varepsilon_t \\varepsilon_{t-1}}$を計算するために,`dfwn`の列`WN`を`1`期シフトさせた新たな列`WNlag`を作成しよう。" ] }, { @@ -565,14 +460,14 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "## マクロ変数の持続性" + "### まとめ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "GDPや構成要素を含め、マクロ変数の重要な特徴が持続性である。\n", + "\n", "上で説明したように、持続性は自己相関と同義であり、自己相関関数で測ることができる。\n", "ここでは、主なマクロ変数の持続性を計算し、その度合いを確認する。" ] @@ -581,192 +476,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### GDPと構成要素" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "まずGDPと構成要素のトレンドからの乖離率の持続性を考察するが、次のコードは乖離率の変数を作成する。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "var_lst1 = ['gdp',\n", - " 'consumption',\n", - " 'investment',\n", - " 'government',\n", - " 'exports',\n", - " 'imports']\n", - "\n", - "df = py4macro.data('jpn-q')\n", - "\n", - "for v in var_lst1:\n", - " \n", - " df[v+'_log'] = np.log( df.loc[:,v] )\n", - " df[v+'_log_trend'] = py4macro.trend( df.loc[:,v+'_log'] )\n", - " df[v+'_cycle'] = df[v+'_log'] - df[v+'_log_trend']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "前章で解説したコードと同じなので解説は不要だろう。まず視覚的に確認してみよう。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cycle_lst1 = [s+'_cycle' for s in var_lst1]\n", - "( 100*df.loc[:,cycle_lst1] ).plot(subplots=True, figsize=(8,10))\n", - "pass" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上でプロットしたホワイト・ノイズとは印象が異なることが直ぐに分かるのではないだろうか。\n", - "`for`ループを使い、自己相関係数を計算してみよう。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for v in cycle_lst1:\n", - " \n", - " autocorr = df[v].autocorr() #1\n", - " print(f'{v:<19}{autocorr:>5.3f}') #2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```{admonision} コードの説明\n", - "* `#1`:`.autocorr()`は自己相関係数を計算するメソッド。\n", - "* `#2`:f-stringを使っている。\n", - " * `<19`は`v`の文字列の長さを空白を足して`19`にし左詰めにする。\n", - " * `>5`は`autocorr`の文字列の長さに空白を足して5にし右詰めにする。\n", - " * `.2f`は小数点第二位までの表示を設定している。\n", - " * `>5`と`.2f`の順番を逆にするとエラーが発生する。\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "消費を除いて全て0.5以上であり,持続性が確認できる。\n", - "特に、投資と輸入の持続性は高いことが分かる。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true - }, - "source": [ - "### インフレ率と失業率" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "次に、失業率とインフレ率の持続性を確認する。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "各変数の乖離を計算するが、注意する点がある。GDPなどの変数と違い、インフレ率と失業率は長期的なトレンドはない。従って、式[](eq:10-decompose_plus)を使い、対数化せずに計算する必要がる。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "var_lst2 = ['inflation', 'unemployment_rate']\n", - "\n", - "for v in var_lst2:\n", - "\n", - " df[v+'_trend'] = py4macro.trend( df[v] )\n", - " df[v+'_cycle'] = df[v] - df[v+'_trend']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "まずプロットしてみよう。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cycle_lst2 = [v+'_cycle' for v in var_lst2]\n", - "df.plot(y=cycle_lst2, subplots=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "やはり持続性が高いように見える。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for v in cycle_lst2:\n", - " \n", - " autocorr = df[v].autocorr()\n", - " print(f'{v:<25}{autocorr:.3f}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "数字でも強い持続性が確認できる。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true - }, - "source": [ - "### まとめ" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "これらの結果からわかることは,ホワイト・ノイズだけではマクロ変数の持続性を説明できないということであり、景気循環を理解するためには自己共分散が正の値になる経済モデルが求められる。では、どのようなモデルなのだろうか?この問いに答えるために、まずは統計的なモデルである自己回帰モデルを考察し、それを出発点として議論を進めていく事にする。" + "GDPや構成要素を含め、マクロ変数の重要な特徴が持続性であることは既に確認済みだ。([自己共分散(自己相関)](sec:10-autocovariance)を参照しよう。)従って,上の結果からわかることは,ホワイト・ノイズだけではマクロ変数の持続性を説明できないということであり、景気循環を理解するためには自己共分散が正の値になる経済モデルが求められる。では、どのようなモデルなのだろうか?この問いに答えるために、まずは統計的なモデルである自己回帰モデルを考察し、それを出発点として議論を進めていく事にする。" ] }, { @@ -1648,7 +1358,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## 確率的ソロー・モデル" ] @@ -1656,7 +1368,8 @@ { "cell_type": "markdown", "metadata": { - "heading_collapsed": true + "heading_collapsed": true, + "jp-MarkdownHeadingCollapsed": true }, "source": [ "### 説明" @@ -2387,7 +2100,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.11.9" } }, "nbformat": 4,