2009-10-20 9 views
14

आर में, मनमाना अनियमित यादृच्छिक विविधता को अनुकरण करने का सबसे अच्छा तरीका क्या है यदि केवल इसकी संभाव्यता घनत्व कार्य उपलब्ध हो?मैं अपनी संभाव्यता फ़ंक्शन का उपयोग करके मनमानी अनियमित यादृच्छिक विविधता का सर्वोत्तम अनुकरण कैसे करूं?

+0

बहुत बढ़िया प्रश्न छोड़ना! –

उत्तर

11

जब आप केवल घनत्व प्रदान करते हैं तो व्यस्त सीडीएफ विधि का एक (धीमा) कार्यान्वयन होता है।

den<-dnorm #replace with your own density 

#calculates the cdf by numerical integration 
cdf<-function(x) integrate(den,-Inf,x)[[1]] 

#inverts the cdf 
inverse.cdf<-function(x,cdf,starting.value=0){ 
lower.found<-FALSE 
lower<-starting.value 
while(!lower.found){ 
    if(cdf(lower)>=(x-.000001)) 
    lower<-lower-(lower-starting.value)^2-1 
    else 
    lower.found<-TRUE 
} 
upper.found<-FALSE 
upper<-starting.value 
while(!upper.found){ 
    if(cdf(upper)<=(x+.000001)) 
    upper<-upper+(upper-starting.value)^2+1 
    else 
    upper.found<-TRUE 
} 
uniroot(function(y) cdf(y)-x,c(lower,upper))$root 
} 

#generates 1000 random variables of distribution 'den' 
vars<-apply(matrix(runif(1000)),1,function(x) inverse.cdf(x,cdf)) 
hist(vars) 
1

संचयी बंटन का प्रयोग करें समारोह http://en.wikipedia.org/wiki/Cumulative_distribution_function

तो बस उसके व्युत्क्रम का उपयोग करें। बेहतर तस्वीर के लिए यहाँ की जाँच करें http://en.wikipedia.org/wiki/Normal_distribution

यही मतलब है: से यादृच्छिक संख्या लेने [0,1] और सेट CDF के रूप में है, तो जाँच मूल्य

यह भी कहा जाता है quantile कार्य करते हैं।

-1

आप घनत्व से नमूने प्राप्त करने के लिए मेट्रोपोलिस-hastings का उपयोग कर सकते हैं।

6

ऊपर "महानगरों-हेस्टिंग्स का उपयोग" जवाब स्पष्ट करने के लिए:

मान लीजिए ddist() अपने प्रायिकता घनत्व समारोह

कुछ की तरह है:

n <- 10000 
cand.sd <- 0.1 
init <- 0 
vals <- numeric(n) 
vals[1] <- init 
oldprob <- 0 
for (i in 2:n) { 
    newval <- rnorm(1,mean=vals[i-1],sd=cand.sd) 
    newprob <- ddist(newval) 
    if (runif(1)<newprob/oldprob) { 
     vals[i] <- newval 
    } else vals[i] <- vals[i-1] 
    oldprob <- newprob 
} 

नोट्स:

  1. पूरी तरह से untested
  2. दक्षता उम्मीदवार वितरण पर निर्भर करता है (यानी। cand.sd का मूल्य)। अधिकतम क्षमता, धुन cand.sd 25-40% जिसकी स्वीकृति दर
  3. परिणाम autocorrelated किया जाएगा ... (हालांकि मुझे लगता है कि आप हमेशा sample() परिणाम उन्हें हाथापाई करने सकता है, या पतली)
  4. करना पड़ सकता है करने के लिए एक, "बर्न-इन" यदि आपके प्रारंभ मूल्य अजीब

शास्त्रीय दृष्टिकोण इस समस्या का अस्वीकृति नमूना है (देखें उदाहरण के लिए प्रेस एट अल न्यूमेरिकल व्यंजनों)

संबंधित मुद्दे

 संबंधित मुद्दे