मैथमेटिका का यादृच्छिक संख्या जनरेटर द्विपद संभावना से विचलन कर रहा है?


9

तो, चलो कहते हैं कि आप 10 बार एक सिक्का फ्लिप करते हैं, और उस 1 "घटना" को कॉल करते हैं। यदि आप इन "घटनाओं" में से 1,000,000 चलाते हैं, तो उन घटनाओं का अनुपात क्या है जिनके सिर 0.4 और 0.6 के बीच हैं? द्विपदीय संभावना यह 0.65 के बारे में बताएगी, लेकिन मेरा गणित कोड मुझे 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

हादसा कहां है?



1
@JeromyAnglim इस मामले में मुझे संदेह है कि समस्या शायद कड़ाई से कोडिंग के बजाय तर्क के साथ है।
Glen_b -Reinstate मोनिका

@Glen_b मुझे लगता है कि मुख्य बात यह है कि इंटरनेट पर कहीं अच्छा जवाब है, जो आप प्रदान करते हैं। :-)
जेरोमी एंग्लीम

जवाबों:


19

दुर्घटना सख्त से कम का उपयोग है।

दस टोस के साथ, अनुपात अनुपात के प्रमुख परिणाम प्राप्त करने का एकमात्र तरीका 0.4 और 0.6 के बीच सख्ती से है यदि आपको ठीक 5 सिर मिलते हैं। जिसके पास लगभग 0.246 ( ) की , जो आपके सिमुलेशन के बारे में है (सही तरीके से) ) दे।(105)(12)100.246

यदि आप अपनी सीमा में 0.4 और 0.6 को शामिल करते हैं, (अर्थात 10 टोस में 4, 5 या 6 हेड), तो परिणाम में लगभग 0.656 की संभावना है, जितना आपने उम्मीद की थी।

आपका पहला विचार यादृच्छिक संख्या जनरेटर के साथ कोई समस्या नहीं होनी चाहिए। इस तरह की समस्या अब से बहुत पहले इस्तेमाल किए गए मैथमेटिका जैसे भारी पैकेज में स्पष्ट थी।


विडंबना यह है कि @TimMcKnight ने हमारे लिए द्विपदीय संभावना का प्रदर्शन किया।
साइमन कुआंग

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 &]]

लेकिन, स्वयं वास्तविक प्रश्न के लिए, जैसा कि ग्लेन_ बी बताते हैं, द्विपद वितरण असतत है। मनाया सिर के साथ 10 सिक्का tosses में से , संभावना है कि सिर का नमूना अनुपात 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 गुना तेज है। मैं कल्पना करता हूं कि मैथेमेटिका में जितना मैं हूं उससे कहीं अधिक प्रवीण व्यक्ति भी इसे और तेज कर सकता है।


2
आप उपयोग करके 10 के अन्य कारक द्वारा अपने कोड को गति दे सकते हैं Total@Map[Counts@RandomVariate[BinomialDistribution[10, 1/2], 10^6], {4, 5, 6}]। मुझे संदेह है Counts[]कि एक अंतर्निहित फ़ंक्शन है, इसकी तुलना में अत्यधिक अनुकूलित है Select[], जिसे मनमाने ढंग से विधेय के साथ काम करना पड़ता है।
डेविड जांग

1

गणितज्ञ में संभाव्यता प्रयोग करना

गणितज्ञ संभाव्यता और वितरण के साथ काम करने के लिए एक बहुत ही सहज ढांचा प्रदान करता है और - जबकि उपयुक्त सीमाओं के मुख्य मुद्दे को संबोधित किया गया है - मैं इस प्रश्न का उपयोग इस संदर्भ में स्पष्ट और शायद उपयोगी के रूप में करना चाहूंगा।

आइए बस प्रयोगों को दोहराए जाने के लिए और हमारे स्वाद को फिट करने के लिए कुछ प्लॉट विकल्पों को परिभाषित करें:

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

पैरामीट्रिक वितरण के साथ काम करना

अब हम एक घटना के लिए विषम वितरण को परिभाषित कर सकते हैं जो कि एक (निष्पक्ष) सिक्के के में सिर का अनुपात है :π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
        ]
    }
]

जो हमें अनुपात के असतत वितरण की साजिश देता है: TheoreticalDistributionPlot

हम और लिए संभावनाओं की गणना करने के लिए तुरंत वितरण का उपयोग कर सकते हैं। :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}

मोंटे कार्लो प्रयोग करना

हम एक घटना के लिए वितरण का उपयोग बार-बार नमूना (मोंटे कार्लो) से कर सकते हैं।

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
    ]
]

EmpirialDistributionPlot

सैद्धांतिक / विषम वितरण के साथ इसकी तुलना करने से पता चलता है कि कभी भी बहुत कुछ इसमें फिट बैठता है:

Show @ {
   theoreticalPlot,
   empiricalPlot
}

ComparingDistributions


आप के संबंध में अधिक पृष्ठभूमि जानकारी के साथ एक समान पद पा सकते हैं मेथेमेटिका पर मेथेमेटिका एसई
GWR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.