मोंटे कार्लो सिमुलेशन का उपयोग कर अनुमानित


35

मैं मोंटे कार्लो सिमुलेशन में हाल ही में देख गया है, और अनुमानित स्थिरांक के लिए यह इस तरह के रूप उपयोग किया गया है (एक आयत, आनुपातिक क्षेत्र के अंदर वृत्त)।π

हालांकि, मैं मोंटे कार्लो एकीकरण का उपयोग करते हुए [यूलर की संख्या] के मूल्य का अनुमान लगाने की एक समान विधि के बारे में सोचने में असमर्थ हूं ।e

क्या आपके पास कोई संकेत है कि यह कैसे किया जा सकता है?


7
ऐसा करने के लिए कई, कई, कई तरीके हैं। यह कि Rकमांड क्या 2 + mean(exp(-lgamma(ceiling(1/runif(1e5))-1)))करता है , इस पर विचार करके स्पष्ट हो सकता है। (यदि लॉग गामा फ़ंक्शन का उपयोग करना आपको परेशान 2 + mean(1/factorial(ceiling(1/runif(1e5))-2))करता है , तो इसे बदलें , जो केवल जोड़, गुणा, भाग और छंटनी का उपयोग करता है, और अतिप्रवाह चेतावनी को अनदेखा करता है।) अधिक से अधिक ब्याज क्या हो सकता है कुशल सिमुलेशन: क्या आप संख्या को कम कर सकते हैं। किसी भी सटीकता के लिए का अनुमान लगाने के लिए कम्प्यूटेशनल चरणों की आवश्यकता है ? e
whuber

4
कैसा रमणीय प्रश्न है! मैं दूसरों के उत्तरों को पढ़ने के लिए उत्सुक हूं। एक तरीका है कि आप वास्तव में इस सवाल पर ध्यान आकर्षित कर सकते हैं - शायद एक और आधा दर्जन जवाब - सवाल को संशोधित करने और कुशल जवाब मांगने के लिए होगा , जैसा कि व्हीबर ने सुझाव दिया है। यह CV उपयोगकर्ताओं के लिए catnip की तरह है।
साइकोरैक्स का कहना है कि मोनिका

1
@EngrStudent मुझे यकीन नहीं है कि ज्यामितीय एनालॉग लिए मौजूद है । यह बस एक स्वाभाविक रूप से नहीं है (दंडित इरादा) ज्यामितीय मात्रा जैसे । eπ
Aksakal

6
@ अक्षल एक असाधारण ज्यामितीय मात्रा है। सबसे प्राथमिक स्तर पर यह हाइपरबोलस से संबंधित क्षेत्रों के लिए स्वाभाविक रूप से प्रकट होता है। थोड़े अधिक उन्नत स्तर पर यह त्रिकोणमितीय कार्यों सहित सभी आवधिक कार्यों से जुड़ा हुआ है, जिसकी ज्यामितीय सामग्री स्पष्ट है। यहाँ असली चुनौती यह है कि से संबंधित मूल्यों का अनुकरण करना इतना आसान है ! ee
whuber

2
@StatsStudent: अपने आप में दिलचस्प नहीं है। हालांकि, जैसे मात्रा निष्पक्ष आकलनकर्ता को यह सुराग अगर exp { एक्स 0( y ) जी ( y ) } इस एमसीएमसी एल्गोरिदम के लिए सबसे अधिक उपयोगी साबित हो सकता है। e
exp{0xf(y)dG(y)}
शीआन

जवाबों:


34

मोंटे कार्लो द्वारा का अनुमान लगाने का सरल और सुरुचिपूर्ण तरीका इस पेपर में वर्णित है । कागज वास्तव में शिक्षण के बारे में है । इसलिए, दृष्टिकोण आपके लक्ष्य के लिए पूरी तरह से उपयुक्त है। Gnedenko द्वारा संभावना सिद्धांत पर एक लोकप्रिय रूसी पाठ्यपुस्तक के एक अभ्यास पर आधारित विचार । पी .१ .३ पर देखें। २ee

यह इतना है कि , जहां ξ एक यादृच्छिक चर कि इस प्रकार के रूप में परिभाषित किया जाता है। यह की न्यूनतम संख्या है n ऐसा है कि Σ n मैं = 1 आर मैं > 1 और आर मैं पर समान वितरण से यादृच्छिक संख्या रहे हैं [ 0 , 1 ] । सुंदर, है ना ?!E[ξ]=eξni=1nri>1ri[0,1]

