একটি বিরতিতে বিতরণের পরে এলোমেলো সংখ্যা তৈরি করুন


17

বিরতিতে মধ্যে সাধারণ বিতরণের পরে আমাকে এলোমেলো সংখ্যা তৈরি করতে হবে(a,b) । (আমি আরে কাজ করছি)

আমি জানি যে ফাংশনটি rnorm(n,mean,sd)সাধারণ বিতরণ অনুসরণ করে এলোমেলো সংখ্যা তৈরি করবে, তবে এর মধ্যে অন্তর সীমাটি কীভাবে সেট করব? এর জন্য কি কোনও বিশেষ আর কার্যাবলী উপলব্ধ?


আপনি কেন এটা করতে চান? যদি এটি আবদ্ধ থাকে তবে এটি সত্যিই স্বাভাবিক হতে পারে না। আপনি কি অর্জন করতে চেষ্টা করছেন?
গুং - মনিকা পুনরায়

x <- rnorm(n, mean, sd); x <- x[x > lower.limit & x < upper.limit]
হিউ

3
@ কতটা দুর্দান্ত ... যতক্ষণ না আপনি কতটা এলোমেলো মূল্যবোধ পাবেন সেদিকে খেয়াল রাখবেন না।
গ্লেন_বি -রিনস্টেট মনিকা

উত্তর:


31

এটা তোলে শোনাচ্ছে আপনি যদি একটি থেকে ভান করতে চান মত ছেঁটে ফেলা বন্টন , এবং আপনার নির্দিষ্ট উদাহরণ, একটি স্বাভাবিক ছেঁটে ফেলা

এটি করার জন্য বিভিন্ন পদ্ধতি রয়েছে, কিছু সহজ, কিছু তুলনামূলক দক্ষ।

আমি আপনার সাধারণ উদাহরণে কিছু পদ্ধতির চিত্র তুলে ধরব।

  1. একবারে একটি উত্পাদন করার জন্য এখানে একটি খুব সহজ পদ্ধতি (কোনও ধরণের সিউডোকোডে):

    repeat উৎপন্নxi এন (গড়, SD) থেকেuntil নীচুxi উপরের

    এখানে চিত্র বর্ণনা লিখুন

    যদি বেশিরভাগ বিতরণ সীমানার মধ্যে থাকে তবে এটি বেশ যুক্তিসঙ্গত তবে আপনি প্রায় সর্বদা সীমাবদ্ধতার বাইরে তৈরি করলে এটি বেশ ধীর হতে পারে।

    আর-তে আপনি সীমানার মধ্যে অঞ্চলটি গণনা করে ওয়ান-এ-এ-টাইম লুপটি এড়াতে পারবেন এবং পর্যাপ্ত মান তৈরি করতে পারবেন যে আপনি সীমাবদ্ধতার বাইরে মানগুলি ফেলে দেওয়ার পরেও প্রয়োজনীয় হিসাবে যতগুলি মান রেখেছিলেন তা আপনি প্রায় নিশ্চিত হতে পারেন।

  2. আপনি বিরতিতে কিছু উপযুক্ত মেজাইজাইং ফাংশন সহ গ্রহণযোগ্য-প্রত্যাখ্যান ব্যবহার করতে পারেন (কিছু ক্ষেত্রে ইউনিফর্ম যথেষ্ট ভাল হবে)। সীমাটি যদি এসডির তুলনায় যুক্তিসঙ্গতভাবে সংকীর্ণ হত তবে আপনি লেজের মধ্যে খুব বেশি দূরে ছিলেন না, উদাহরণস্বরূপ, অভিন্ন মেজাইজিং সাধারণের সাথে ঠিক কাজ করবে।

    এখানে চিত্র বর্ণনা লিখুন

  3. আপনার যদি যুক্তিসঙ্গতভাবে দক্ষ সিডিএফ এবং বিপরীত সিডিএফ থাকে (যেমন pnormএবং qnormআর মধ্যে সাধারণ বিতরণের জন্য) আপনি বিচ্ছিন্ন নরমালটিতে উইকিপিডিয়া পৃষ্ঠার সিমুলেটিং বিভাগের প্রথম অনুচ্ছেদে বর্ণিত বিপরীত সিডিএফ পদ্ধতিটি ব্যবহার করতে পারেন । [ বাস্তবে এটি একটি কাটা ইউনিফর্ম গ্রহণের মতো (প্রয়োজনীয় কোয়ান্টাইলগুলিতে কাটা, যার আসলে কোনও অস্বীকৃতি প্রয়োজন না, যেহেতু এটি কেবল অন্য একটি ইউনিফর্ম) এবং এতে বিপরীত সাধারণ সিডিএফ প্রয়োগ করুন apply মনে রাখবেন যে আপনি যদি খুব দূরের অংশে থাকেন তবে] এটি ব্যর্থ হতে পারে]

    এখানে চিত্র বর্ণনা লিখুন

  4. অন্যান্য পন্থা আছে; একই উইকিপিডিয়ায় পৃষ্ঠাগুলিতে জিগগারেট পদ্ধতিটি মানিয়ে নেওয়ার কথা উল্লেখ করা হয়েছে , এতে বিভিন্ন বিতরণের কাজ করা উচিত।

