একটি সাধারণ বিতরণ থেকে নমুনা তবে সিমুলেশনের আগে নির্দিষ্ট রেঞ্জের বাইরে পড়া সমস্ত এলোমেলো মানগুলি উপেক্ষা করুন।
এই পদ্ধতিটি সঠিক, তবে @ জিয়ান তার উত্তরে যেমন উল্লেখ করেছেন, এটি দীর্ঘ সময় নিতে হবে যখন পরিসরটি ছোট হয় (আরও স্পষ্টভাবে, যখন এর পরিমাপটি সাধারণ বন্টনের অধীনে ছোট হয়)।
F−1(U)FU∼Unif(0,1)FG(a,b)G−1(U)U∼Unif(G(a),G(b))
G−1G−1GG−1abG
গুরুত্বের নমুনা ব্যবহার করে একটি কাটা বিতরণ সিমুলেট করুন
N(0,1)GGG(q)=arctan(q)π+12G−1(q)=tan(π(q−12))
U∼Unif(G(a),G(b))G−1(U)tan(U′)U′∼Unif(arctan(a),arctan(b))
a <- 1
b <- 5
nsims <- 10^5
sims <- tan(runif(nsims, atan(a), atan(b)))
xiϕ(x)/g(x)
w(x)=exp(−x2/2)(1+x2),
log_w <- -sims^2/2 + log1p(sims^2)
w <- exp(log_w) # unnormalized weights
w <- w/sum(w)
(xi,w(xi))[u,v]
u <- 2; v<- 4
sum(w[sims>u & sims<v])
## [1] 0.1418
এটি লক্ষ্যমাত্রামূলক ক্রিয়াকলাপের একটি অনুমান সরবরাহ করে। আমরা দ্রুত spatsat
প্যাকেজটি দিয়ে এটি প্লট করতে পারি :
F <- spatstat::ewcdf(sims,w)
# estimated F:
curve(F(x), from=a-0.1, to=b+0.1)
# true F:
curve((pnorm(x)-pnorm(a))/(pnorm(b)-pnorm(a)), add=TRUE, col="red")
# approximate probability of u<x<v:
F(v)-F(u)
## [1] 0.1418
(xi)
msample <- rmultinom(1, nsims, w)[,1]
resims <- rep(sims, times=msample)
hist(resims)
mean(resims>u & resims<v)
## [1] 0.1446
অন্য একটি পদ্ধতি: দ্রুত বিপরীত রূপান্তর নমুনা
অলিভার এবং টাউনসেন্ড বিস্তৃত শ্রেণিবিন্যাসের বন্টনের জন্য একটি নমুনা পদ্ধতি তৈরি করেছিল। এটা তোলে বাস্তবায়িত হয় মতলব জন্য chebfun2 গ্রন্থাগার সেইসাথে জুলিয়া জন্য ApproxFun গ্রন্থাগার । আমি সম্প্রতি এই লাইব্রেরিটি আবিষ্কার করেছি এবং এটি খুব আশাব্যঞ্জক মনে হচ্ছে (কেবল এলোমেলো নমুনার জন্য নয়)। মূলত এটি বিপরীত পদ্ধতি তবে সিডিএফ এবং বিপরীত সিডিএফ এর শক্তিশালী অনুমান ব্যবহার করে। ইনপুট হ'ল সাধারনকরণ পর্যন্ত লক্ষ্য ঘনত্বের কার্য।
নমুনাটি কেবল নিম্নলিখিত কোড দ্বারা উত্পন্ন হয়:
using ApproxFun
f = Fun(x -> exp(-x.^2./2), [1,5]);
nsims = 10^5;
x = sample(f,nsims);
[ ২ , ৪ ] পূর্বে গুরুত্বের নমুনা দ্বারা প্রাপ্তটির নিকটে:
sum((x.>2) & (x.<4))/nsims
## 0.14191