標準誤差と(ノンパラメトリック)ブートストラップのイケない関係

標準誤差と(ノンパラメトリック)ブートストラップについて、特に理論的なお話はおいておいて、直感的にどういうことなのかということをメモりたい。
それぞれ

  • (回帰分析の係数の)標準誤差: ある確率分布からのサンプルデータに対し推定されたある統計量(ここでは回帰係数)の、その(我々には見ることができない確率分布が持つ真の)統計量からのバラツキの大きさ
  • (ノンパラメトリック)ブートストラップ標準誤差: ブートストラップサンプルで推定されたある統計量(ここでは回帰係数)の、そのバラツキの大きさ

なので、これらは直感的に近しい値になるだろうということが期待されるわけです。これをやってみる。

まず、ふつーに回帰して標準誤差を取得すると・・・

> standard_error <- summary(lm(dist~speed, cars))$coef[2, 2]
> standard_error
[1] 0.4155128

となる。

次にノンパラメトリックブートストラップで標準誤差を計算してみる。コードは以下。

set.seed(71)
#ブートストラップのサイズを設定&結果格納用ベクトル定義
size_loop <- 10^4
coefs <- numeric(size_loop)
for(i in seq_len(size_loop))
{
  #サンプリングを実行
  bootstrap_index <- sample(nrow(cars), nrow(cars), replace=TRUE)
  #取得したサンプルに対してSpeed変数に対する回帰係数を取得
  coefs[i] <- summary(lm(dist~speed, cars[bootstrap_index, ]))$coef[2, 1]
}

その回帰係数の標準偏差がその係数のバラツキを表現するので計算してみると

> sd(coefs)
[1] 0.4086198

となり、直観どおり、大体、lm関数の返す標準誤差とあってるぞと。