बूटस्ट्रैप प्रक्रियाओं और मोंटे कार्लो प्रक्रियाओं के बीच यह भ्रम आवर्ती बना रहता है, इसलिए शायद यह उतना ही अच्छा स्थान है जितना कि इसे संबोधित करना। ( R
कोड के उदाहरण होमवर्क के साथ भी मदद कर सकते हैं।)
बूटस्ट्रैप के इस कार्यान्वयन पर विचार करें :R
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
एक त्वरित नज़र यह पुष्टि करेगा कि यह एक नियतात्मक गणना है: कोई यादृच्छिक मान उत्पन्न या उपयोग नहीं किया जाता है। (मैं रुचि रखने वाले पाठकों के लिए अपने भीतर के कामकाज का विवरण छोड़ दूंगा।
तर्कों को boot
सरणी में संख्यात्मक डेटा का एक बैच हैं x
और एक संदर्भ t
एक समारोह (है कि वास्तव में की तरह सरणियों के लिए लागू किया जा सकता करने के लिए x
) एक एकल अंकीय मान वापस जाने के लिए; दूसरे शब्दों में, t
एक आँकड़ा है । यह सभी संभावित नमूनों को प्रतिस्थापन से उत्पन्न करता है x
और t
उनमें से प्रत्येक पर लागू होता है, जिससे इस तरह के प्रत्येक नमूने के लिए एक नंबर का उत्पादन होता है: यह बूटस्ट्रैप संक्षेप में है। वापसी मूल्य एक सरणी है जो नमूने के लिए सटीक बूटस्ट्रैप वितरण का प्रतिनिधित्व करता है ।t
x
एक छोटे से उदाहरण के रूप में , के एक नमूने के लिए मतलब bootstrap जाने x
= c(1,3)
:
> boot(c(1,3), mean)
> [1] 1 2 2 3
से प्रतिस्थापन के साथ आकार वास्तव में चार संभावित नमूने हैं ; अर्थात्, , , , और । उन सभी को उत्पन्न करता है (केवल सूचीबद्ध क्रम में) और उनमें से प्रत्येक पर लागू होता है। इस मामले में माध्य की गणना की जाती है और वे क्रमशः , , और निकलते हैं, जैसा कि आउटपुट में दिखाया गया है।2( 1 , 3 )( 1 , 1 )( 1 , 3 )( ३ , १ )( 3 , 3 )boot
t
t
1223
आप यहां से जाते हैं, इस बात पर निर्भर करता है कि आप बूटस्ट्रैप का उपयोग कैसे करना चाहते हैं। पूर्ण बूटस्ट्रैप के बारे में जानकारी इस उत्पादन सरणी में स्थित है, इसलिए यह आम तौर पर एक अच्छा विचार यह प्रदर्शित करने के लिए है। यहाँ एक उदाहरण है जहाँ मानक विचलन नमूना से बूटस्ट्रैप किया गया है :( 1 , 3 , 3 , 4 , 7 )
hist(boot(c(1,3,3,4,7), sd))
अब हम मोंटे कार्लो सिमुलेशन के बारे में बात करने के लिए तैयार हैं । मान लीजिए, कहते हैं, हम अपने बूटस्ट्रैप वितरण के ऊपरी 95 वें प्रतिशतक का उपयोग करके नमूने से एसडी पर 95% ऊपरी विश्वास सीमा को बूटस्ट्रैप करने जा रहे थे । इस प्रक्रिया के क्या गुण होंगे? यह पता लगाने का एक तरीका है कि नमूना एक समान वितरण से यादृच्छिक रूप से प्राप्त किया गया था। (एप्लिकेशन अक्सर इंगित करेगा कि एक उचित वितरण अनुमान क्या हो सकता है? यहां, मैंने मनमाने ढंग से एक को चुना है जो गणना के लिए सरल है, लेकिन विश्लेषणात्मक रूप से निपटने के लिए आसान नहीं है।) हम इस तरह के एक नमूना लेने और यूसीएल की गणना करके क्या अनुकरण कर सकते हैं।5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
इस विशेष यादृच्छिक नमूने का परिणाम 3.83587 है। यह निश्चित है: क्या आप डेटा boot
के एक ही सेट के साथ फिर से कॉल करने के लिए थे , जवाब बिल्कुल वैसा ही होगा। लेकिन विभिन्न यादृच्छिक नमूनों के साथ उत्तर कैसे बदल सकता है? इस प्रक्रिया को कुछ बार दोहराकर और परिणामों का हिस्टोग्राम ड्रा करके पता करें:
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)
क्या हम सिमुलेशन का एक और सेट करने के लिए थे, यादृच्छिक ड्रॉ अलग-अलग निकलेंगे, जो एक (थोड़ा) अलग हिस्टोग्राम बना रहा है - लेकिन इस से बहुत अलग नहीं है। हम यह समझने के लिए कुछ विश्वास के साथ उपयोग कर सकते हैं कि SD का बूटस्ट्रैप UCL कैसे काम कर रहा है। संदर्भ के लिए, ध्यान दें कि एक समान वितरण का मानक विचलन ( यहां निर्दिष्ट के रूप में से तक की सीमा ) बराबर है । जैसा कि कोई भी यूसीएल अपने नमक के लायक होने की उम्मीद करता है, हिस्टोग्राम में मूल्यों का बहुमत (तीन-चौथाई या 0.75) इससे अधिक है:010१० / १२--√≈ 2.887
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
लेकिन वह नाममात्र 95% के पास है जो हमने निर्दिष्ट किया था (और उम्मीद कर रहे थे)! यह अनुकरण का एक मूल्य है: यह हमारी आशाओं की तुलना करता है कि वास्तव में क्या चल रहा है। (विसंगति क्यों? मेरा मानना है कि यह इसलिए है क्योंकि बूटस्ट्रैपिंग एक एसडी वास्तव में छोटे नमूनों के साथ अच्छी तरह से काम नहीं करता है)।
समीक्षा
बूटस्ट्रैप आँकड़े वैचारिक रूप से किसी भी अन्य सांख्यिकीय जैसे माध्य या मानक विचलन के समान हैं; वे बस गणना करने के लिए एक लंबा समय लेते हैं। ( boot
कोड में चेतावनी संदेश देखें !)
मोंटे-कार्लो सिमुलेशन यह अध्ययन करने के लिए उपयोगी हो सकता है कि नमूने प्राप्त करने में यादृच्छिकता के कारण बूटस्ट्रैप स्टेटिस्टिक कैसे बदलता है। इस तरह के सिमुलेशन में भिन्नता नमूनों में भिन्नता के कारण है, बूटस्ट्रैप में भिन्नता नहीं ।
(यहाँ सचित्र नहीं) क्योंकि बूटस्ट्रैप आँकड़ों में बहुत अधिक गणना हो सकती है (जाहिर है, आकार नमूनों के लिए गणना तक ), यह बूटस्ट्रैप वितरण को अनुमानित करने के लिए सुविधाजनक है । यह आमतौर पर "ब्लैक बॉक्स" प्रोग्राम बनाकर किया जाता है ताकि सच्चे बूटस्ट्रैप वितरण से यादृच्छिक पर एक मूल्य प्राप्त किया जा सके और उस प्रोग्राम को बार-बार कॉल किया जा सके। सामूहिक उत्पादन सटीक वितरण का अनुमान लगाता है। ब्लैक बॉक्स में यादृच्छिकता के कारण सन्निकटन भिन्न हो सकता है - लेकिन यह भिन्नता सन्निकटन प्रक्रिया की एक कलाकृति है। यह (अवधारणात्मक) बूटस्ट्रैप प्रक्रिया में निहित नहीं है।nnn