चूंकि यह एक व्यायाम है, मुझे यकीन नहीं है कि अगर मेरे लिए समाधान (प्रमाण) को यहां पोस्ट करना अच्छा है :) अगर आप इसे खुद को साबित करना चाहते हैं, तो यहां एक टिप है: अध्याय को "क्षण" कहा जाता है, जिसे इंगित करना चाहिए आप सही दिशा में

यदि आप इसे स्वयं लागू करना चाहते हैं, तो आगे न पढ़ें!

यह मोंटे कार्लो सिमुलेशन के लिए एक सरल एल्गोरिथ्म है। एक समान रैंडम ड्रा करें, फिर दूसरा एक और इसी तरह जब तक योग 1 से अधिक न हो जाए। तैयार किए गए रैंडम की संख्या आपका पहला परीक्षण है। मान लीजिये आपको मिल गया:

 0.0180
 0.4596
 0.7920

फिर आपका पहला परीक्षण 3 प्रस्तुत किया गया। इन परीक्षणों को करते रहें, और आप देखेंगे कि औसत में आपको मिलता है ।e

MATLAB कोड, सिमुलेशन परिणाम और हिस्टोग्राम का पालन करें।

N = 10000000;
n = N;
s = 0;
i = 0;
maxl = 0;
f = 0;
while n > 0
    s = s + rand;
    i = i + 1;
    if s > 1
        if i > maxl
            f(i) = 1;
            maxl = i;
        else
            f(i) = f(i) + 1;
        end
        i = 0;
        s = 0;
        n = n - 1;
    end
end

