Насколько хороша функция RAND() в Excel для моделирования методом Монте-Карло?
Я реализую моделирование методом Монте-Карло в трех переменных в Excel. Я использовал функцию RAND() для выборки из распределений Weibull (с длинными хвостами). Функции, применяемые к образцам, являются нелинейными, но гладкими (exp, ln, cos и т.д.). Результатом для каждого образца является пропуск/сбой, и общий результат - вероятность отказа.
Я также реализовал это как с помощью численного интегрирования, так и с помощью Монте-Карло в MathCad, получив одинаковый результат в обоих случаях. MathCad использует (я думаю) генератор случайных чисел Mersenne Twister.
Моя таблица Excel получает неизменно разные результаты (т.е. всегда больше). Я проверил, что уравнения одинаковы.
Какой генератор случайных чисел использует Excel и насколько он хорош? Возможно ли, что это является источником моей проблемы? Я предположил, что реализация Excel в exp, cos и т.д. В порядке.
Наконец, есть ли способ реализовать Монте-Карло, чтобы смягчить (известные) плохие свойства конкретного генератора случайных чисел? (Я слышал о цепях Маркова, случайных прогулках и т.д., Но на самом деле их мало знаю)
Большое спасибо.
Ответы
Ответ 1
В этой статье автор статьи Маккалоу (2008):
О точности статистических процедур в Microsoft Excel 2007 (Computational Statistics and Data Analysis)
Цитата из оригинальной статьи:
Генератор случайных чисел всегда были неадекватными. С Excel 2003, Microsoft попыталась реализовать Генератор Вихмана-Хилла и не удалось реализуйте его правильно. Фиксированный версия появляется в Excel 2007, но это исправить было сделано неправильно. Microsoft дважды не выполнила правильно дюжины строк кода, которые составляют Вихман-Хилл генератор; это то, что любой бакалавриат информатики должен быть в состоянии сделать. Случайный случай генератор чисел не удовлетворяет основные требования к случайному числу генератор, который будет использоваться для научных целей:
- как известно, не проходят стандартные тесты случайности, например, LEcuyer и Simards (2007) Тесты CRUSH (эти supersede Marsaglias (1996) DIEHARD тесты - см. Altman et al. (2004) для сравнение);
- не известно, что числа, которые приблизительно независимы в умеренное количество измерений;
- имеет неизвестную длину периода; и
- он не воспроизводится.
Дальнейшее обсуждение этих вопросов см. в сопроводительной статье McCullough (2008); производительность Excel 2007 в этой области неадекватна.
Ответ 2
Поскольку это лучший результат в Google, "насколько хороша функция Excel RAND(), стоит обновить ответы для более поздних версий Excel
В этой статье Гая Меларда "О точности статистических процедур в Microsoft Excel 2010" была протестирована функция RAND() в Excel 2010 и была существенно улучшена в 2007 или 2003 годах. Microsoft переключилась с некорректного генератора Wichmann и Hill (2007/2003) на алгоритм Mersenne Twister, который имеет гораздо большую длину цикла.
Авторы этой статьи проверили ее с помощью тестов "Маленькая раздавка", "Сокрушение" и "Большая раздача" для случайности и прошли почти все тесты.
Таким образом, хотя это, безусловно, не то же самое, что и True случайные числа, функция RAND() в Excel 2010 и, предположительно, более новые версии, больше не могут считаться ужасными.
Следует отметить, однако, что Excel 2010 по-прежнему использует два совершенно разных алгоритма для генератора случайных чисел VBA и RNG, который находится в наборе инструментов анализа данных. По словам Меларда, оба из них все еще ужасны, и на самом деле VBA каждый раз использует одинаковое количество семян, поэтому производит одинаковые цифры.
Мои самые большие жалобы со случайными числами в Excel
- Вы не можете установить семя, поэтому числа не воспроизводятся
- Случайные числа обновляются каждый раз, когда вы нажимаете кнопку ввода/удаления, и даже если вы задаете параметры расчета вручную, они все равно обновляются при сохранении файла Excel.
Ответ 3
Для этого есть коммерческие продукты. Google появляется два раза, прежде чем мне стало скучно смотреть
http://www.mathwave.com/articles/random-numbers-excel-worksheets.html
http://www.ozgrid.com/Services/excel-random-number-generator.htm
Ответ 4
Пол Уилмотт в своей книге "Количественная финансовая книга" просто добавляет результаты 12 звонков в RAND() и вычитает 6 для хорошего приближения к переменной Normal.
Quick n Dirty
Ответ 5
RAND()
довольно случайный, но для симуляций Монте-Карло может быть слишком чересчур случайным (если только вы не проводите тестирование на примитивность). Большинство симуляций Монте-Карло просто требуют псевдослучайных и детерминированных последовательностей. В рамках Excel Analysis ToolPak RANDBETWEEN()
может быть все, что вам нужно для псевдослучайных последовательностей.