私は、モンテカルロシミュレーションから生成されたデータの分位数を推定するための中間アルゴリズムを実装しようとしています。多くの反復と変数があるので、すべてのデータポイントを保存し、Matlabのquantile関数を使用すると、実際にシミュレーションに必要なメモリの大半を占めるため、反復する必要があります。Matlabの反復分位数推定
I Cは定数であるトン = C/T cは制御配列と
によって実装が与えられ、Robbin-Monro processに基づいて、いくつかのアプローチを発見は非常に単純です。引用した論文では、c = 2 * sqrt(2 * pi)は少なくとも中央値ではかなり良い結果を示しています。しかし、彼らはまた、ヒストグラムの推定に基づく適応的アプローチを提案する。残念ながら、私はまだこの適応をどのように実装するかを考え出していません。
私は、10.000データポイントで3つの試験サンプルについてimplementation with a constantcを試験しました。値c = 2 * sqrt(2 * pi)は私にとってうまくいっていませんでしたが、c = 100はテストサンプルではかなりよく見えます。しかし、この選択は非常に堅牢ではなく、実際のモンテカルロシミュレーションでは失敗し、結果を大きく左右します。
probabilities = [0.1, 0.4, 0.7];
controlFactor = 100;
quantile = zeros(size(probabilities));
indicator = zeros(size(probabilities));
for index = 1:length(data)
control = controlFactor/index;
indices = (data(index) >= quantile);
indicator(indices) = probabilities(indices);
indices = (data(index) < quantile);
indicator(indices) = probabilities(indices) - 1;
quantile = quantile + control * indicator;
end
反復分位数推定のために、より堅牢な解決策はありますか誰もが小さなメモリ消費と適応アプローチの実装がありますか?
いくつかのポテンシャルの問題: 'indices'は' 1'と '0'の配列で、どのような'確率(インデックス) 'がすべきか分かりません。さらに、私はあなたが 'quantile(index)= quantile(index-1)+ control * indicator;のようなものを望んでいると思うでしょう。最後に、データポイント間のインスタンスが1sekでない限り、 't 'は時間だと思うでしょうが、' c/t'を正しく実装していないと思います。 – mpaskov
コメントありがとうございます。私の意見では、インデックス_t_は繰り返しカウンタを表しているだけなので、時間はかかりません。変数「quantile」は確率と同じ大きさのベクトルで、この場合は1x3で、確率= [0.1、0.4、0.7]の反復分位数推定を含んでいます。 forループの最後の行は、これらの推定値を更新します。インデックス/インジケータの構成は、「確率」または「確率-1」をいつ使用するかを選択するインジケータ関数_I_の実装です。 – JotWe