回帰のブートストラップ
ここでは、回帰にブートストラップを適用する方法を見ていきます。ブートストラップは、標準的でない推定量の不確実性の評価に役立ちます。回帰に付随する \(R^{2}\) 統計量を考えましょう。最小二乗法で回帰を実行すると、\(R^{2}\) の値が得られます。では、\(R^2\) の95% CIをどのように求められるでしょうか。
df.head() を使って、従属変数 \(y\) と2つの独立変数 \(X1\) と \(X2\) をもつ DataFrame df を確認してください。次のように statsmodels(sm)でこの回帰はすでに当てはめ済みです。
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()
reg_fit.summary() で結果を確認すると、\(R^{2}=0.3504\) となっています。ブートストラップを使って95% CIを計算しましょう。
この演習はコースの一部です
Pythonで学ぶ統計シミュレーション
演習の手順
- pandas の DataFrame の
sample()メソッドを使って、元のデータセットからブートストラップ標本を作成します。行数は元の DataFrame と同じにします。 sm.OLS()でreg_fit()と同様の回帰を当てはめ、rsquared属性を使って \(R^{2}\) 統計量を取得します。- 得られた \(R^{2}\) をリスト
rsquared_bootに追加します。 np.percentile()を用いて、rsquared_bootの95% CI をr_sq_95_ciとして計算します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
rsquared_boot, coefs_boot, sims = [], [], 1000
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()
# Run 1K iterations
for i in range(sims):
# First create a bootstrap sample with replacement with n=df.shape[0]
bootstrap = ____
# Fit the regression and append the r square to rsquared_boot
rsquared_boot.append(____(bootstrap['y'],bootstrap.iloc[:,1:]).fit().rsquared)
# Calculate 95% CI on rsquared_boot
r_sq_95_ci = ____
print("R Squared 95% CI = {}".format(r_sq_95_ci))