이항 확률에서 벗어난 Mathematica의 난수 생성기?


9

동전을 10 번 뒤집어 1을 "이벤트"라고하겠습니다. 이 "이벤트"중 1,000,000 개를 실행하면 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

그 사고는 어디에 있습니까?


3
아마도이 더 티카 stackexchange에 적합 할 것 mathematica.stackexchange.com
제로미 Anglim

1
@JeromyAnglim이 경우 문제는 코딩이 아닌 추론에 의한 것 같습니다.
Glen_b-복지 주 모니카

@ Glen_b 가장 중요한 것은 인터넷 어딘가에 좋은 대답이 있다는 것입니다. :-)
Jeromy Anglim

답변:


19

잘못은 엄격 이하를 사용하는 것입니다.

10 번의 토스로 0.4에서 0.6 사이의 헤드 비율 결과를 얻는 유일한 방법은 정확히 5 개의 헤드를 얻는 것입니다. 약 0.246의 확률 ( )입니다. ).(105)(12)100.246

한계에 0.4와 0.6을 포함하면 (예 : 10 번의 토스에서 4, 5 또는 6 헤드) 결과는 예상대로 약 0.656의 확률을 갖습니다.

첫 번째 생각은 난수 생성기에 문제가되어서는 안됩니다. 이런 종류의 문제는 오래 전에 Mathematica와 같이 많이 사용되는 패키지에서 분명했을 것입니다.


아이러니하게도 @TimMcKnight는 우리에게 이항 확률을 보여주었습니다.
Simon Kuang

8

작성한 코드에 대한 의견 :

  • 에서 정의 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 &]].

그러나 Glen_b가 지적했듯이 실제 질문 자체에 대해서는 이항 분포가 이산 적입니다. 관측 된 머리를 가진 10 개의 코인 토스 중 , 머리의 샘플 비율 이 엄격하게 0.4와 0.6 사이 확률 은 실제로는 단지 . 즉, 반면, 사용자는 샘플 비율이 0.4 내지 0.6 인 확률 계산한다면 클루 시브 것이라고, 따라서 사용하려면 코드를 수정하기 만하면됩니다.xp^=x/10x=5

Pr[X=5]=(105)(0.5)5(10.5)50.246094.
Pr[4X6]=x=46(10x)(0.5)x(10.5)10x=67210240.65625.
0.4 <= # <= 0.6대신에. 물론 우리는
Length[Select[RandomVariate[BinomialDistribution[10,1/2],{10^6}], 4 <= # <= 6 &]]

이 명령은 원래 코드보다 약 9.6 배 빠릅니다. Mathematica에 있는 것보다 훨씬 능숙한 사람이 더 빠르게 할 수 있다고 생각합니다.


2
를 사용하여 코드를 10 배 더 빠르게 만들 수 있습니다 Total@Map[Counts@RandomVariate[BinomialDistribution[10, 1/2], 10^6], {4, 5, 6}]. Counts[]내장 함수 인 Select[]임의의 술어와 함께 작동 해야하는에 비해 최적화되어 있다고 생각 합니다.
David Zhang

1

Mathematica에서 확률 실험하기

Mathematica 는 확률과 분포에 대해 작업하기에 매우 편안한 프레임 워크를 제공하며, 적절한 한계의 주요 문제가 해결되었지만이 질문을 사용하여이를 명확하고 참조로 사용하고 싶습니다.

실험을 반복 가능하게하고 취향에 맞게 몇 가지 플롯 옵션을 정의 해 보겠습니다.

SeedRandom["Repeatable_151115"];
$PlotTheme = "Detailed";
SetOptions[Plot, Filling -> Axis];
SetOptions[DiscretePlot, ExtentSize -> Scaled[0.5], PlotMarkers -> "Point"];

모수 분포 작업

우리는 지금의 asymptotical 분포를 정의 할 수 있습니다 하나 개의 이벤트 비율입니다 의 머리가 A (공정) 동전의 발생을 :πn

distProportionTenCoinThrows = With[
    {
        n = 10, (* number of coin throws *)
        p = 1/2 (* fair coin probability of head*)
    },
    (* derive the distribution for the proportion of heads *)
    TransformedDistribution[
        x/n,
        x \[Distributed] BinomialDistribution[ n, p ]
    ];

With[
    {
        pr = PlotRange -> {{0, 1}, {0, 0.25}}
    },
    theoreticalPlot = DiscretePlot[
        Evaluate @ PDF[ distProportionTenCoinThrows, p ],
        {p, 0, 1, 0.1},
        pr
    ];
    (* show plot with colored range *)
    Show @ {
        theoreticalPlot,
        DiscretePlot[
            Evaluate @ PDF[ distProportionTenCoinThrows, p ],
            {p, 0.4, 0.6, 0.1},
            pr,
            FillingStyle -> Red,
            PlotLegends -> None
        ]
    }
]

이것은 우리에게 비율의 이산 분포 분포를 보여줍니다. 이론적 분포도

우리가 계산 확률에 즉시 분배를 사용할 수 및 :Pr[0.4π0.6|πB(10,12)]Pr[0.4<π<0.6|πB(10,12)]

{
    Probability[ 0.4 <= p <= 0.6, p \[Distributed] distProportionTenCoinThrows ],
    Probability[ 0.4 < p < 0.6, p \[Distributed] distProportionTenCoinThrows ]
} // N

{0.65625, 0.246094}

몬테카를로 실험하기

하나의 이벤트에 대한 분포를 사용하여 반복적으로 샘플링합니다 (Monte Carlo).

distProportionsOneMillionCoinThrows = With[
    {
        sampleSize = 1000000
    },
    EmpiricalDistribution[
        RandomVariate[
            distProportionTenCoinThrows,
            sampleSize
        ]
    ]
];

empiricalPlot = 
    DiscretePlot[
        Evaluate@PDF[ distProportionsOneMillionCoinThrows, p ],
        {p, 0, 1, 0.1}, 
        PlotRange -> {{0, 1}, {0, 0.25}} , 
        ExtentSize -> None, 
        PlotLegends -> None, 
        PlotStyle -> Red
    ]
]

경험적 분포도

이것을 이론적 / 무증상 분포와 비교하면 모든 것이 거의 일치한다는 것을 알 수 있습니다.

Show @ {
   theoreticalPlot,
   empiricalPlot
}

배포판 비교


당신에 관한 배경 정보와 유사한 포스트 찾을 수 있습니다 티카티카 SE를 .
gwr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.