import numpy as np
import pandas as pd
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
第7章のPythonコード
第7章 外生変数と内生変数
モジュールのインポート
Rによるシミュレーション演習
乱数の設定
2022) np.random.seed(
サンプルサイズとパラメータの設定
= 200 # サンプルサイズ
n = 1 # 切片の真の値
b0 = 2 # 係数の真の値 b1
estimate()関数の定義
def estimate(lambda2) :
= np.random.normal(size = n) # 誤差項
e = (1 + lambda2 * e) * np.random.uniform(size = n) # 説明変数
X = b0 + b1 * X + e # 被説明変数
Y = pd.DataFrame(np.array([X, Y]).transpose(), columns = ['X', 'Y'])
mydata = ols('Y ~ X', data = mydata).fit()
regression return regression.params
simulate()関数の定義
def simulate(lambda2) :
= np.zeros(100)
betahat0 = np.zeros(100)
betahat1
for i in range(100) :
= estimate(lambda2)[0]
betahat0[i] = estimate(lambda2)[1]
betahat1[i]
= pd.DataFrame(betahat0).mean()
mean0 = pd.DataFrame(betahat1).mean()
mean1
= pd.DataFrame(np.array([mean0, mean1]).transpose(), columns = ['beta0', 'beta1'])
mydata
return mydata
シミュレーションの実施
= pd.DataFrame(columns = ['beta0', 'beta1'])
results = np.linspace(0, 0.6, 61)
lambdas for i in map(simulate, lambdas) :
= pd.concat([results, i], ignore_index = True) results
'bias0'] = results['beta0'] - b0 # バイアス = 推定値 - 真の値
results['bias1'] = results['beta1'] - b1
results['lambdas'] = lambdas results[