ペア・ブートストラップ用の関数を作る
動画で説明したとおり、ペア・ブートストラップではデータのペアをリサンプリングします。各ペアの集合に対して、ここでは np.polyfit() を使って直線を当てはめます。これを何度も繰り返して、パラメータ値のブートストラップ複製を得ます。ペア・ブートストラップを行う便利なツールとして、x,y データの集合に対してペア・ブートストラップを実行する関数を書いていきます。
この演習はコースの一部です
Pythonで学ぶ統計思考(パート2)
演習の手順
- 線形回帰パラメータに対してペア・ブートストラップ推定を行う関数
draw_bs_pairs_linreg(x, y, size=1)を定義します。np.arange()を使って、0からlen(x)までのインデックス配列を作ります。これをリサンプリングし、xとy配列から値を取り出すのに用います。np.empty()を使って、傾きと切片の複製配列をサイズsizeで初期化します。- 次の処理を行う
forループを書きます。- インデックス
indsをリサンプリングします。np.random.choice()を使ってください。 - リサンプリングしたインデックス
bs_indsを使って、新しい \(x\) と \(y\) の配列bs_xとbs_yを作ります。これはxとyをbs_indsでスライスして作成します。 - 新しい \(x\) と \(y\) 配列に
np.polyfit()を適用し、得られた傾きと切片を保存します。
- インデックス
- 傾きと切片のペア・ブートストラップ複製を返します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def draw_bs_pairs_linreg(x, y, size=1):
"""Perform pairs bootstrap for linear regression."""
# Set up array of indices to sample from: inds
inds = ____
# Initialize replicates: bs_slope_reps, bs_intercept_reps
bs_slope_reps = ____
bs_intercept_reps = ____
# Generate replicates
for i in range(size):
bs_inds = np.random.choice(____, size=____)
bs_x, bs_y = x[____], y[____]
bs_slope_reps[i], bs_intercept_reps[i] = ____
return bs_slope_reps, bs_intercept_reps