यादृच्छिक श्रेणीबद्ध डेटा कैसे उत्पन्न करें?


15

मान लीजिए कि मेरे पास एक श्रेणीगत चर है जो मान ए, बी, सी और डी ले सकता है मैं 10000 यादृच्छिक डेटा अंक कैसे उत्पन्न कर सकता हूं और प्रत्येक की आवृत्ति के लिए नियंत्रण कर सकता हूं? उदाहरण के लिए:

A = 10% B = 20% C = 65% D = 5%

किसी भी विचार मैं यह कैसे कर सकते हैं?

जवाबों:


35

क्या आप चाहते हैं कि नमूने में अनुपात ठीक उसी अनुपात में हो जो कहा गया है? या उन अनुपातों के साथ बहुत बड़ी आबादी से नमूने के विचार का प्रतिनिधित्व करने के लिए (इसलिए नमूना अनुपात करीब होगा लेकिन सटीक नहीं)?

यदि आप सटीक अनुपात चाहते हैं तो आप ब्रैंडन के सुझाव का पालन कर सकते हैं और सटीक अनुपात वाले sampleवेक्टर के क्रम को यादृच्छिक बनाने के लिए R फ़ंक्शन का उपयोग कर सकते हैं ।

यदि आप जनसंख्या से नमूना लेना चाहते हैं, लेकिन अनुपात को सीमित नहीं करना चाहते हैं, तो आप अभी भी sampleR का उपयोग कर सकते हैं probजैसे कि तर्क के साथ :

> x <- sample( LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
> prop.table(table(x))
x
     A      B      C      D 
0.0965 0.1972 0.6544 0.0519 

6

R (http://cran.r-project.org/) का उपयोग करना। यहां मैं जो कुछ भी कर रहा हूं वह आपके द्वारा निर्दिष्ट अनुपात के साथ एक यादृच्छिक सूची बना रहा है।

x <- c(rep("A",0.1*10000),rep("B",0.2*10000),rep("C",0.65*10000),rep("D",0.05*10000))
# cheating    
x <- sample(x, 10000) 


prop.table(summary(as.factor(x)))

/ मुझे इस बात पर धैर्य से प्रतीक्षा करनी चाहिए कि यह वास्तव में कितना यादृच्छिक है


5
आप अपनी पहली पंक्ति को छोटा / सरल कर सकते हैं x <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )और आपको कॉल करने के लिए 10000 को नमूने में निर्दिष्ट करने की आवश्यकता नहीं है, यह डिफ़ॉल्ट होगा (हालांकि स्पष्टता के लिए इसे निर्दिष्ट करने के लिए चोट नहीं लगती है)।
ग्रेग स्नो

3
    n <- 10000
    blah <- character(n)
    u <- runif(n)
    blah[u<=0.1] <- "A"
    blah[u>0.1 & u<=0.3] <- "B"
    blah[u>0.3 & u<=0.95] <- "C"
    blah[u>0.95] <- "D"
    table(blah)
    prop.table(summary(as.factor(blah)))

मुझे कोई संदेह नहीं है कि यह वास्तव में यादृच्छिक है। मेरा मतलब है, उस हद तक runif()यादृच्छिक है :)


4
यदि वांछित आवृत्तियों वास्तव में प्रायिकताएं हैं, तो इसके लिए probतर्क का उपयोग करना आसान होगा sample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
caracal

हाँ, यह बहुत cuter है। मेरा सिर्फ एक क्रूर बल है।
StasK

मैंने वास्तव में इसे उखाड़ा है क्योंकि यह दिखाता है कि कैसे sample(,prob=)काम करता है (कम से कम पॉलिश में इसे रूलेट एल्गोरिथम कहा जाता है)।

2

यदि आप एक एसएएस उपयोगकर्ता हैं, तो हाल के संस्करण एक समान क्षमता प्रदान करते हैं जिससे वह "टेबल" वितरण को कॉल करता है - जो आप रैंड () फ़ंक्शन के भाग के रूप में देख रहे हैं। Http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001466748.htm देखें

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