Я пытаюсь реализовать интерактивный алгоритм для оценки квантилей в данных, созданных в результате моделирования Монте-Карло. Я хочу сделать его итеративным, потому что у меня есть много итераций и переменных, поэтому сохранение всех точек данных и использование функции Matlab quantile займет большую часть памяти, которая мне действительно нужна для моделирования.
Я нашел несколько подходов на основе -W/full" rel="nofollow">процесс Роббина-Монро, заданный
Реализация с управляющей последовательностью ct = c / t, где c — константа, довольно проста. В цитируемой работе показано, что c = 2 * sqrt(2 * pi) дает неплохие результаты, по крайней мере, для медианы. Но они также предлагают адаптивный подход, основанный на оценке гистограммы. К сожалению, я пока не придумал, как реализовать эту адаптацию.
Я протестировал реализацию с константой c для трех тестовых образцов с 10 000 точек данных. Значение 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
, не уверен, что должен делатьprobabilities(indices)
. Кроме того, я думаю, что вам нужно что-то вродеquantile(index) = quantile(index-1) + control * indicator;
. Наконец, я думаю, что вы неправильно реализовалиc/t
. Я бы подумал, чтоt
- это время, если только экземпляры между вашими точками данных не равны 1сек. - person mpaskov   schedule 27.10.2016quantile
представляет собой вектор того же размера, что и вероятности, в данном случае 1x3, содержащий итеративные квантильные оценки дляprobabilities = [0.1, 0.4, 0.7]
. Последняя строка цикла for обновляет эти оценки. Конструкция индексов/индикаторов — это моя реализация индикаторной функции I, которая выбирает, когда использоватьprobabilities
илиprobabilities - 1
. - person JotWe   schedule 28.10.2016