आर

2012-05-10 3 views
10

में द्विपदीय वितरण से सहसंबंधित यादृच्छिक संख्याएं उत्पन्न करें I कई बिनोमियल वितरण से सहसंबंधित यादृच्छिक संख्या उत्पन्न करने का एक तरीका खोजने का प्रयास कर रहा हूं।आर

मुझे पता है कि सामान्य वितरण (mvrnorm का उपयोग करके) के साथ इसे कैसे किया जाए, लेकिन मुझे द्विपदीय लोगों पर लागू कोई फ़ंक्शन नहीं मिला।

+0

आप पैकेज 'बिंदता' का उपयोग कर सकते हैं, जैसा कि यहां अच्छी तरह से डेमो किया गया है: https://stat.ethz.ch/pipermail/r-help/2007-July/135575.html। (वह लिंक 'आर अनुकरण सहसंबंधित बिनोमियल चर' के लिए Google खोज द्वारा लौटाए गए पहले पृष्ठ पर था ...) –

+0

धन्यवाद जोश, लेकिन मुझे द्विपदीय डेटा की आवश्यकता नहीं है! – Arnaud

+1

@ अर्नुद - मुझे आज सुबह कैफीन या उत्तेजक नहीं मिला है, लेकिन एक द्विपक्षीय वितरण एक अलग वितरण नहीं है जहां केवल स्वीकार्य मान "हां/नहीं", "पास/असफल", "सत्य/गलत ", दूसरे शब्दों में बाइनरी? यही वही है [विकिपीडिया भी सोचने लगता है।] (Http://en.wikipedia.org/wiki/Binomial_distribution) – Chase

उत्तर

11

के लिए मामला आप copula पैकेज का उपयोग सहसंबद्ध वर्दी उत्पन्न कर सकते हैं, तो qbinom फ़ंक्शन का उपयोग द्विपद चर करने के लिए उन कन्वर्ट करने के लिए नहीं है।

library(copula) 

tmp <- normalCopula(0.75, dim=2) 
x <- rcopula(tmp, 1000) 
x2 <- cbind(qbinom(x[,1], 10, 0.5), qbinom(x[,2], 15, 0.7)) 

अब x2 2 द्विपद चर सहसंबद्ध होते हैं का प्रतिनिधित्व 2 कॉलम के साथ एक मैट्रिक्स है: यहाँ एक त्वरित उदाहरण है।

+0

वाह, अच्छा और मीठा! – Arnaud

+0

फिर से धन्यवाद ग्रेग ... आर सहायता पर आशा के साथ आपकी मदद के बाद, आप मुझे फिर से बचाओ! – Arnaud

+4

यह एक दिलचस्प विचार है, लेकिन यह वांछित सहसंबंध के साथ चर वापस नहीं करता है। (उदाहरण के लिए, मैंने उपरोक्त कोड की 100 प्रतिकृतियों के लिए नमूना सहसंबंध गुणांक की गणना की: औसत सहसंबंध 0.724 था, जिसमें 0.75 से अधिक सहसंबंध गुणांक के 5 शामिल थे)। –

9

प्रत्येक परीक्षण में सफलता के एन परीक्षणों और संभाव्यता पी के साथ एक द्विपक्षीय चर को एन 12 बर्नौली परीक्षणों के योग के रूप में देखा जा सकता है जिनमें प्रत्येक की सफलता की संभावना पी भी होती है।

इसी प्रकार, आप द्वारा सहसंबंधित बिनोमियल चर के जोड़े का निर्माण कर सकते हैं जो वांछित सहसंबंध वाले बर्नौली चर के जोड़ों को जोड़ते हैं।

require(bindata) 

# Parameters of joint distribution 
size <- 20 
p1 <- 0.5 
p2 <- 0.3 
rho<- 0.2 

# Create one pair of correlated binomial values 
trials <- rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho) 
colSums(trials) 

# A function to create n correlated pairs 
rmvBinomial <- function(n, size, p1, p2, rho) { 
    X <- replicate(n, { 
      colSums(rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho)) 
     }) 
    t(X) 
} 
# Try it out, creating 1000 pairs 
X <- rmvBinomial(1000, size=size, p1=p1, p2=p2, rho=rho) 
#  cor(X[,1], X[,2]) 
# [1] 0.1935928 # (In ~8 trials, sample correlations ranged between 0.15 & 0.25) 

यह नोट करना कई अलग अलग संयुक्त वितरण कि साझा वांछित सहसंबंध गुणांक देखते हैं कि महत्वपूर्ण है। rmvBinomial() में सिमुलेशन विधि उनमें से एक उत्पन्न करती है, लेकिन यह उचित है या नहीं, यह उस प्रक्रिया पर निर्भर करेगा जो आपको डेटा उत्पन्न कर रहा है।

एक समान प्रश्न (जो तब पर चला जाता है और अधिक विस्तार से विचार की व्याख्या) के लिए this R-help answer में बताया गया है:

जबकि एक द्विचर सामान्य (दिए गए साधनों और प्रसरण) विशिष्ट सहसंबंध गुणांक द्वारा परिभाषित किया गया है , यह एक द्विचर द्विपद

+0

बहुत बहुत धन्यवाद जोश। मैंने बड़ी संख्या में द्विपदीय वितरण की अनुमति देने के लिए अपनी स्क्रिप्ट को संशोधित किया। हालांकि, जैसा कि http://stat.ethz.ch/pipermail/r-help/2007-July/135575.html में इंगित किया गया है, सीओ को सीमांत संभावनाओं के कुछ फ़ंक्शन से नीचे और ऊपर बाध्य किया गया है (फ़ंक्शन rho = 0.8 के लिए विफल)। अजीब अनुपात का उपयोग समाधान प्रतीत होता है, लेकिन ... क्या आप जानते हैं कि प्रस्तावित कार्य को सामान्यीकृत करने के लिए कैसे किया गया है जो 2 से अधिक वितरणों के लिए विषम अनुपात को वैध बाइनरी सहसंबंध में परिवर्तित करने की अनुमति देता है? – Arnaud

+0

@ जोश मैंने एक संबंधित प्रश्न पूछा है, शायद आप इसे देखना चाहेंगे? https://stackoverflow.com/questions/47006881/how-to-generate-a-binomial-vector-of-n-correlated-items – jaySf