একই উইকিপিডিয়া লিংক ছেঁটে ফেলা লম্ব জেনারেট করার জন্য ফাংশন সঙ্গে দুই নির্দিষ্ট প্যাকেজ (Cran উভয়েই) উল্লেখ:

আর এর MSMপ্যাকেজটির একটি ফাংশন রয়েছে rtnorm, এটি একটি কাটা সাধারণ থেকে অঙ্কনের গণনা করে। আর এর truncnormপ্যাকেজটিতে একটি কাটা সাধারণ থেকে আঁকার কাজও রয়েছে।


চারপাশে তাকালে, এটির অনেকগুলি অন্যান্য প্রশ্নের উত্তরে isাকা রয়েছে (তবে ঠিক এই নকলগুলি কেবল ছাঁটাই হওয়া সাধারণের চেয়ে সাধারণ হিসাবে নকল নয়) ... এতে অতিরিক্ত আলোচনা দেখুন

ক। এই উত্তর

খ। শি'ানের উত্তর এখানে , যা তার আরএক্সিব পেপারের একটি লিঙ্ক রয়েছে (কিছু অন্যান্য সার্থক প্রতিক্রিয়া সহ)।


2

দ্রুত এবং নোংরা পদ্ধতির হ'ল 68-95-99.7 বিধিটি ব্যবহার করা ।

একটি সাধারণ বিতরণে, 99.7% মানগুলি গড়ের 3 টি স্ট্যান্ডার্ড বিচ্যুতির মধ্যে পড়ে। সুতরাং, যদি আপনি আপনার পছন্দসই ন্যূনতম মান এবং সর্বাধিক মানের মাঝখানে সেট করে থাকেন এবং আপনার গড় বিচ্যুতিটিকে আপনার গড়ের 1/3 অংশে সেট করে থাকেন তবে আপনি (বেশিরভাগ) মানগুলি পছন্দসই ব্যবধানের মধ্যে পড়ে। তারপরে আপনি কেবল বাকীটি পরিষ্কার করতে পারেন।

minVal <- 0
maxVal <- 100
mn <- (maxVal - minVal)/2
# Generate numbers (mostly) from min to max
x <- rnorm(count, mean = mn, sd = mn/3)
# Do something about the out-of-bounds generated values
x <- pmax(minVal, x)
x <- pmin(maxVal, x)

আমি সম্প্রতি এই একই সমস্যার মুখোমুখি হয়েছি, পরীক্ষার ডেটার জন্য এলোমেলো ছাত্র গ্রেড উত্পন্ন করার চেষ্টা করছি । উপরের কোডটিতে আমি ব্যবহার করেছি pmaxএবং pminসর্বনিম্ন মান বা সর্বাধিক ইন-বাউন্ডস মান সহ প্রতিস্থাপনের জন্য- এটি আমার উদ্দেশ্যে কাজ করে, কারণ আমি মোটামুটি অল্প পরিমাণে ডেটা উত্পন্ন করছি, তবে বৃহত্তর পরিমাণের জন্য এটি আপনাকে সর্বনিম্ন এবং সর্বাধিক মানগুলিতে লক্ষণীয় ধাক্কা দেবে। সুতরাং আপনার উদ্দেশ্যগুলির উপর নির্ভর করে values ​​মানগুলি বাতিল করা, সেগুলি প্রতিস্থাপন করা NAবা সীমাবদ্ধ না হওয়া পর্যন্ত তাদের "পুনরায় রোল করা" ভাল।


