Last active
August 12, 2022 13:59
-
-
Save CookieBox26/56d1f987b5e01ed341b50d97d1f6c0bb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "d08396b6-6502-4007-9381-5a104fbf0084", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.6244997998398398\n", | |
"0.4098780306383841\n", | |
"1.0\n", | |
"1.0\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>u</th>\n", | |
" <th>z</th>\n", | |
" <th>e_x</th>\n", | |
" <th>e_y</th>\n", | |
" <th>x</th>\n", | |
" <th>y</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0.195993</td>\n", | |
" <td>-0.361042</td>\n", | |
" <td>2.100585</td>\n", | |
" <td>0.295884</td>\n", | |
" <td>2.037660</td>\n", | |
" <td>1.781044</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>-1.941236</td>\n", | |
" <td>0.447563</td>\n", | |
" <td>0.694844</td>\n", | |
" <td>0.015554</td>\n", | |
" <td>-0.246117</td>\n", | |
" <td>-0.739098</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>0.713785</td>\n", | |
" <td>0.050702</td>\n", | |
" <td>0.499463</td>\n", | |
" <td>0.345466</td>\n", | |
" <td>0.953085</td>\n", | |
" <td>1.226762</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>0.662148</td>\n", | |
" <td>0.795611</td>\n", | |
" <td>-0.514471</td>\n", | |
" <td>0.257698</td>\n", | |
" <td>0.280623</td>\n", | |
" <td>0.652779</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>-0.228862</td>\n", | |
" <td>1.639228</td>\n", | |
" <td>0.845780</td>\n", | |
" <td>-0.269862</td>\n", | |
" <td>1.528077</td>\n", | |
" <td>0.731133</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9995</th>\n", | |
" <td>-1.211295</td>\n", | |
" <td>-0.836828</td>\n", | |
" <td>0.635767</td>\n", | |
" <td>-0.294217</td>\n", | |
" <td>-0.509424</td>\n", | |
" <td>-1.014202</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9996</th>\n", | |
" <td>-1.156272</td>\n", | |
" <td>-1.740709</td>\n", | |
" <td>-0.311431</td>\n", | |
" <td>0.177800</td>\n", | |
" <td>-1.875548</td>\n", | |
" <td>-1.481965</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9997</th>\n", | |
" <td>-0.663931</td>\n", | |
" <td>-0.671128</td>\n", | |
" <td>0.075472</td>\n", | |
" <td>0.127268</td>\n", | |
" <td>-0.658450</td>\n", | |
" <td>-0.532826</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9998</th>\n", | |
" <td>-1.254822</td>\n", | |
" <td>0.591474</td>\n", | |
" <td>0.657080</td>\n", | |
" <td>0.252847</td>\n", | |
" <td>0.199923</td>\n", | |
" <td>0.016347</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9999</th>\n", | |
" <td>-0.453602</td>\n", | |
" <td>0.329618</td>\n", | |
" <td>0.045030</td>\n", | |
" <td>0.763550</td>\n", | |
" <td>-0.062322</td>\n", | |
" <td>0.583844</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>10000 rows × 6 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" u z e_x e_y x y\n", | |
"0 0.195993 -0.361042 2.100585 0.295884 2.037660 1.781044\n", | |
"1 -1.941236 0.447563 0.694844 0.015554 -0.246117 -0.739098\n", | |
"2 0.713785 0.050702 0.499463 0.345466 0.953085 1.226762\n", | |
"3 0.662148 0.795611 -0.514471 0.257698 0.280623 0.652779\n", | |
"4 -0.228862 1.639228 0.845780 -0.269862 1.528077 0.731133\n", | |
"... ... ... ... ... ... ...\n", | |
"9995 -1.211295 -0.836828 0.635767 -0.294217 -0.509424 -1.014202\n", | |
"9996 -1.156272 -1.740709 -0.311431 0.177800 -1.875548 -1.481965\n", | |
"9997 -0.663931 -0.671128 0.075472 0.127268 -0.658450 -0.532826\n", | |
"9998 -1.254822 0.591474 0.657080 0.252847 0.199923 0.016347\n", | |
"9999 -0.453602 0.329618 0.045030 0.763550 -0.062322 0.583844\n", | |
"\n", | |
"[10000 rows x 6 columns]" | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"\n", | |
"# パス係数\n", | |
"alpha_xu = 0.6\n", | |
"alpha_xz = 0.5\n", | |
"alpha_yx = 0.7\n", | |
"alpha_yu = 0.3\n", | |
"\n", | |
"# ノイズの標準偏差\n", | |
"s_x = np.sqrt(1 - alpha_xu * alpha_xu - alpha_xz * alpha_xz)\n", | |
"print(s_x)\n", | |
"s_y = np.sqrt(1 - ((alpha_yx * alpha_xu + alpha_yu) * (alpha_yx * alpha_xu + alpha_yu) + alpha_yx * alpha_yx * alpha_xz * alpha_xz \\\n", | |
" + alpha_yx * alpha_yx * s_x * s_x))\n", | |
"print(s_y)\n", | |
"\n", | |
"# X と Y の分散が 1 になっていることの検算\n", | |
"print(alpha_xu * alpha_xu + alpha_xz * alpha_xz + s_x * s_x)\n", | |
"print((alpha_yx * alpha_xu + alpha_yu) * (alpha_yx * alpha_xu + alpha_yu) + alpha_yx * alpha_yx * alpha_xz * alpha_xz \\\n", | |
" + alpha_yx * alpha_yx * s_x * s_x + s_y * s_y)\n", | |
"\n", | |
"np.random.seed(26)\n", | |
"df = pd.DataFrame()\n", | |
"df['u'] = np.random.randn(10000)\n", | |
"df['z'] = np.random.randn(10000)\n", | |
"df['e_x'] = np.random.normal(loc=0.0, scale=s_x, size=10000)\n", | |
"df['e_y'] = np.random.normal(loc=0.0, scale=s_y, size=10000)\n", | |
"df['x'] = alpha_xu * df['u'] + alpha_xz * df['z'] + df['e_x']\n", | |
"df['y'] = alpha_yx * df['x'] + alpha_yu * df['u'] + df['e_y']\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "fd1e4f11-01e0-4cd1-8487-d22d8d422c2c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"-0.0023727811300242596\n", | |
"1.0034368285869\n", | |
"-0.00296893256037235\n", | |
"0.9918009776519139\n" | |
] | |
} | |
], | |
"source": [ | |
"# X と Y が平均 0, 分散 1 になっているか\n", | |
"print(np.mean(df['x']))\n", | |
"print(np.var(df['x']))\n", | |
"print(np.mean(df['y']))\n", | |
"print(np.var(df['y']))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "0d95d461-5a66-4ba1-922d-6c12b4e86b7e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.35495146501589864\n", | |
"0.5059456432436324\n", | |
"0.7015604734538168\n" | |
] | |
} | |
], | |
"source": [ | |
"# u を参照せずに x から y へのパス係数を推定\n", | |
"rho_yz = df['y'].corr(df['z'])\n", | |
"rho_xz = df['x'].corr(df['z'])\n", | |
"print(rho_yz)\n", | |
"print(rho_xz)\n", | |
"print(rho_yz / rho_xz) # alpha_yx" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "234a1495-4f4e-4d49-92c4-f55d5fa384b8", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment