आर में असतत समान वितरण के लिए डिफ़ॉल्ट कार्य हैं?


28

R के अधिकांश मानक वितरणों में कमांड्स का एक परिवार है - pdf / pmf, cdf / cmf, quantile, random deviates (उदाहरण के लिए- dnorm, pnorm, qnorm, rnorm)।

मुझे पता है कि असतत वर्दी वितरण के लिए इन कार्यों को फिर से शुरू करने के लिए कुछ मानक कमांड का उपयोग करना काफी आसान है, लेकिन क्या आर में समान असतत वितरण के लिए मॉडलिंग के कार्यों के लिए पहले से ही एक पसंदीदा बिल्ट-इन परिवार है?


अभी भी जवाब मांगने वालों के लिए, मैंने यह पाया: purrr :: rdunif, देखें: rdrr.io/cran/purrr/man/rdunif.html
Nnie

1
@ नोनी, जो वास्तव में पूरे सवाल का जवाब नहीं देती है, जो कि कार्यों के पूरे परिवार के लिए पूछा गया है, जबकि आप जिसे लिंक करते हैं वह केवल यादृच्छिक ड्रॉ करता है।
mdewey

पूरा परिवार rdocumentation.org/packages/extraDistr/versions/1.8.10/topics/… पर उपलब्ध है जो अतिरिक्त पैकेज में, जाहिरा तौर पर है।
kcrisman

जवाबों:


32

जैसा कि nico ने लिखा है, वे R में लागू नहीं हैं। मान लें कि हम 1.k में काम करते हैं, उन कार्यों को इस तरह दिखना चाहिए:

यादृच्छिक पीढ़ी के लिए:

rdu<-function(n,k) sample(1:k,n,replace=T)

पीडीएफ:

ddu<-function(x,k) ifelse(x>=1 & x<=k & round(x)==x,1/k,0) 

CDF:

pdu<-function(x,k) ifelse(x<1,0,ifelse(x<=k,floor(x)/k,1))

4
धन्यवाद। मुझे लगता है कि यह बिल्ट-इन फ़ंक्शंस (न्यूनतम और अधिकतम पैरामीटर्स के साथ यूनिफ़ परिवार) के लिए काम करना आसान होगा। लिपियों में फ़ंक्शन परिभाषाओं को जोड़ना थोड़ा बदसूरत है, असतत वर्दी वितरण का उपयोग करने के लिए जिस तरह से आप अन्य मानक वितरण का उपयोग करेंगे। अंतर्निहित कार्य भी त्रुटि से निपटने के लिए (उदाहरण के लिए - यदि पैरामीटर पूर्णांक नहीं हैं) और गति के लिए अनुकूलित हैं।

2
अच्छा जवाब। और मात्राओं के लिए हम कुछ ऐसा कर सकते हैं जैसे कि qdu <- function (p, k) ifelse (p <= 0 | p> 1, return ("अपरिभाषित"), सीलिंग (p * k))

15

यहाँ रेंज में असतत वर्दी वितरण के लिए कोड है [न्यूनतम, अधिकतम], mbq के पद से अनुकूलित:

dunifdisc<-function(x, min=0, max=1) ifelse(x>=min & x<=max & round(x)==x, 1/(max-min+1), 0)
punifdisc<-function(q, min=0, max=1) ifelse(q<min, 0, ifelse(q>=max, 1, (floor(q)-min+1)/(max-min+1)))
qunifdisc<-function(p, min=0, max=1) floor(p*(max-min+1))
runifdisc<-function(n, min=0, max=1) sample(min:max, n, replace=T)

11

क्रैन टास्क दृश्य: संभाव्यता वितरण पेज का कहना है:

बुनियादी कार्यों के साथ असतत वर्दी वितरण आसानी से प्राप्त किया जा सकता है।

मुझे लगता है कि इस की तर्ज पर कुछ करना चाहिए:

a <- round(runif(1000, min=0, max=100))

संपादित करें

जैसा कि csgillespie ने बताया, यह सही नहीं है ...

a <- ceiling(runif(1000, min=0, max=100))

हालांकि काम करेगा (ध्यान दें कि उदाहरण 1 और 100 के बीच मान उत्पन्न करेगा , न कि 0 और 100 के बीच)


2
यह किनारे के मामलों के लिए सही नहीं है। इसे देखने के लिए, निम्नलिखित कमांड को चलाने का प्रयास करें: table(round(runif(10000, min=0, max=2)))यह स्पष्ट रूप से एक समान नहीं है।
csgillespie 8

@csgillespie: अच्छी तरह से देखा, मैंने अपना जवाब अपडेट किया :)
nico

क्या आप उपयोग नहीं कर सकते ceiling(runif(1000, min=-1, max=100))?
गंग -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.