disp ((1:maxl)*f'/sum(f))
bar(f/sum(f))
grid on

f/sum(f)

परिणाम और हिस्टोग्राम:

2.7183


ans =

  Columns 1 through 8

         0    0.5000    0.3332    0.1250    0.0334    0.0070    0.0012    0.0002

  Columns 9 through 11

    0.0000    0.0000    0.0000

यहाँ छवि विवरण दर्ज करें

अद्यतन: मैंने परीक्षण परिणामों की सरणी से छुटकारा पाने के लिए अपना कोड अपडेट किया ताकि वह RAM न ले। मैंने पीएमएफ अनुमान भी छापा।

अद्यतन 2: यहाँ मेरा एक्सेल समाधान है। एक्सेल में एक बटन लगाएं और उसे निम्नलिखित VBA मैक्रो से लिंक करें:

Private Sub CommandButton1_Click()
n = Cells(1, 4).Value
Range("A:B").Value = ""
n = n
s = 0
i = 0
maxl = 0
Cells(1, 2).Value = "Frequency"
Cells(1, 1).Value = "n"
Cells(1, 3).Value = "# of trials"
Cells(2, 3).Value = "simulated e"
While n > 0
    s = s + Rnd()
    i = i + 1
    If s > 1 Then
        If i > maxl Then
            Cells(i, 1).Value = i
            Cells(i, 2).Value = 1
            maxl = i
        Else
            Cells(i, 1).Value = i
            Cells(i, 2).Value = Cells(i, 2).Value + 1
        End If
        i = 0
        s = 0
        n = n - 1
    End If
Wend


s = 0
For i = 2 To maxl
    s = s + Cells(i, 1) * Cells(i, 2)
Next


Cells(2, 4).Value = s / Cells(1, 4).Value

Rem bar (f / Sum(f))
Rem grid on

Rem f/sum(f)

End Sub

सेल D1 में 1000, जैसे परीक्षणों की संख्या दर्ज करें, और बटन पर क्लिक करें। पहले रन के बाद स्क्रीन कैसी दिखनी चाहिए:

यहाँ छवि विवरण दर्ज करें

अद्यतन 3: सिल्वरफ़िश ने मुझे दूसरे तरीके से प्रेरित किया, पहले की तरह सुरुचिपूर्ण नहीं, लेकिन अभी भी शांत। यह का उपयोग कर एन-simplexes की मात्रा की गणना Sobol दृश्यों।

s = 2;
for i=2:10
    p=sobolset(i);
    N = 10000;
    X=net(p,N)';
    s = s + (sum(sum(X)<1)/N);
end
disp(s)

2.712800000000001

संयोग से उन्होंने मोंटे कार्लो विधि पर पहली पुस्तक लिखी जो मैंने हाई स्कूल में पढ़ी। यह मेरी राय में विधि का सबसे अच्छा परिचय है।

अद्यतन 4:

टिप्पणियों में सिल्वरफ़िश ने एक सरल एक्सेल फॉर्मूला कार्यान्वयन का सुझाव दिया। लगभग 1 मिलियन यादृच्छिक संख्याओं और 185K परीक्षणों के बाद आपको इस तरह का परिणाम मिलता है:

यहाँ छवि विवरण दर्ज करें

जाहिर है, यह एक्सेल वीबीए कार्यान्वयन की तुलना में बहुत धीमा है। विशेष रूप से, यदि आप लूप के अंदर सेल वैल्यू को अपडेट नहीं करने के लिए मेरे VBA कोड को संशोधित करते हैं, और सभी आँकड़े एकत्र किए जाने के बाद ही इसे करते हैं।

अद्यतन 5

शीआन का समाधान # 3 बारीकी से संबंधित है (या थ्रेड में jwg की टिप्पणी के अनुसार कुछ अर्थों में भी ऐसा ही है)। यह कहना मुश्किल है कि सबसे पहले Forsythe या Gnedenko को इस विचार के साथ कौन आया था। रूसी में गेदेंको के मूल 1950 संस्करण में अध्याय में समस्याएं नहीं हैं। इसलिए, मुझे यह समस्या पहली नज़र में नहीं मिली, जहाँ यह बाद के संस्करणों में है। शायद इसे बाद में जोड़ा गया या पाठ में दफन किया गया।

जैसा कि मैंने शीआन के जवाब में टिप्पणी की, फोर्सिथ का दृष्टिकोण एक और दिलचस्प क्षेत्र से जुड़ा हुआ है: यादृच्छिक (आईआईडी) अनुक्रमों में चोटियों (एक्स्ट्रेमा) के बीच की दूरी का वितरण। औसत दूरी 3. होती है। फोर्सिथे के दृष्टिकोण में नीचे अनुक्रम नीचे के साथ समाप्त होता है, इसलिए यदि आप नमूना जारी रखते हैं तो आपको किसी और बिंदु पर एक और तल मिलेगा, फिर दूसरा आदि आप उनके बीच की दूरी को ट्रैक कर सकते हैं और वितरण का निर्माण कर सकते हैं।


वाह ये अच्छा है! क्या आप एक पैराग्राफ या दो को जोड़कर बता सकते हैं कि यह क्यों काम करता है?
साइकोरैक्स का कहना है कि मोनिका

7
(+1) शानदार! उत्तर उच्चतम चिह्न के योग्य है क्योंकि यह केवल समान सिमुलेशन पर निर्भर करता है। और किसी भी सन्निकटन का उपयोग नहीं करता है, लेकिन मोंटे कार्लो के कारण। यह Gnedenko को वापस जोड़ता है एक और पर्क है।
शीआन

2
ठंडा! यहाँ एक ही-लाइनर के रूप में उसी के लिए मैथेमेटिका कोड है:
Mean[Table[ Length[NestWhileList[(Random[]+#) &, Random[], #<1&]], {10^6}]]
wolfies

4
@wolfies Rशीआन के उत्तर में पोस्ट किए गए समाधान का निम्नलिखित प्रत्यक्ष अनुवाद बीस गुना तेज है:n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]
व्हिबर

1
मैंने पोस्ट किया है "मीन क्यों है ?" सवाल अपने आप में एक सवाल के रूप में ; मुझे अपने स्केच समाधान पर संदेह है (जो कि समस्या के "स्पष्ट" दृश्य के रूप में तुरंत दिमाग में आया था) जरूरी नहीं कि जिस तरह से रूसी छात्रों का इरादा था! तो वैकल्पिक समाधान बहुत स्वागत होगा। e
सिल्वरफिश

19

मैं अक्षल के उत्तर का सुझाव देता हूं। यह निष्पक्ष है और केवल यूनिट यूनिफॉर्म बनाने की विधि पर निर्भर करता है।

मेरा उत्तर मनमाने ढंग से सटीक बनाया जा सकता है, लेकिन फिर भी के वास्तविक मूल्य से दूर पक्षपाती है ।e

शीआन का जवाब सही है, लेकिन मुझे लगता है कि फ़ंक्शन या पॉसन यादृच्छिक विचलन पैदा करने का एक तरीका इसकी निर्भरता है जब उद्देश्य लगभग ई होता हैloge

बूटस्ट्रैपिंग द्वारा अनुमानित e

इसके बजाय, बूटस्ट्रैपिंग प्रक्रिया पर विचार करें। एक वस्तुओं की एक बड़ी संख्या है जिनमें से एक नमूने का आकार करने के लिए प्रतिस्थापन के साथ तैयार कर रहे हैं n । प्रत्येक ड्रा में की संभावना नहीं एक विशेष वस्तु ड्राइंग मैं है 1 - n - 1 , और देखते हैं n इस तरह खींचता है। संभावना है कि एक विशेष वस्तु को सभी ड्रॉ से छोड़ा गया है p = ( 1 - 1)nni1n1np=(11n)n.

क्योंकि मैं यह सोचते हैं रहा हूँ हम जानते हैं कि

exp(1)=limn(11n)n

इसलिए हम भी लिख सकते हैं

exp(1)p^=i=1mIiBjm

है यही कारण है, का हमारा अनुमान संभावना है कि एक विशिष्ट अवलोकन से छोड़ दिया जाता है का आकलन करने से पाया जाता है मीटर बूटस्ट्रैप प्रतिकृति बी जे वस्तु की घटनाओं के अंश यानी - कई ऐसे प्रतिकृति भर मैं बूटस्ट्रैप में।pmBji

इस सन्निकटन में त्रुटि के दो स्रोत हैं। परिमित का हमेशा मतलब होगा कि परिणाम अनुमानित हैं, अर्थात अनुमान पक्षपाती है। साथ ही, पी सही मूल्य के आसपास में उतार चढ़ाव होगा क्योंकि यह एक सिमुलेशन है।np^

क्योंकि एक स्नातक या पर्याप्त रूप से थोड़ा करने के लिए के साथ एक और व्यक्ति का अनुमान लगा सकता है मैं इस दृष्टिकोण कुछ हद तक आकर्षक लगता है ताश के पत्तों के, छोटे पत्थरों के ढेर, या हाथ में ऐसी किसी भी वस्तु का उपयोग कर, एक ही नस में के रूप में एक व्यक्ति का अनुमान कर सकता है π का उपयोग कर एक कम्पास, एक सीधे-किनारे और रेत के कुछ दाने। मुझे लगता है कि यह साफ-सुथरा है जब गणित को कंप्यूटर जैसी आधुनिक आवश्यकताओं से तलाक दिया जा सकता है।eπ

परिणाम

मैंने कई बूटस्ट्रैप प्रतिकृति के लिए कई सिमुलेशन किए। सामान्य अंतराल का उपयोग करके मानक त्रुटियों का अनुमान लगाया जाता है।

ध्यान दें कि की पसंद वस्तुओं की संख्या क्योंकि मोंटे कार्लो प्रक्रिया का आकलन कर रहा है परिणामों की सटीकता पर एक निरपेक्ष ऊपरी सीमा सेट को चलाया जा रहा है पी और पी केवल पर निर्भर करता है nN को अनावश्यक रूप से बड़ा करने के लिए सेट करना आपके कंप्यूटर को केवल एनकाउंटर करेगा, या तो क्योंकि आपको केवल ई के लिए "किसी न किसी" सन्निकटन की आवश्यकता है या क्योंकि मोंटे कार्लो के कारण पूर्वाग्रह को दलदल से निकाला जाएगा। इन परिणामों के लिए कर रहे हैं n = 10 3 और पी - 1 तीसरे दशमलव करने के लिए सही है।nppnnen=103p1e

इस साजिश से पता चलता है की पसंद है कि में स्थिरता के लिए प्रत्यक्ष और गहरा परिणाम है पी । नीली धराशायी रेखा पी दिखाती है और लाल रेखा दिखाती है । जैसी उम्मीद थी, नमूना आकार में वृद्धि कभी अधिक सटीक अनुमान का उत्पादन पीmp^pep^यहाँ छवि विवरण दर्ज करें

मैंने इसके लिए एक शर्मनाक लंबी आर स्क्रिप्ट लिखी। सुधार के सुझाव $ 20 बिल के पीछे जमा किए जा सकते हैं।

library(boot)
library(plotrix)
n <- 1e3

## if p_hat is estimated with 0 variance (in the limit of infinite bootstraps), then the best estimate we can come up with is biased by exactly this much:
approx <- 1/((1-1/n)^n)

dat <- c("A", rep("B", n-1))
indicator <- function(x, ndx)   xor("A"%in%x[ndx], TRUE) ## Because we want to count when "A" is *not* in the bootstrap sample

p_hat <- function(dat, m=1e3){
    foo <- boot(data=dat, statistic=indicator, R=m) 
    1/mean(foo$t)
} 

reps <- replicate(100, p_hat(dat))

boxplot(reps)
abline(h=exp(1),col="red")

p_mean <- NULL
p_var <- NULL
for(i in 1:10){
    reps <- replicate(2^i, p_hat(dat))
    p_mean[i] <- mean(reps)
    p_var[i] <- sd(reps)
}
plotCI(2^(1:10), p_mean, uiw=qnorm(0.975)*p_var/sqrt(2^(1:10)),xlab="m", log="x", ylab=expression(hat(p)), main=expression(paste("Monte Carlo Estimates of ", tilde(e))))
abline(h=approx, col='red')

4
+1 यह बहुत मायने रखता है। यदि आपने इसे लिखा है तो कोई भी मौका आप अपना कोड साझा कर सकते हैं?
एंटोनी पारेलाडा

2
हालांकि इस मनमाने ढंग से सही हो सकता है, अंत में यह असंतोषजनक है क्योंकि यह केवल एक simulates सन्निकटन करने के लिए के बजाय ही। ee
whuber

1
ज़रूर। आप बस दूसरे के अंदर एक प्रतिकृति कॉल के साथ समाप्त करेंगे, जो अनिवार्य रूप से वैसा ही है जैसा कि अब हमारे पास है।
साइकोरैक्स का कहना है कि मोनिका

1
@ जब मैं वास्तव में एक मनमाने ढंग से सटीक सन्निकटन के बीच अंतर को मनमाने ढंग से सटीक सन्निकटन बीच नहीं देखता , और ई को ही एक मनमाने ढंग से सटीक सन्निकटन । ee
jwg

1
@jwg वैचारिक रूप से महत्वपूर्ण होने के अलावा, यह व्यावहारिक रूप से भी महत्वपूर्ण है क्योंकि एक सन्निकटन को लागू करने के लिए दो सन्निकटन में से प्रत्येक कितना सटीक है, इस पर नज़र रखने की आवश्यकता होती है। लेकिन मुझे इस बात से सहमत होना होगा कि जब दोनों अनुमान काफी अच्छे हैं, तो वास्तव में समग्र दृष्टिकोण ठीक है।
whuber

14

समाधान 1:

एक पॉसन वितरण के लिए, पी ( एक्स = के ) = λ kP(λ) इसलिए, यदि एक्स ~ पी ( 1 ) , पी ( एक्स = 0 ) = पी ( एक्स = 1 ) = - 1 जो साधन आप अनुमान कर सकते हैं- 1 एक प्वासों अनुकरण द्वारा। और पोइसन सिमुलेशन एक घातीय वितरण जनरेटर से प्राप्त किया जा सकता है (यदि सबसे कुशल तरीके से नहीं)।

P(X=k)=λkk!eλ
XP(1)
P(X=0)=P(X=1)=e1
e1

टिप्पणी 1: जैसा कि टिप्पणियों में चर्चा की गई है, यह एक पॉसिज़न वितरण से अनुकरण करने के बाद से एक अधिक जटिल तर्क है या समान रूप से एक एक्सपोनेंशियल डिस्ट्रीब्यूशन में लॉग या एक्सप फ़ंक्शन को शामिल किए बिना कल्पना करना मुश्किल हो सकता है ... लेकिन तब डब्ल्यू। ह्यूबर आया था। आदेशित वर्दी के आधार पर सबसे सुरुचिपूर्ण समाधान के साथ इस उत्तर का बचाव। जो एक सन्निकटन है , हालांकि, एक समान रिक्ति का वितरण एक बीटा B ( 1 , n ) है।U(i:n)U(i1:n)B(1,n), जिसका अर्थ है कि जो किe-1मेंपरिवर्तित होता हैक्योंकिnअनंत तक बढ़ता है। टिप्पणियों के जवाब में एक दूसरे के रूप में, वॉन न्यूमैन के 1951 घातीय जनरेटरकेवल एकसमान पीढ़ियों का उपयोग करता है।

P(n{U(i:n)U(i1:n)}1)=(11n)n
e1n

समाधान 2:

e

X1,X2iidN(0,1)
(X12+X22)χ12
E(1/2)
P(X12+X222)=1{1exp(2/2)}=e1
e(X1,X2)X12+X222πX12+X22<1

समाधान 3:

u1,u2,...un+1>unNeNe1expG(x)ee1

1/n!n

फोर्सिथे की विधि का एक त्वरित आर कार्यान्वयन बड़े ब्लॉकों के पक्ष में वर्दी के अनुक्रम के ठीक बाद से गुजरना है, जो समानांतर प्रसंस्करण की अनुमति देता है:

use=runif(n)
band=max(diff((1:(n-1))[diff(use)>0]))+1
bends=apply(apply((apply(matrix(use[1:((n%/%band)*band)],nrow=band),
2,diff)<0),2,cumprod),2,sum)

12
e

5
eE(1)loge1P(1)

5
logexpn <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)

3
xnnxixn1n1xi1nxi1n1xi

3
n+1n

7

समाधान नहीं ... बस एक त्वरित टिप्पणी है जो टिप्पणी बॉक्स के लिए बहुत लंबी है।

Aksakal

अक्सकल ने एक समाधान पोस्ट किया जहां हम मानक यूनिफ़ॉर्म ड्रॉइंग की अपेक्षित संख्या की गणना करते हैं, जिसे लिया जाना चाहिए, जैसे कि उनका योग 1 से अधिक होगा। मैथेमेटिका में , मेरा पहला सूत्रीकरण था:

mrM := NestWhileList[(Random[] + #) &, Random[], #<1 &]

Mean[Table[Length[mrM], {10^6}]] 

संपादित करें: बस इसके साथ एक त्वरित खेल था, और निम्न कोड (एक ही विधि - मम्मा में भी - बस अलग कोड) लगभग 10 गुना तेज है:

Mean[Table[Module[{u=Random[], t=1},  While[u<1, u=Random[]+u; t++]; t] , {10^6}]]

जियान / Whuber

Whuber ने जियान के समाधान 1 का अनुकरण करने के लिए तेज़ कूल कोड का सुझाव दिया है:

आर संस्करण: n <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)

Mma संस्करण: n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]

जो वह नोट करता है वह पहले कोड से 20 गुना तेज होता है (या ऊपर दिए गए नए कोड से दोगुना तेज)।

बस मज़े के लिए, मुझे लगा कि यह देखना दिलचस्प होगा कि क्या दोनों दृष्टिकोण उतने ही कुशल हैं (एक सांख्यिकीय अर्थ में)। ऐसा करने के लिए, मैंने ई का उपयोग करके 2000 का अनुमान लगाया:

  • अक्षल की विधि: डेटाए
  • श्वेत कोड का उपयोग करके जियान की विधि 1: डेटाबी

... दोनों गणितज्ञों में । निम्न आरेख परिणामी डेटाए और डेटाबी डेटा सेटों के एक गैर-पैरामीटर कर्नेल घनत्व अनुमान के विपरीत है।

यहाँ छवि विवरण दर्ज करें

इसलिए, जबकि व्हिबर कोड (लाल वक्र) लगभग दोगुना है, विधि 'विश्वसनीय' के रूप में प्रकट नहीं होती है।


वास्तविक मान के स्थान पर एक ऊर्ध्वाधर रेखा इस छवि को काफी हद तक सुधार देगी।
साइकोरैक्स का कहना है कि मोनिका

1
यह एक बहुत ही दिलचस्प अवलोकन है, धन्यवाद। चूंकि अर्ध-चौड़ाई सिमुलेशन के आकार के साथ चतुष्कोण पैमाने पर होगी और शीआन की विधि की आधी-चौड़ाई अक्सकल की तुलना में लगभग दो गुना है, तो चार बार चलने के बाद भी कई पुनरावृत्तियां उन्हें समान रूप से सटीक बनाएंगी। सवाल यह है कि प्रत्येक पुनरावृत्ति में कितने प्रयास की आवश्यकता है: यदि शीआन की विधि का एक पुनरावृत्ति प्रयास में एक चौथाई से भी कम समय लेता है, तो वह विधि अभी भी अधिक कुशल होगी।
whuber

1
n

1
running four times as many iterations will make them equally accurate106106

1
कोड के साथ अच्छी तरह से किया - उस पर बहुत सुधार करना मुश्किल होगा।
’को

2

विधि नमूने की एक ungodly राशि की आवश्यकता होती है

पहले आपको एक सामान्य वितरण से नमूना लेने में सक्षम होना चाहिए। मान लें कि आप फ़ंक्शन के उपयोग को बाहर करने जा रहे हैं(एक्स)=एक्स, या उस फ़ंक्शन से प्राप्त तालिकाओं को देखें, आप CLT के माध्यम से सामान्य वितरण से अनुमानित नमूने का उत्पादन कर सकते हैं। उदाहरण के लिए, यदि आप एक समान (0,1) वितरण से नमूना ले सकते हैं, तोएक्स¯12n~˙एन(0,1)। जैसा कि व्हूबर द्वारा बताया गया है, अंतिम अनुमान दृष्टिकोण के लिए जैसा कि नमूना आकार दृष्टिकोण , यह आवश्यक होगा कि वर्दी नमूनों की संख्या दृष्टिकोण का उपयोग करें के रूप में नमूना आकार अनन्तता के पास।

अब, यदि आप एक सामान्य वितरण से नमूना कर सकते हैं, बड़े पर्याप्त नमूनों के साथ, आप के घनत्व के अनुरूप अनुमान प्राप्त कर सकते हैं एन(0,1)। यह हिस्टोग्राम या कर्नेल स्मूचर्स के साथ किया जा सकता है (लेकिन ध्यान रहे कि गॉसियन कर्नेल का उपयोग न करेंएक्सशासन!)। आपके घनत्व के अनुमानों के अनुरूप होने के लिए, आपको अपने डीएफ (हिस्टोग्राम में डिब्बे की संख्या, चिकनी के लिए खिड़की का उलटा) को अनंत तक पहुंचाने की आवश्यकता होगी, लेकिन नमूना आकार की तुलना में धीमा।

तो अब, बहुत सारी कम्प्यूटेशनल शक्ति के साथ, आप एक के घनत्व को अनुमानित कर सकते हैं एन(0,1), अर्थात φ^(एक्स)। जबसेφ((2))=(2π)-1/2-1, आपके अनुमान के लिए =φ^(2)2π

यदि आप पूरी तरह से पागल होना चाहते हैं, तो आप अनुमान भी लगा सकते हैं 2 तथा 2π आपके द्वारा पहले बताई गई विधियों का उपयोग करना।

विधि को बहुत कम नमूनों की आवश्यकता होती है, लेकिन संख्यात्मक त्रुटि के एक अस्पष्ट राशि के कारण

एक पूरी तरह से मूर्ख, लेकिन बहुत ही कुशल, एक टिप्पणी के आधार पर जवाब मैंने बनाया:

चलो एक्स~वर्दी(-1,1)। परिभाषित करेंYn=|(एक्स¯)n|। परिभाषित करें^=(1-Yn)-1/Yn

यह बहुत तेजी से अभिसरण करेगा , लेकिन अत्यधिक संख्यात्मक त्रुटि में भी चलेगा।

व्हीबर ने बताया कि यह पावर फ़ंक्शन का उपयोग करता है, जो आमतौर पर एक्सप फ़ंक्शन को कॉल करता है। इसे विवेकहीन करके खत्म किया जा सकता हैYn, ऐसा है कि 1/Ynएक पूर्णांक है और शक्ति को बार-बार गुणा से बदला जा सकता है। यह आवश्यक होगा किn, the discretizing of Yn would get finer and finer,and the discretization would have to exclude Yn=0. With this, the estimator theoretically (i.e. the world in which numeric error does not exist) would converge to e, and quite fast!


2
सीएलटी दृष्टिकोण संतोषजनक से कम है क्योंकि अंततः आप जानते हैं कि ये मूल्य सामान्य रूप से वितरित नहीं हैं । लेकिन बिना जरूरत के नॉर्मल वैरिएट्स जेनरेट करने के बहुत सारे तरीके हैंया लघुगणक: बॉक्स-मुलर विधि एक है। हालांकि, एक को ट्रिगर कार्यों की आवश्यकता होती है और (एक मौलिक स्तर पर) वे घातांक के समान होते हैं।
whuber

1
@ वाउचर: मैंने अपनी पुस्तक में घातांक के लिए आवश्यक लॉग रूपांतरण के कारण बॉक्स-मुलर का उपयोग नहीं किया। मुझे स्पष्ट रूप से कॉस और पाप की अनुमति होगी , लेकिन यह केवल इसलिए था क्योंकि मैं एक पल के लिए जटिल विश्लेषण के बारे में भूल गया था, इसलिए अच्छा बिंदु।
क्लिफ एबी

1
However, I would take argument with the idea that the generated normal approximation is the weak point of this idea; the density estimation is even weaker! You can think of this idea of having two parameters: n1, the number uniforms used in your "approximated normal" and n2 the number of approximated normals used estimate the density at ϕ(2). As both n1 and n2 approach , the estimator will approach e. In fact, I'm very confident the convergence rate would be much more limited by n2 than n1; non-parametric density has a slow convergence rate!
एबी एबी

2

यहां एक और तरीका दिया जा सकता है, हालांकि यह काफी धीमा है। मैं दक्षता का कोई दावा नहीं करता, लेकिन पूर्णता की भावना में इस विकल्प की पेशकश करता हूं।

कॉन्ट्रा शीआन का जवाब, मैं इस सवाल के उद्देश्यों के लिए मानूंगा कि आप एक अनुक्रम बनाने और उपयोग करने में सक्षम हैंn वर्दी छद्म यादृच्छिक चर यू1,,यूn~आईआईडी यू(0,1) और फिर आपको अनुमान लगाने की आवश्यकता है बुनियादी अंकगणितीय संचालन (यानी, आप लॉगरिदमिक या घातीय कार्यों या इन कार्यों का उपयोग करने वाले किसी भी वितरण का उपयोग नहीं कर सकते हैं) द्वारा किसी विधि द्वारा। वर्तमान पद्धति एक समान परिणाम से प्रेरित है जिसमें समरूप यादृच्छिक चर शामिल हैं:

(मैं(यूमैं1/)यूमैं)=1/1यूयू=1।

आकलन इस परिणाम का उपयोग करना: हम पहले ऑर्डर के आंकड़े प्राप्त करने के लिए नमूना मूल्यों को अवरोही क्रम में क्रमबद्ध करते हैंयू(1)यू(n) और फिर हम आंशिक रकम को परिभाषित करते हैं:

एसn(कश्मीर)1nΣमैं=1कश्मीर1यू(मैं)सबके लिए कश्मीर=1,,n

अब छोडो मीटरमिनट{कश्मीर|एस(कश्मीर)1} और फिर अनुमान करें 1/आदेशित वर्दी चर के प्रक्षेप द्वारा। यह के लिए एक अनुमानक देता है के द्वारा दिया गया:

^2यू(मीटर)+यू(मीटर+1)

इस पद्धति में कुछ मामूली पूर्वाग्रह हैं (कट-ऑफ पॉइंट के रैखिक प्रक्षेप के कारण 1/) लेकिन यह इसके लिए एक सुसंगत अनुमानक है । विधि को काफी आसानी से लागू किया जा सकता है, लेकिन इसके लिए मूल्यों की छंटाई की आवश्यकता होती है, जो कि नियतात्मक गणना की तुलना में अधिक कम्प्यूटेशनल रूप से गहन है। यह विधि धीमी है, क्योंकि इसमें मूल्यों की छंटाई शामिल है।

आर में कार्यान्वयन: विधि में लागू किया जा सकता Rका उपयोग कर runifएक समान मूल्यों उत्पन्न करने के लिए। कोड निम्नानुसार है:

EST_EULER <- function(n) { U <- sort(runif(n), decreasing = TRUE);
                           S <- cumsum(1/U)/n;
                           m <- min(which(S >= 1));
                           2/(U[m-1]+U[m]); }

इस कोड को लागू करने से वास्तविक मूल्य का अभिसरण होता है , लेकिन यह नियतात्मक तरीकों की तुलना में बहुत धीमा है।

set.seed(1234);

EST_EULER(10^3);
[1] 2.715426

EST_EULER(10^4);
[1] 2.678373

EST_EULER(10^5);
[1] 2.722868

EST_EULER(10^6); 
[1] 2.722207

EST_EULER(10^7);
[1] 2.718775

EST_EULER(10^8);
[1] 2.718434

> exp(1)
[1] 2.718282

मैं यह दृष्टिकोण लेता हूं कि हम किसी भी तरीके से बचना चाहते हैं जो किसी भी परिवर्तन का उपयोग करता है जिसमें एक घातांक या लघुगणक शामिल है। यदि हम घनत्वों का उपयोग कर सकते हैं जो उनकी परिभाषा में घातांक का उपयोग करते हैं तो इसे प्राप्त करना संभव है इन बीजगणित से एक घनत्व कॉल का उपयोग कर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.