Skip to content

Commit

Permalink
線形・非線形相関関係の説明
Browse files Browse the repository at this point in the history
  • Loading branch information
Tetsu HARUYAMA authored and Tetsu HARUYAMA committed Oct 28, 2023
1 parent 8edb373 commit b3cd787
Showing 1 changed file with 36 additions and 21 deletions.
57 changes: 36 additions & 21 deletions 12_Asymptotics.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
Expand Down Expand Up @@ -124,10 +125,12 @@
"\n",
"仮定4a:$\\text{E}(u)=0,\\quad\\text{Cov}(u,x)=0$\n",
"\n",
"* 仮定4$\\text{E}\\left(u|x\\right)=0$の意味をもう一度考えてみるために、線形もしくは非線形の任意の関数を$f(.)$とおこう。この関数を使い$u=f(x)$とすると、$u$と$x$には線形もしくは非線形の関係が存在することを意味している。$\\text{E}\\left(u|x\\right)=0$は、$u=f(x)$の関係は存在し**ない**ことを意味する強い仮定になっている。この仮定を少し緩めたものが仮定4aである。任意の線形関数を$h(.)$とすると、$u$と$x$に線形の関係がある場合は$u=h(x)$となる(例えば、$u=1+2x$)。$\\text{Cov}(u,x)=0$は$u=h(x)$の関係が存在しないということを意味しているが、必ずしも$u=f(x)$の関係が存在しないことを意味しない。更に付け加えると、$u$と$x$に非線形の関係がある場合,$\\text{Cov}(u,x)=0$であっても,$\\text{E}\\left(u|x\\right)\\neq0$になりえるのである。即ち,仮定4は仮定4aを意味するが,仮定4aは仮定4を必ずしも意味しないのである。\n",
"* $\\text{Cov}(u,x)=0$は$\\text{E}(ux)=\\text{E}(u)x=0$を意味する。\n",
"* 仮定4$\\text{E}\\left(u|x\\right)=0$の意味をもう一度考えてみるために、線形もしくは非線形のランダムな関係を考えてみよう。[このウィキペディアの画像](https://ja.wikipedia.org/wiki/相関係数#/media/ファイル:Correlation_examples2.svg)にある関係をイメージすると良いだろう。これらの図の横軸と縦軸には2つの変数がり,ここでは$x$と$u$としよう。上段と中断の内,中央の図以外は線形の相関関係を示しており,下段は非線形の相関関係を表示している。$\\text{E}\\left(u|x\\right)=0$は,上段の中央の図を意味する。即ち,$u$と$x$には,線形及び非線形の関係は存在し**ない**ことを意味する強い仮定になっている。\n",
"\n",
"この仮定を少し緩めたものが仮定4aであり,線形の相関関係がないことを意味する。ここで重要な点は,非線形の相関関係は対象外ということである。従って,$\\text{Cov}(u,x)=0$は,上述のウィキペディアの画像の画像の下段の相関関係が存在しないことを意味しない。更に付け加えると、$u$と$x$に非線形の関係がある場合,$\\text{Cov}(u,x)=0$であっても,$\\text{E}\\left(u|x\\right)\\neq0$になりえるのである。即ち,仮定4は仮定4aを意味するが,仮定4aは仮定4を必ずしも意味しない。\n",
"* $\\text{Cov}(u,x)=0$は,$\\text{E}(ux)=\\text{E}(u)x=0$を意味する。\n",
"\n",
"仮定4より緩い仮定4aのもとでは,少なくとも一致性を満たす推定量としてより多くの状況に対応できるようになる"
"仮定4より緩い仮定4aのもとでは,少なくとも一致性を満たす推定量としてより多くの状況に対応でき利点がある"
]
},
{
Expand All @@ -140,29 +143,40 @@
"### シミュレーション:一致性"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"#### 仮定"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"シミュレーションを使い一致性の分布収束を確かめる。仮定1〜4には誤差項の正規性や均一性は含まれていない。この点を捉えるために,誤差項は2つの異なる分布から確率的に発生すると仮定する。具体的には,確率$p$で誤差項は正規分布\n",
"シミュレーションを使い一致性の分布収束を確かめる。仮定1〜4には誤差項の正規性や均一性は含まれていない。この点を捉えるために,誤差項は2つの異なる分布から生成されたランダム変数の加重平均と仮定する。まず,次の正規分布\n",
"\n",
"$$u_N\\sim\\text{Normal(0,0.25)}$$\n",
"\n",
"で発生し,$1-p$\n",
"のウェイトは$p$とし,次のランダム変数のウェイトは$1-p$とする。\n",
"\n",
"$$u_c=\\frac{v-1}{\\sqrt{2}},\\qquad v\\sim\\chi^2(1)$$\n",
"\n",
"が発生する。$\\chi^2(1)$は自由度1のカイ二乗分布で,平均は1,標準偏差は$\\sqrt{2}$。誤差項の確率密度関数は2つの確率密度関数の「加重平均」\n",
"ここで,$\\chi^2(1)$は自由度1のカイ二乗分布であり,$u_c$の平均は1,標準偏差は$\\sqrt{2}$となる。\n",
"誤差項の確率密度関数は2つの確率密度関数の「加重平均」\n",
"\n",
"$$\n",
"u = pu_N+(1-p)u_c\n",
"$$\n",
"\n",
"となる。\n",
"* 正規分布の分散は0.5であり,カイ二乗分布の分散は1であるため仮定5は満たされない。(説明変数によって誤差項の分散が異なる。)\n",
"* また明らかに仮定6も満たされない\n",
"* 明らかに仮定6も満たされない\n",
"* $\\text{E}(u_N)=\\text{E}(u_c)$であるため$\\text{E}(u)=0$。"
]
},
Expand Down Expand Up @@ -256,11 +270,11 @@
"source": [
"for i in range(n): # (1)\n",
" \n",
" prob = 0.05 # (2)\n",
" dist_1 = norm.rvs(loc=0, scale=u_sd, size=1) # (3)\n",
" dist_2 = (chi2.rvs(1, size=1) - 1) / np.sqrt(2) # (4)\n",
" p = 0.05 # (2)\n",
" dist_1 = np.random.normal(loc=0, scale=u_sd, size=1) # (3)\n",
" dist_2 = (np.random.chisquare(1, size=1) - 1) / np.sqrt(2) # (4)\n",
" \n",
" error = prob*(dist_1)+(1-prob)*(dist_2) # (5)\n",
" error = p*(dist_1)+(1-p)*(dist_2) # (5)\n",
" u[i] = error # (6)"
]
},
Expand All @@ -279,15 +293,16 @@
"> 6. この誤差項を`u[]`の`i`番目に代入。\n",
"\n",
"<コメント><br>\n",
"(5)では`dist_1`と`dist_2`の混合として`error`を生成しているが,`prob`で`dist_1`が発生し`1-prob`で`dist_2`が発生するように設定することも可能である。例えば,次のコード。\n",
"(5)では`dist_1`と`dist_2`の加重平均として`error`を生成しているが,`p`を確率として解釈し,\n",
"`p`で`dist_1`が発生し`1-p`で`dist_2`が発生するように設定することも可能である。例えば,次のコード。\n",
"```\n",
"for i in range(n):\n",
"\n",
" random_var = {'normal':norm.rvs(loc=0, scale=u_sd, size=1),\n",
" 'chi2':(chi2.rvs(1, size=1)-1)/np.sqrt(2)}\n",
" random_var = {'normal':np.random.normal(loc=0, scale=u_sd, size=1),\n",
" 'chi2':(np.random.chisquare(1, size=1)-1)/np.sqrt(2)}\n",
" dist = ['normal','chi2']\n",
"\n",
" choice = np.random.choice(dist, p=[0,1])\n",
" choice = np.random.choice(dist, p=[0.05,1-0.05])\n",
" error = random_var[choice]\n",
" u[i] = error\n",
"```\n",
Expand Down Expand Up @@ -324,9 +339,9 @@
"outputs": [],
"source": [
"x=np.linspace(-2.0,2.0,100) # 図を作成するために-2から2までの横軸の値を設定\n",
"kde_model=gaussian_kde(u) # カーネル密度推定を設定\n",
"ufunc = kde_model(x) # カーネル密度推定を使い誤差項の分布を推定\n",
"plt.plot(x, ufunc) # 誤差項の分布をプロット\n",
"kde_model=gaussian_kde(u) # カーネル密度推定を設定\n",
"ufunc = kde_model(x) # カーネル密度推定を使い誤差項の分布を推定\n",
"plt.plot(x, ufunc) # 誤差項の分布をプロット\n",
"pass"
]
},
Expand Down Expand Up @@ -393,7 +408,7 @@
},
"outputs": [],
"source": [
"b0 = 1 # 定数項\n",
"b0 = 1 # 定数項\n",
"b1 = 0.5 # 説明変数の係数"
]
},
Expand Down Expand Up @@ -789,7 +804,7 @@
},
"outputs": [],
"source": [
"b0 = 1 # 定数項\n",
"b0 = 1 # 定数項\n",
"b1 = 0.5 # 説明変数の係数"
]
},
Expand Down Expand Up @@ -1717,7 +1732,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.4"
"version": "3.10.8"
},
"nteract": {
"version": "0.15.0"
Expand Down

0 comments on commit b3cd787

Please sign in to comment.