এই বিতরণের জন্য এলোমেলো সংখ্যা অনুকরণ করার একটি উপায় সন্ধান করা


20

আমি আর তে একটি প্রোগ্রাম লেখার চেষ্টা করছি যা সংযোজন বিতরণ ফাংশন সহ একটি বিতরণ থেকে সিউডো এলোমেলো সংখ্যার অনুকরণ করে:

F(x)=1−exp⁡(−ax−bp+1xp+1),x≥0

যেখানেa,b>0,p∈(0,1)

আমি ইনভার্স ট্রান্সফর্ম নমুনা চেষ্টা করেছি তবে বিপরীতে বিশ্লেষণাত্মকভাবে সমাধানযোগ্য বলে মনে হয় না। আপনি যদি এই সমস্যার সমাধানের পরামর্শ দিতে পারেন তবে আমি খুশি হব


1
সম্পূর্ণ উত্তরের জন্য পর্যাপ্ত সময় নেই, তবে আপনি বিকল্প হিসাবে গুরুত্বপূর্ণ স্যাম্পলিংয়ের অ্যালগরিদমগুলি পরীক্ষা করতে পারেন।
— chuse

1
এটি কোনও পাঠ্যপুস্তক অনুশীলন নয়, আমি কেবল বাধাটিই স্থির করেছিলাম কারণ এটি আমার ডেটার জন্য যুক্তিসঙ্গত অনুমান
— সেবাস্তিয়ান

6
তারপরে আমি by দ্বারা "অলৌকিক" স্বাভাবিককরণ দেখে অবাক হয়েছি যা বিতরণকে কোনও তাত্ক্ষণিকের একটি নিখুঁত শক্তিতে রূপান্তরিত করে, তবে অলৌকিক ঘটনা ঘটে (ছোট সম্ভাবনার সাথে)। (পি+ +1)-1
— শি'ান

উত্তর:


49

একটা সহজবোধ্য (এবং যদি আমি যোগ করতে পারেন, মার্জিত) এই ব্যায়াম সমাধান: যেহেতু 1-এফ(এক্স) দুই বেঁচে থাকার ডিস্ট্রিবিউশন গুণফল মত মনে হচ্ছে:

(1-এফ(এক্স))=মেপুঃ⁡{-একটিএক্স-খপি+ +1এক্সপি+ +1}=মেপুঃ⁡{-একটিএক্স}⏟1-এফ1(এক্স)মেপুঃ⁡{-খপি+ +1এক্সপি+ +1}⏟1-এফ2(এক্স)
এফ
এক্স=সর্বনিম্ন{এক্স1,এক্স2}এক্স1~এফ1,এক্স2~এফ2
এফ1ই(একটি)এফ21/(পি+ +1)E(b/(p+1))

সম্পর্কিত আর কোডটি যত তাড়াতাড়ি সহজ

x=pmin(rexp(n,a),rexp(n,b/(p+1))^(1/(p+1))) #simulating an n-sample

এবং এটি অবশ্যই বিপরীতমুখী পিডিএফ এবং রেজোলিউশনগুলিকে গ্রহণ-প্রত্যাখ্যানের তুলনায় আরও দ্রুত:

> n=1e6
> system.time(results <- Vectorize(simulate,"prob")(runif(n)))
utilisateur     système      écoulé 
    89.060       0.072      89.124 
> system.time(x <- simuF(n,1,2,3))
utilisateur     système      écoulé 
     1.080       0.020       1.103 
> system.time(x <- pmin(rexp(n,a),rexp(n,b/(p+1))^(1/(p+1))))
utilisateur     système      écoulé 
     0.160       0.000       0.163 

একটি আশ্চর্যজনক নিখুঁত ফিট সঙ্গে:

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


5
সত্যিই দুর্দান্ত সমাধান!
— সেবাস্তিয়ান

14

আপনি সর্বদা সংখ্যাসূচকভাবে বিপরীত রূপান্তর সমাধান করতে পারেন।

নীচে, আমি খুব সাধারণ দ্বিখণ্ডিত অনুসন্ধান করি। প্রদত্ত ইনপুট সম্ভাব্যতা (আমি ব্যবহার করি যেহেতু আপনার সূত্রে ইতিমধ্যে রয়েছে), আমি এবং দিয়ে শুরু করি । তারপরে আমি পর্যন্ত দ্বিগুণ । অবশেষে, আমি iteratively এই ব্যবধান দ্বিখণ্ডিত করা পর্যন্ত তার দৈর্ঘ্যের তুলনায় খাটো এবং তার মাঝখানে বিন্দু সন্তুষ্ট ।কুইকুইপিএক্সএল=0এক্সআর=1এক্সআরএফ(এক্সআর)>কুই[এক্সএল,এক্সআর]εএক্সএমএফ(এক্সএম)≈কুই

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

