Итак, допустим, вы подбрасываете монету 10 раз и называете это «событием». Если вы запустите 1000000 из этих «событий», какова доля событий с головами от 0,4 до 0,6? Биноминальная вероятность предполагает, что это будет около 0,65, но мой код Mathematica говорит мне о 0,24
Вот мой синтаксис:
In[2]:= X:= RandomInteger[];
In[3]:= experiment[n_]:= Apply[Plus, Table[X, {n}]]/n;
In[4]:= trialheadcount[n_]:= .4 < Apply[Plus, Table[X, {n}]]/n < .6
In[5]:= sample=Table[trialheadcount[10], {1000000}]
In[6]:= Count[sample2,True];
Out[6]:= 245682
Где неудача?
computational-statistics
mathematica
Тим Макнайт
источник
источник
Ответы:
Несчастный случай - это использование строгих правил.
С десятью бросками единственный способ получить результат пропорции голов строго между 0,4 и 0,6 - это получить ровно 5 голов. Это имеет вероятность около 0,246 ( ), что соответствует вашим моделям (правильно ) дать.(105) (12)10≈ 0,246
Если вы включите в свои пределы 0,4 и 0,6 (т. Е. 4, 5 или 6 голов в 10 бросках), то с вероятностью приблизительно 0,656, как вы и ожидали.
Ваша первая мысль не должна быть проблемой с генератором случайных чисел. Такая проблема была бы очевидна в такой интенсивно используемой упаковке, как Mathematica, задолго до этого.
источник
Некоторые комментарии о написанном вами коде:
experiment[n_]
но никогда не использовали его, вместо этого повторяя его определение вtrialheadcount[n_]
.experiment[n_]
может быть гораздо более эффективно запрограммирован (без использования встроенной командыBinomialDistribution
),Total[RandomInteger[{0,1},n]/n
и это также сделаетX
ненужным.experiment[n_]
строго от 0,4 до 0,6, более эффективно достигается путем написанияLength[Select[Table[experiment[10],{10^6}], 0.4 < # < 0.6 &]]
.0.4 <= # <= 0.6
вместо. Но, конечно, мы могли бы также написатьЭта команда примерно в 9,6 раза быстрее вашего исходного кода. Я предполагаю, что кто-то еще более опытный, чем я в Mathematica, мог бы ускорить это еще дальше.
источник
Total@Map[Counts@RandomVariate[BinomialDistribution[10, 1/2], 10^6], {4, 5, 6}]
. Я подозреваюCounts[]
, что, будучи встроенной функцией, она сильно оптимизирована по сравнению с тойSelect[]
, которая должна работать с произвольными предикатами.Выполнение вероятностных экспериментов в Mathematica
Mathematica предлагает очень удобную структуру для работы с вероятностями и распределениями, и - хотя основной вопрос о соответствующих пределах был рассмотрен - я хотел бы использовать этот вопрос, чтобы сделать его более понятным и, возможно, полезным в качестве справочного материала.
Давайте просто сделаем эксперименты повторяемыми и определим некоторые параметры сюжета на наш вкус:
Работа с параметрическими распределениями
Что дает нам график дискретного распределения пропорций:
Делать эксперименты Монте-Карло
Мы можем использовать распределение для одного события, чтобы многократно выбирать из него (Монте-Карло).
Сравнение этого с теоретическим / асимптотическим распределением показывает, что все в значительной степени вписывается в:
источник