始める無料で始める

平均とSEMのブートストラップ複製

この演習では、Sheffield気象観測所における年間平均降水量の確率密度関数のブートストラップ推定を計算します。ここで推定したいのは、Sheffield気象観測所が1883年から2015年までの測定を何度も繰り返せたとしたら得られる年間平均降水量です。これは平均値の「確率的」な推定です。PDFをヒストグラムとして描くと、正規形状になることがわかります。

実は、さほど厳しくない条件のもとでは、平均の値は常に正規分布に従うことが理論的に示せます。(これは一般には成り立たず、平均と他のごく一部の統計量に限られます。)この分布の標準偏差は「平均の標準誤差(standard error of the mean; SEM)」と呼ばれ、データの標準偏差をデータ点数の平方根で割ったものになります。つまり、データ集合に対しては sem = np.std(data) / np.sqrt(len(data)) です。ハッカースタッツを使えば、この結果を導出せずに同じ結論が得られますが、ここではブートストラップ複製からこの結果を確かめます。

データセットは rainfall という配列にあらかじめ読み込まれています。

この演習はコースの一部です

Pythonで学ぶ統計思考(パート2)

コースを見る

演習の手順

  • draw_bs_reps() 関数と rainfall 配列を使って、年間降水量の「平均」のブートストラップ複製を 10000 個作成します。ヒント:平均を計算するには funcnp.mean を渡します。
    • 参考:draw_bs_reps()datafuncsize の3引数を受け取ります。
  • rainfall の平均の標準誤差を計算して表示します。
    • 計算式は np.std(data) / np.sqrt(len(data)) です。
  • ブートストラップ複製 bs_replicates の標準偏差を計算して表示します。
  • normed=True キーワード引数と 50 個のビンを指定して、複製のヒストグラムを作成します。
  • 完了したら提出してプロットを確認しましょう!

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Take 10,000 bootstrap replicates of the mean: bs_replicates
bs_replicates = ____

# Compute and print SEM
sem = ____ / np.sqrt(____)
print(sem)

# Compute and print standard deviation of bootstrap replicates
bs_std = ____
print(bs_std)

# Make a histogram of the results
_ = plt.hist(____, ____=50, ____=True)
_ = plt.xlabel('mean annual rainfall (mm)')
_ = plt.ylabel('PDF')

# Show the plot
plt.show()
コードを編集して実行