aa <- 2
bb <- 1
pp <- 0.1

cdf <- function(x) 1-exp(-aa*x-bb*x^(pp+1)/(pp+1))

simulate <- function(prob,epsilon=1e-5) {
    left <- 0
    right <- 1
    while ( cdf(right) < prob ) right <- 2*right

    while ( right-left>epsilon ) {
        middle <- mean(c(left,right))
        value_middle <- cdf(middle)
        if ( value_middle < prob ) left <- middle else right <- middle
    }

    mean(c(left,right))
}

set.seed(1)
results <- Vectorize(simulate,"prob")(runif(10000))
hist(results)

xx <- seq(0,max(results),by=.01)
plot(ecdf(results))
lines(xx,cdf(xx),col="red")

ECDF


10

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

চ(এক্স)=(একটি+ +খএক্সপি)মেপুঃ⁡{-একটিএক্স-খপি+ +1এক্সপি+ +1}
চ(এক্স)=একটিই-একটিএক্সই-খএক্সপি+ +1/(পি+ +1)⏟≤1+ +খএক্সপিই-খএক্সপি+ +1/(পি+ +1)ই-একটিএক্স⏟≤1
চ(এক্স)≤ছ(এক্স)=একটিই-একটিএক্স+ +খএক্সপিই-খএক্সপি+ +1/(পি+ +1)
ছξ=এক্সপি+ +1এক্স=ξ1/(পি+ +1)
ঘএক্সঘξ=1পি+ +1ξ1পি+ +1-1=1পি+ +1ξ-পিপি+ +1
এক্সform ফর্মটির ঘনত্ব রয়েছে যেখানে স্বাভাবিক ধ্রুবক হয়, তারপরে এর ঘনত্ব যার অর্থ (ঝ) যে হয় একটি সূচকীয় হিসাবে বিতরণ করা variate এবং (ii) ধ্রুবক এক সমান। অতএব, বিতরণ এবং -র ক্ষুদ্রতর এর সমান ওজনযুক্ত মিশ্রণের সমান হয়ে যায়κখএক্সপিই-খএক্সপি+ +1/(পি+ +1)κΞ=এক্স1/(পি+ +1)
κখξপিপি+ +1ই-খξ/(পি+ +1)1পি+ +1ξ-পিপি+ +1=κখপি+ +1ই-খξ/(পি+ +1)
Ξই(খ/(পি+ +1))κছ(এক্স)ই(একটি)1/(পি+ +1)ই(খ/(পি+ +1))বন্টন, ওজনের জন্য অ্যাকাউন্টে অনুপস্থিত গুণক ধ্রুবক : এবং একটি মিশ্রণ হিসাবে অনুকরণ করার জন্য সোজা।2
চ(এক্স)≤ছ(এক্স)=2(12একটিই-একটিএক্স+ +12খএক্সপিই-খএক্সপি+ +1/(পি+ +1))
ছ

গ্রহণ-প্রত্যাখ্যান অ্যালগরিদমের একটি আর রেন্ডারিং এইভাবে

simuF <- function(a,b,p){
  reepeat=TRUE
  while (reepeat){
   if (runif(1)<.5) x=rexp(1,a) else
      x=rexp(1,b/(p+1))^(1/(p+1))
   reepeat=(runif(1)>(a+b*x^p)*exp(-a*x-b*x^(p+1)/(p+1))/
      (a*exp(-a*x)+b*x^p*exp(-b*x^(p+1)/(p+1))))}
  return(x)}

এবং একটি এন-নমুনার জন্য:

simuF <- function(n,a,b,p){
  sampl=NULL
  while (length(sampl)<n){
   x=u=sample(0:1,n,rep=TRUE)
   x[u==0]=rexp(sum(u==0),b/(p+1))^(1/(p+1))
   x[u==1]=rexp(sum(u==1),a)
   sampl=c(sampl,x[runif(n)<(a+b*x^p)*exp(-a*x-b*x^(p+1)/(p+1))/
      (a*exp(-a*x)+b*x^p*exp(-b*x^(p+1)/(p+1)))])
   }
  return(sampl[1:n])}

এখানে একটি = 1, খ = 2, পি = 3 এর একটি চিত্র রয়েছে:

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

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