Подтвердить что ты не робот

Насколько хороша функция RAND() в Excel для моделирования методом Монте-Карло?

Я реализую моделирование методом Монте-Карло в трех переменных в Excel. Я использовал функцию RAND() для выборки из распределений Weibull (с длинными хвостами). Функции, применяемые к образцам, являются нелинейными, но гладкими (exp, ln, cos и т.д.). Результатом для каждого образца является пропуск/сбой, и общий результат - вероятность отказа.

Я также реализовал это как с помощью численного интегрирования, так и с помощью Монте-Карло в MathCad, получив одинаковый результат в обоих случаях. MathCad использует (я думаю) генератор случайных чисел Mersenne Twister.

Моя таблица Excel получает неизменно разные результаты (т.е. всегда больше). Я проверил, что уравнения одинаковы.

Какой генератор случайных чисел использует Excel и насколько он хорош? Возможно ли, что это является источником моей проблемы? Я предположил, что реализация Excel в exp, cos и т.д. В порядке.

Наконец, есть ли способ реализовать Монте-Карло, чтобы смягчить (известные) плохие свойства конкретного генератора случайных чисел? (Я слышал о цепях Маркова, случайных прогулках и т.д., Но на самом деле их мало знаю)

Большое спасибо.

4b9b3361

Ответ 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.

Ответ 4

Пол Уилмотт в своей книге "Количественная финансовая книга" просто добавляет результаты 12 звонков в RAND() и вычитает 6 для хорошего приближения к переменной Normal. Quick n Dirty

Ответ 5

RAND() довольно случайный, но для симуляций Монте-Карло может быть слишком чересчур случайным (если только вы не проводите тестирование на примитивность). Большинство симуляций Монте-Карло просто требуют псевдослучайных и детерминированных последовательностей. В рамках Excel Analysis ToolPak RANDBETWEEN() может быть все, что вам нужно для псевдослучайных последовательностей.