কেন এটা বিরক্ত করবেন? সাধারণ এলোমেলো সংখ্যা উত্পন্ন করা এবং যেগুলি কাটা কাটা দরকার তাদের ফেলে দেওয়া এতটাই সহজ যে কাটা কাটা কাঙ্ক্ষনের ঘনত্বের 100% এর কাছাকাছি না হলে এটি সম্পর্কে জটিল হওয়া দরকার না।
কার্ল

2
সম্ভবত আমি মূল প্রশ্নের ভুল ব্যাখ্যা করছি। আর-তে সরাসরি-পরিসংখ্যান-সম্পর্কিত প্রোগ্রামিংয়ের কাজটি কীভাবে অর্জন করা যায় তা নির্ধারণের চেষ্টা করার সময় আমি এই প্রশ্নটি এসেছি এবং আমি কেবল এখনই লক্ষ্য করেছি যে এই পৃষ্ঠাটি একটি পরিসংখ্যান স্ট্যাকেক্সচেঞ্জ, কোনও প্রোগ্রামিং স্ট্যাকেক্সচেঞ্জ নয়। :) আমার ক্ষেত্রে, আমি 0 থেকে 100 এর মান সহ একটি নির্দিষ্ট পরিমাণের এলোমেলো পূর্ণসংখ্যার উত্পাদন করতে চেয়েছিলাম এবং আমি জেনারেট হওয়া মানগুলিকে সেই পরিসীমা জুড়ে একটি সুন্দর ঘন্টার বক্ররেখা পড়তে চেয়েছিলাম। এটি লেখার পর থেকে আমি বুঝতে sample(x=min:max, prob=dnorm(...))পারি যে এটি করার সহজ উপায় easier
অ্যারন ওয়েলস

@ গ্লেন_বি অ্যারন ওয়েলস উল্লেখ করেছেন sample(x=min:max, prob=dnorm(...))যা আপনার উত্তর থেকে কিছুটা ছোট বলে মনে হচ্ছে।
কার্ল

তবে মনে রাখবেন যে sample()কৌশলটি কেবলমাত্র তখনই কার্যকর যখন আপনি এলোমেলো পূর্ণসংখ্যা বা অন্য কোনও সেট, পূর্বনির্ধারিত মান সেট করার চেষ্টা করছেন।
অ্যারন ওয়েলস

1

a<b

ΦX1,...,XNμσ2a<b

Xi=μ+σΦ1(Ui)U1,...,UNIID U[Φ(aμσ),Φ(bμσ)].

কাটা কাটা বিতরণ থেকে উত্পন্ন মানগুলির জন্য কোনও ইনবিল্ট ফাংশন নেই, তবে এলোমেলো ভেরিয়েবল উত্পন্ন করার জন্য সাধারণ ফাংশনগুলি ব্যবহার করে এই পদ্ধতিটি প্রোগ্রাম করা তুচ্ছ। এখানে একটি সাধারণ Rফাংশন rtruncnormযা কোডের কয়েকটি লাইনে এই পদ্ধতিটি প্রয়োগ করে।

rtruncnorm <- function(N, mean = 0, sd = 1, a = -Inf, b = Inf) {
  if (a > b) stop('Error: Truncation range is empty');
  U <- runif(N, pnorm(a, mean, sd), pnorm(b, mean, sd));
  qnorm(U, mean, sd); }

এটি একটি ভেক্টরাইজড ফাংশন যা Nকাটা কাটা সাধারণ বিতরণ থেকে আইআইডি র্যান্ডম ভেরিয়েবল তৈরি করবে । একই পদ্ধতিতে অন্যান্য কাটা বিতরণের জন্য প্রোগ্রাম ফাংশন করা সহজ হবে। কাটা কাটা বিতরণের জন্য সম্পর্কিত ঘনত্ব এবং কোয়ান্টাইল ফাংশনগুলি প্রোগ্রাম করাও খুব কঠিন হবে না।


μσ2

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.