平均値のブートストラップ複製とSEM
この演習では、シェフィールド気象観測所における年間平均降水量の確率密度関数をブートストラップで推定します。ここで推定するのは、1883年から2015年までの観測を何度も繰り返した場合に得られる年間平均降水量です。これは平均値の確率的な推定です。推定結果はPDFをヒストグラムとしてプロットします。すると、その分布が正規分布に従うことが確認できます。
実は、理論的にも示されているように、あまり厳しくない条件のもとでは、平均値は常に正規分布に従います(これはすべての統計量に成り立つわけではなく、平均値といくつかの統計量に限られます)。この分布の標準偏差は平均の標準誤差(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の標準偏差を計算して出力してください。 density=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()