R Language
यादृच्छिकीकरण
खोज…
परिचय
R भाषा आमतौर पर सांख्यिकीय विश्लेषण के लिए उपयोग की जाती है। जैसे, इसमें यादृच्छिककरण के लिए विकल्पों का एक मजबूत सेट है। संभाव्यता वितरण से नमूने की विशेष जानकारी के लिए, वितरण कार्यों के लिए दस्तावेज देखें।
टिप्पणियों
जो उपयोगकर्ता अन्य प्रोग्रामिंग भाषाओं से आ रहे हैं, वे पहले अनुभव किए गए अनुभव के बराबर rand
फ़ंक्शन की कमी से भ्रमित हो सकते हैं। प्रत्येक वितरण के लिए कार्यों के r*
परिवार का उपयोग करके बेसिक रैंडम नंबर जेनरेशन किया जाता है (ऊपर लिंक देखें)। रैंडम संख्या एक सीमा से समान रूप से तैयार का उपयोग कर उत्पन्न किया जा सकता runif
, "यादृच्छिक वर्दी के लिए"। चूंकि यह भी "रन इफ" की तरह संदिग्ध रूप से दिखता है, इसलिए नए आर उपयोगकर्ताओं के लिए यह पता लगाना मुश्किल है।
यादृच्छिक ड्रॉ और क्रमपरिवर्तन
sample
आदेश का उपयोग क्लासिक संभावना की समस्याओं को दूर करने के लिए किया जा सकता है, जैसे कि एक कलश से ड्राइंग और प्रतिस्थापन के बिना, या यादृच्छिक क्रमपरिवर्तन बनाना।
ध्यान दें कि इस उदाहरण के दौरान, set.seed
का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि उदाहरण कोड प्रतिलिपि प्रस्तुत करने योग्य है। हालाँकि, sample
स्पष्ट रूप से set.seed
किए बिना काम करेगा।
रैंडम क्रमपरिवर्तन
सरलतम रूप में, sample
पूर्णांक के वेक्टर के यादृच्छिक क्रमांकन बनाता है। इससे पूरा किया जा सकता है:
set.seed(1251)
sample(x = 10)
[1] 7 1 4 8 6 3 10 5 2 9
जब कोई अन्य तर्क नहीं दिया जाता है, तो sample
1 से x
तक वेक्टर के यादृच्छिक क्रमांकन को लौटाता है। यह एक डेटा फ्रेम में पंक्तियों के क्रम को यादृच्छिक करने की कोशिश करते समय उपयोगी हो सकता है। यह एक सामान्य कार्य है जब परीक्षणों के लिए रैंडमाइज़ेशन टेबल बनाते हैं, या जब विश्लेषण के लिए पंक्तियों के यादृच्छिक सबसेट का चयन करते हैं।
library(datasets)
set.seed(1171)
iris_rand <- iris[sample(x = 1:nrow(iris)),]
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> head(iris_rand)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
145 6.7 3.3 5.7 2.5 virginica
5 5.0 3.6 1.4 0.2 setosa
85 5.4 3.0 4.5 1.5 versicolor
137 6.3 3.4 5.6 2.4 virginica
128 6.1 3.0 4.9 1.8 virginica
105 6.5 3.0 5.8 2.2 virginica
रिप्लेसमेंट के बिना ड्रॉ
sample
का उपयोग करके, हम एक सेट से ड्राइंग को बिना प्रतिस्थापन के भी अनुकरण कर सकते हैं। प्रतिस्थापन (डिफ़ॉल्ट) के बिना नमूना करने के लिए, आपको एक सेट के साथ और ड्रॉ की संख्या के साथ नमूना प्रदान करना होगा। से तैयार किए जाने वाले सेट को वेक्टर के रूप में दिया जाता है।
set.seed(7043)
sample(x = LETTERS,size = 7)
[1] "S" "P" "J" "F" "Z" "G" "R"
ध्यान दें कि यदि तर्क का size
x
के तर्क की लंबाई के समान है, तो आप एक यादृच्छिक क्रमचय बना रहे हैं। यह भी ध्यान दें कि आप प्रतिस्थापन के बिना नमूना करते समय x
की लंबाई से अधिक आकार निर्दिष्ट नहीं कर सकते हैं।
set.seed(7305)
sample(x = letters,size = 26)
[1] "x" "z" "y" "i" "k" "f" "d" "s" "g" "v" "j" "o" "e" "c" "m" "n" "h" "u" "a" "b" "l" "r" "w" "t" "q" "p"
sample(x = letters,size = 30)
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
यह हमें प्रतिस्थापन के साथ ड्राइंग में लाता है।
रिप्लेसमेंट के साथ ड्रॉ
प्रतिस्थापन के साथ एक सेट से यादृच्छिक ड्रॉ करने के लिए, आप sample
लिए replace
तर्क का उपयोग करें। डिफ़ॉल्ट रूप से, replace
FALSE
। इसे TRUE
सेट करने का अर्थ है कि सेट का प्रत्येक तत्व अंतिम परिणाम में एक से अधिक बार दिखाई दे सकता है।
set.seed(5062)
sample(x = c("A","B","C","D"),size = 8,replace = TRUE)
[1] "D" "C" "D" "B" "A" "A" "A" "A"
बदलती संभावनाएं
डिफ़ॉल्ट रूप से, जब आप sample
उपयोग करते हैं, तो यह मानता है कि प्रत्येक तत्व को चुनने की संभावना समान है। इसे मूल "कलश" समस्या के रूप में मानें। नीचे दिया गया कोड 20 बार कलश से रंगीन संगमरमर को खींचने, रंग को नीचे लिखने और फिर वापस कलश में संगमरमर को डालने के बराबर है। कलश में एक लाल, एक नीला और एक हरा संगमरमर होता है, जिसका अर्थ है कि प्रत्येक रंग को खींचने की संभावना 1/3 है।
set.seed(6472)
sample(x = c("Red","Blue","Green"),
size = 20,
replace = TRUE)
मान लीजिए कि इसके बजाय, हम एक ही कार्य करना चाहते थे, लेकिन हमारे कलश में 2 लाल पत्थर, 1 नीला संगमरमर और 1 हरा संगमरमर शामिल है। एक विकल्प यह होगा कि हम एक अतिरिक्त Red
जोड़ने के लिए x
को भेजे गए तर्क को बदल दें। हालांकि, एक बेहतर विकल्प sample
लिए prob
तर्क का उपयोग करना sample
।
prob
तर्क प्रत्येक तत्व निकलने की संभावना के साथ एक वेक्टर स्वीकार करता है। ऊपर हमारे उदाहरण में, लाल संगमरमर खींचने की संभावना 1/2 होगी, जबकि नीले या हरे संगमरमर को खींचने की संभावना 1/4 होगी।
set.seed(28432)
sample(x = c("Red","Blue","Green"),
size = 20,
replace = TRUE,
prob = c(0.50,0.25,0.25))
प्रति-सहज रूप से, prob
को दिए गए तर्क को 1. के लिए योग करने की आवश्यकता नहीं है। R हमेशा दिए गए तर्कों को प्रायिकताओं में बदल देगा, जो कि कुल मिलाकर 1. उदाहरण के लिए, 2 रेड, 1 ब्लू और 1 ग्रीन के हमारे उपरोक्त उदाहरण पर विचार करें। आप उन नंबरों का उपयोग करके हमारे पिछले कोड के समान परिणाम प्राप्त कर सकते हैं:
set.seed(28432)
frac_prob_example <- sample(x = c("Red","Blue","Green"),
size = 200,
replace = TRUE,
prob = c(0.50,0.25,0.25))
set.seed(28432)
numeric_prob_example <- sample(x = c("Red","Blue","Green"),
size = 200,
replace = TRUE,
prob = c(2,1,1))
> identical(frac_prob_example,numeric_prob_example)
[1] TRUE
प्रमुख प्रतिबंध यह है कि आप सभी संभावनाओं को शून्य नहीं कर सकते हैं, और उनमें से कोई भी शून्य से कम नहीं हो सकता है।
तुम भी उपयोग कर सकते हैं prob
जब replace
पर सेट है FALSE
। उस स्थिति में, के बाद प्रत्येक तत्व तैयार की है, के अनुपात में prob
शेष तत्वों के लिए मूल्यों अगले ड्रॉ के लिए संभावना दे। इस स्थिति में, आपके द्वारा देखे जा रहे नमूने के size
तक पहुँचने के लिए आपके पास पर्याप्त गैर-शून्य संभावनाएँ होनी चाहिए। उदाहरण के लिए:
set.seed(21741)
sample(x = c("Red","Blue","Green"),
size = 2,
replace = FALSE,
prob = c(0.8,0.19,0.01))
इस उदाहरण में, लाल को पहले ड्रा (पहले तत्व के रूप में) में खींचा गया है। रेड के 80% होने की संभावना थी, ब्लू के 19% होने की संभावना थी, और ग्रीन के 1% होने की संभावना थी।
अगले ड्रॉ के लिए, लाल अब कलश में नहीं है। शेष वस्तुओं में संभावनाओं की कुल संख्या 20% (ब्लू के लिए 19% और ग्रीन के लिए 1%) है। उस ड्रा के लिए, 95% संभावना है कि आइटम ब्लू (19/20) होगा और 5% मौका ग्रीन (1/20) होगा।
बीज लगाना
set.seed
फ़ंक्शन का उपयोग सभी यादृच्छिककरण कार्यों के लिए यादृच्छिक बीज सेट करने के लिए किया जाता है। यदि आप R का उपयोग ऐसे यादृच्छिक बनाने के लिए कर रहे हैं जिसे आप पुन: उत्पन्न करने में सक्षम होना चाहते हैं, तो आपको पहले set.seed
उपयोग करना चाहिए।
set.seed(1643)
samp1 <- sample(x = 1:5,size = 200,replace = TRUE)
set.seed(1643)
samp2 <- sample(x = 1:5,size = 200,replace = TRUE)
> identical(x = samp1,y = samp2)
[1] TRUE
ध्यान दें कि समानांतर प्रसंस्करण को यादृच्छिक बीज के विशेष उपचार की आवश्यकता होती है, जिसे कहीं और वर्णित किया गया है।