সাধারণ বিতরণ অনুকরণের জন্য বিপরীতমুখী সিডিএফ পদ্ধতিতে বক্স-মুলারের সুবিধা?


15

ইউনিফর্ম ভেরিয়েবলের সেট থেকে একটি সাধারণ বিতরণ অনুকরণ করার জন্য, বিভিন্ন কৌশল রয়েছে:

  1. বক্স-মুলার অ্যালগরিদম , যাতে একটি নমুনা করে দুটি স্বতন্ত্র ইউনিফর্ম পরিবর্তিত হয় (0,1) এবং এগুলিকে দুটি স্বতন্ত্র মানক সাধারণ বিতরণে রূপান্তর করে:

    Z0=2lnU1cos(2πU0)Z1=2lnU1sin(2πU0)
  2. সিডিএফ পদ্ধতিতে , যেখানে কেউ সাধারণ সিডিএফ কে অভিন্ন ইউনিফর্মের সাথে সমান করতে পারে : এবং (F(Z))

    F(Z)=U
    Z=F1(U)

আমার প্রশ্ন: কোনটি কম্পিউটারের চেয়ে বেশি দক্ষ? আমি এটির পরবর্তী পদ্ধতিটি ভাবব - তবে আমি যেসব কাগজপত্র পড়েছি তার বেশিরভাগ বক্স-মুলার ব্যবহার করে - কেন?

অতিরিক্ত তথ্য:

সাধারণ সিডিএফের বিপরীতটি জানা এবং দ্বারা দেওয়া হয়:

F1(Z)=2erf1(2Z1),Z(0,1).

সুতরাং:

Z=F1(U)=2erf1(2U1),U(0,1).

1
সাধারণ সিডিএফ এর বিপরীতটি কি? মূল বিশিষ্ট সিডিএফটি টুকরোচক লিনিয়ার ফাংশনের সাথে সীমাবদ্ধ করা হলে এটি বিশ্লেষণযোগ্যভাবে গণনা করা যায় না।
আর্টেম সোব্লেভ

দুজনের কি খুব একটা সম্পর্ক নেই? বক্স মুলার, আমি বিশ্বাস করি, 2-পরিবর্তিত প্রজন্মের জন্য একটি বিশেষ ক্ষেত্রে।
ttnphns

হাই বারামেলি, আমি উপরে আরও কিছু তথ্য যুক্ত করেছি। একটি প্রকাশ রয়েছে - তবে অবশ্যই গণনা করতে হবে - সুতরাং কেন পছন্দ করা উচিত? আমি ধরে নিয়েছি যে অনেকগুলি এবং values ​​এর মানগুলির মতো অনুসন্ধানের টেবিলগুলিতে গণনা করা হবে এরফ 1 পাপ কোসাইনerf1erf1sincosine ? অতএব যে আরও বেশি গণনা ব্যয়বহুল? আমি তবে ভুল হতে পারে।
ব্যবহারকারী 2350366

2
পাপ এবং কোসাইন ছাড়াই বক্স-মুলারের সংস্করণ রয়েছে।
শি'আন

2
@ ডিলিপ খুব কম যথাযথ অ্যাপ্লিকেশনগুলির জন্য যেমন কম্পিউটার গ্রাফিক্স, সাইন এবং কোসাইন উপযুক্ত অনুসন্ধান সারণী ব্যবহার করে সত্যই অনুকূলিত করা যায়। পরিসংখ্যান সংক্রান্ত অ্যাপ্লিকেশনগুলির জন্য, যদিও, এই ধরনের অপ্টিমাইজেশন কখনই ব্যবহৃত হয় না। পরিশেষে এটা সত্যিই কোন কঠিন গনা না তুলনায় লগ বা বর্গমূল কিন্তু আধুনিক কম্প্যুটার সিস্টেমে প্রাথমিক ফাংশন এর সাথে সম্পর্কিত EXP ফিটফাট ফাংশন --including - অপ্টিমাইজ করা থাকে ( কোসাইন্ এবং লগ ইন্টেল উপর মৌলিক নির্দেশাবলী পথ ফিরে ছিল 8087 চিপ!), যেখানে ইরফ হয় হয় অনুপলব্ধ বা উচ্চতর (= ধীর) স্তরে কোড করা হয়েছে। erf1logsqrtexpcoslog
whuber

