残差のブートストラップ:私はそれを正しく行っていますか?


10

まず、 私が理解したことから、残差のブートストラップは次のように機能します。

  1. モデルをデータに合わせる
  2. 残差を計算する
  3. 残差を再サンプリングし、それらを1に追加します。
  4. モデルを3からの新しいデータセットに適合させます。
  5. n時間を繰り返しますが、常にリサンプリングされた残差を1からの近似に追加します。

これまでのところ正しいですか?


私がやりたいことは少し違うものです:

環境変数を推定するアルゴリズムのパラメーターと予測の不確実性を推定したい。

私が持っているのは、その変数の(シミュレーションからの)エラーのない時系列です。合成データセットを生成するために、x_trueそれにノイズを追加します。次に、アルゴリズムを二乗和(!ではなく!)を目的関数としてフィッティングして、最適なパラメーターを見つけようとします。アルゴリズムの動作を確認し、パラメーターの分布のサンプルを作成するために、を再サンプリングし、それをに追加し、モデルを再度フィッティングし、リンスして繰り返します。それはパラメータの不確実性を評価するための有効なアプローチですか?ブートストラップされたデータセットへの適合を予測の不確実性として解釈できますか、それとも上に投稿した手順に従う必要がありますか?x_noisexsum((x_estimate - x_true)^2)x_estimate - xx_noisex_true

/ edit:私は自分のモデルが何をしているのか明確にしていないと思います。それは本質的にノイズ除去方法のようなものと考えてください。これは予測モデルではなく、ノイズの多い時系列の環境データの根本的な信号を抽出しようとするアルゴリズムです。

/ edit ^ 2:そこにいるMATLAB-Usersのために、私が何を意味するのかについての簡単で汚い線形回帰の例を書き留めました。

これは、「通常の」残差のブートストラップが正しいと私が信じていることです(間違っている場合は修正してください):http : //pastebin.com/C0CJp3d1

これは私がしたいことです:http//pastebin.com/mbapsz4c


これまでに行ったコードを表示すると、より明確になります。
メトリック2013

これまでのところ、ブートストラップに関しては何もコーディングしていません。私のモデルのコードはかなり複雑です。それが役立つことに感謝しません。例として、モデルが移動平均のような平滑化手順であり、移動ウィンドウが唯一のモデルパラメーターであると想定できます。時間の経過に伴う一連の(合成)測定値があり、それに(必ずしもホモスケダスティックで正規分布しているわけではない)エラーが追加されています。次に、私が知っている根本的な「真の」に最も近い移動ウィンドウを推定し、合成エラーをブートストラップして不確実性を評価したいと思います。それは役に立ちますか?
Fred S

以下に、非常に悪いMATLABスタイルの疑似コードをいくつか示します。これは、私が何をしたいかを理解するのに役立つかもしれません。pastebin.com
Fred S

フレッドさん、申し訳ありませんが、Matlabはわかりません。ユーザーからの入力を取得するには、Matlabのタグを付けてください。
メトリック

2
ああ、私の質問は実際にはMATLABに限定されていません(それは実際にはMATLABコードではありません。これは、MATLABの構文に基づく疑似コードであり、forループとコメントが機能しないためです)。しかし、念のためタグを付けることができます。
Fred S

回答:


8

以下は、一般的な(セミパラメトリックブートストラップ)アルゴリズムの詳細です。

B


y=バツβ+ε

ε^

  1. β^ε^
  2. ε^B
  3. yB=バツβ^+ε^B
  4. yBバツβ^B
  5. B

1

私の理解が正しいかわかりません。しかし、ここにあなたのコードを修正するための私の提案があります( "残差の通常のブートストラップ"、28-34行目):

for i = 2:n_boot  
x_res_boot = x_residuals( randi(n_data,n_data,1) );  
x_boot = x_res_boot+ x_best_fit;  
p_est(:, i) = polyfit( t, x_boot, 1 );  
x_best_fit2 = polyval( p_est(:, i), t );  
x_residuals = x_best_fit2 - x_boot;
x_best_fit=x_best_fit2;
end  

アイデアは、最初の実行からではなく、前回のブートストラップフィットからの残差を使用するたびです。私に関しては、他のすべてが有効であるようです。

これは、MATLABでチェックされた改訂版です。2つのエラーが修正されました。


ああ、それは私にとって初めてだった。bsxfunはやや複雑です。ここにあなたのアイデアを使った新しいバージョンがあり、もう少し明確になるはずです。しかし、それはやや奇妙な結果を生みます。これは、常に最初にベストフィットの残差を再サンプリングと同じ(私の最初のアイデア)に追加した結果であり、これは私が各反復の残差をリサンプリングし、それぞれの新しいベストフィットに追加した場合に何が起こるかです。何か案は?
Fred S

おっと、25行目の小さな間違い(p_est(:, 1)ではなくp_est(:, i)にする必要があります)でも、パラメーターの分布がまだ不安定に見えるように修正したとしても、クリック
Fred S

1
答えは修正され、MATLABでチェックされます。今ではうまくいきます。
O_Devinyak 2013

1
すべての適合に対する新しい残差-それが残差ブートストラップについての私の最初の理解でした。しかし、私は、さまざまなソースがその目的で元のデータへの適合の残差を使用していることを認めなければなりません。これがブートストラップに関する素晴らしいチュートリアルです(econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf)。あなたの実装が正しい間、私のアプローチは間違っているようです。与えられた答えを削除する必要がありますか?
O_Devinyak 2013

1
フォローアップありがとうございます。私見、同じ質問で他のユーザーに答えを残してください。文献(少なくとも私が入手できる文献)は、その主題について必ずしも明確であるとは限らず、かなり混乱する可能性があることがわかりました。
Fred S

1

予測精度/平均二乗誤差の観点からアルゴリズムの動作を確認するには、おそらくEfron-Gongの「楽観的」ブートストラップが必要です。これは、R rmsパッケージで簡単に使用できるように実装されています。その機能を参照してくださいolsvalidate.olscalibrate

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.