始める無料で始める

平均値のブートストラップ複製と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() には datafuncsize の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()
コードを編集して実行