উত্তর:


16

খাঁটি সম্ভাব্য দৃষ্টিভঙ্গি থেকে উভয় পন্থা সঠিক এবং তাই সমান। অ্যালগরিদমিক দৃষ্টিকোণ থেকে, তুলনা অবশ্যই যথার্থতা এবং কম্পিউটিং ব্যয় উভয় বিবেচনা করতে হবে।

বক্স-মুলার একটি ইউনিফর্ম জেনারেটরের উপর নির্ভর করে এবং এই ইউনিফর্ম জেনারেটরের সমান দাম। আমার মন্তব্যে যেমন উল্লেখ করা হয়েছে, আপনি লগারিদম না থাকলে সাইন বা কোসাইন কল ছাড়াই পালাতে পারবেন:

  • S = U 2 1 + U 2 অবধি উত্পন্ন করুন
    U1,U2iidU(1,1)
    S=U12+U221
  • গ্রহণ করা এবংএক্স1সংজ্ঞায়িত করুনZ=2log(S)/S
    X1=ZU1, X2=ZU2

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

দ্বারা করা মন্তব্য অনুসরণ করুন হুবুহু , এক্সিকিউশন সময় উভয়ই বিপরীত সিডিএফ এর তুলনা rnorm(N)এবং qnorm(runif(N))এর সুবিধা হয়:

> system.time(qnorm(runif(10^8)))
sutilisateur     système      écoulé
 10.137           0.120      10.251 
> system.time(rnorm(10^8))
utilisateur     système      écoulé
 13.417           0.060      13.472` `

এবং লেজের সাথে মানানসই শর্তাবলী: enter image description here

আমার ব্লগে র‌্যাডফোর্ড নীলের একটি মন্তব্য অনুসরণ করে , আমি এটি উল্লেখ করতে চাই যে আর-এ ডিফল্টটি rnormইনভার্সন পদ্ধতিটি ব্যবহার করে, সুতরাং উপরের তুলনাটি ইন্টারফেসে প্রতিফলিত হয়, সিমুলেশন পদ্ধতিতে নয়! আরএনজিতে আর ডকুমেন্টেশন উদ্ধৃত করতে:

‘normal.kind’ can be ‘"Kinderman-Ramage"’, ‘"Buggy
 Kinderman-Ramage"’ (not for ‘set.seed’), ‘"Ahrens-Dieter"’,
 ‘"Box-Muller"’, ‘"Inversion"’ (the default), or ‘"user-supplied"’.
 (For inversion, see the reference in ‘qnorm’.)  The
 Kinderman-Ramage generator used in versions prior to 1.7.1 (now
 called ‘"Buggy"’) had several approximation errors and should only
 be used for reproduction of old results.  The ‘"Box-Muller"’
 generator is stateful as pairs of normals are generated and
 returned sequentially.  The state is reset whenever it is selected
 (even if it is the current normal generator) and when ‘kind’ is
 changed.

3
logΦ1Φ1X1X2Ui110 এবং1

2
R 3.0.2rowSumsSqnorm(runif(N))InverseCDF[NormalDistribution[], #] &

1
আমি একমত, qnorm(runif(N))চেয়ে আরও 20% দ্রুততরrnorm(N)
সিয়ান

3
Φ1sincos

1
তুলনার জন্য, নিম্নলিখিত কলগুলির জন্য একটি আই -3-77৪০ কিউএম @ ২. and গিগাহার্টজ এবং আরপি 3.12 ব্যবহার করে: RNGkind(kind = NULL, normal.kind = 'Inversion');At <- microbenchmark(A <- rnorm(1e5, 0, 1), times = 100L);RNGkind(kind = NULL, normal.kind = 'Box-Muller');Bt <- microbenchmark(B <- rnorm(1e5, 0, 1), times = 100L)আমি বিপরীতের mean 11.38363 median 11.18718জন্য এবং mean 13.00401 median 12.48802বক্স-মুলারের জন্য পাই
অভ্রাহাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.