平均と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個作成します。ヒント:平均を計算するにはfuncにnp.meanを渡します。- 参考:
draw_bs_reps()はdata、func、sizeの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()