আর-তে আলাদা ইউনিফর্ম বিতরণের জন্য ডিফল্ট ফাংশন রয়েছে?


28

আর এর বেশিরভাগ স্ট্যান্ডার্ড ডিস্ট্রিবিউশনের একটি কমান্ডের পরিবার রয়েছে - পিডিএফ / পিএমএফ, সিডিএফ / সেমিফ, কোয়ান্টাইল, এলোমেলো বিচ্যুতি (উদাহরণস্বরূপ - ডনরম, পনরম, কিউনর্ম, রনরম)।

আমি জানি যে বিবিধ ইউনিফর্ম বিতরণগুলির জন্য এই ফাংশনগুলি পুনরুত্পাদন করার জন্য কিছু স্ট্যান্ডার্ড কমান্ড ব্যবহার করা যথেষ্ট সহজ তবে আমি আর অবগত নই যে আর-তে আলাদা ইউনিফর্ম ডিস্ট্রিবিউশনগুলির মডেলিংয়ের জন্য ইতিমধ্যে ফাংশনের একটি পছন্দসই অন্তর্নির্মিত পরিবার রয়েছে?


যারা এখনও উত্তর খুঁজছেন তাদের জন্য আমি এটি পেয়েছি: purrr :: rdunif, দেখুন: rdrr.io/cran/purrr/man/rdunif.html
Nnie

1
@ নিনি, এটি পুরো প্রশ্নের উত্তর দেয় না যা পুরো ক্রিয়াকলাপের পুরো পরিবারের জন্য জিজ্ঞাসা করেছিল যেখানে আপনি যার সাথে লিঙ্ক করেছেন কেবল এলোমেলোভাবে আঁকেন।
mdewey

এক্সট্রাডিস্টার প্যাকেজে স্পষ্টতই পুরো পরিবারটি rdocamentation.org/packages/extraDistr/versions/1.8.10/topics/… এ উপলব্ধ ।
kcrisman

উত্তর:


32

নিকো যেমন লিখেছেন, এগুলি আর-তে বাস্তবায়ন করা হয়নি। ধরে নিই আমরা 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) 

সিডিএফ:

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

4
ধন্যবাদ। আমি মনে করি বিল্ট-ইন ফাংশনগুলি (কমপক্ষে এবং সর্বাধিক প্যারামিটারগুলির সাথে ইউনিফর্মের পরিবার সহ) ব্যবহার করা সহজ হবে। আপনি অন্যান্য স্ট্যান্ডার্ড ডিস্ট্রিবিউশনগুলি যেভাবে ব্যবহার করবেন সেভাবে আলাদা ইউনিফর্ম বিতরণগুলি ব্যবহার করতে স্ক্রিপ্টগুলিতে ফাংশন সংজ্ঞা যুক্ত করতে কিছুটা কুৎসিত u বিল্টিন ফাংশনগুলি ত্রুটি পরিচালনার সাথেও কাজ করে (উদাহরণস্বরূপ - যদি প্যারামিটারগুলি পূর্ণসংখ্যার হয় না) এবং গতির জন্য অনুকূলিত হয়।

2
চমৎকার উত্তর. এবং কোয়ান্টাইলগুলির জন্য আমরা কিউডিউ <- ফাংশন (পি, কে) ইফেলস (পি <= 0 | পি> 1, রিটার্ন ("

15

এমবিকিউয়ের পোস্ট থেকে অভিযোজিত [মিনিট, সর্বাধিক] ব্যাপ্তিতে বিচ্ছিন্ন ইউনিফর্ম বিতরণের কোড এখানে রয়েছে:

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

Cran টাস্ক দেখুন: সম্ভাব্যতা ডিস্ট্রিবিউশন পৃষ্ঠাটি জানাচ্ছে:

স্বতন্ত্র ইউনিফর্ম বিতরণটি প্রাথমিক কার্যাদি সহ সহজেই পাওয়া যায়।

আমি অনুমান করি এর ধারায় কিছু করা উচিত:

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

সম্পাদনা

সিগিল্লেস্পি যেমন উল্লেখ করেছে, এটি সঠিক নয় ...

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

যদিও কাজ করবে (নোট করুন যে উদাহরণটি 0 এবং 100 নয়, 1 এবং 100 এর মধ্যে মান উৎপন্ন করবে )


2
প্রান্তের ক্ষেত্রে এটি সঠিক নয়। এটি দেখতে, নিম্নলিখিত কমান্ডটি চালনার চেষ্টা করুন: table(round(runif(10000, min=0, max=2)))এটি স্পষ্টতই আলাদা ইউনিফর্ম নয়।
csgillespie

@ সিএসগিলিসপি: সুন্দরভাবে চিহ্নিত, আমি আমার উত্তর আপডেট করেছি :)
নিকো

আপনি ব্যবহার করতে পারবেন না ceiling(runif(1000, min=-1, max=100))?
গুং - মনিকা পুনরায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.