Membalikkan teknik Box-Mueller : dari setiap pasangan normals , dua seragam independen dapat dibangun sebagai atan2 ( Y , X ) (pada interval [ - π , π ] ) dan exp ( - ( X 2(X,Y)atan2(Y,X)[−π,π] (pada interval [ 0 , 1 ] ).exp(−(X2+Y2)/2)[0,1]
Ambil normals dalam kelompok dua dan jumlah kuadrat mereka untuk mendapatkan urutan varian Yχ22 . Ekspresi yangdiperoleh dari pasanganY1,Y2,…,Yi,…
Xi=Y2iY2i−1+Y2i
akan memiliki distribusi , yang seragam.Beta(1,1)
Bahwa ini hanya membutuhkan dasar, aritmatika sederhana harus jelas.
Karena distribusi yang tepat dari koefisien korelasi Pearson dari sampel empat pasang dari standar bivariat, distribusi normal terdistribusi secara seragam pada , kita dapat dengan mudah mengambil normals dalam kelompok empat pasang (yaitu, delapan nilai dalam setiap set) dan kembalikan koefisien korelasi pasangan ini. (Ini melibatkan aritmatika sederhana ditambah dua operasi root kuadrat.)[−1,1]
Telah diketahui sejak zaman kuno bahwa proyeksi silindris bola (permukaan dalam tiga ruang) adalah luas yang sama . Ini menyiratkan bahwa dalam proyeksi distribusi seragam pada bola, baik koordinat horizontal (sesuai dengan bujur) maupun koordinat vertikal (sesuai dengan lintang) akan memiliki distribusi seragam. Karena standar distribusi trivariat Normal adalah simetris bola, proyeksi ke bola adalah seragam. Memperoleh garis bujur pada dasarnya adalah perhitungan yang sama dengan sudut dalam metode Box-Mueller ( qv ), tetapi garis lintang yang diproyeksikan adalah baru. Proyeksi ke bola hanya menormalkan tiga koordinat dan pada titik itu z adalah garis lintang yang diproyeksikan. Jadi, ambil varian Normal dalam kelompok tiga, X 3 i - 2 , X 3 i -( x , y, z)z , dan hitungX3 i - 2, X3 i - 1, X3 i
X3 iX23 i - 2+ X23 i - 1+ X23 i----------------√
untuk .i = 1 , 2 , 3 , ...
Karena sebagian besar sistem komputasi mewakili angka dalam biner , generasi angka seragam biasanya dimulai dengan memproduksi bilangan bulat terdistribusi secara merata antara dan 2 32 - 1 untuk jumlah bit dan H untuk tanda (yaitu, H ( x ) = 1 ketika x > 0 dan H ( x ) = 0 sebaliknya) kita dapat mengekspresikan nilai seragam yang dinormalisasi dalam [0232−1 (atau daya tinggi terkait dengan panjang kata komputer) dan mengubah ukurannya sesuai kebutuhan. Bilangan bulat tersebut direpresentasikan secara internal sebagai string 32 digit biner. Kita dapat memperoleh bit acak independen dengan membandingkan variabel Normal dengan mediannya. Dengan demikian, cukup untuk memecah variabel Normal menjadi kelompok-kelompok ukuran yang sama dengan jumlah bit yang diinginkan, membandingkan masing-masing bit dengan rata-rata, dan merakit urutan hasil true / false yang dihasilkan menjadi angka biner. Menulis k232kHH(x)=1x>0H(x)=0 dengan rumus[0,1)
∑j=0k−1H(Xki−j)2−j−1.
Variasi dapat ditarik dariXn setiap distribusi kontinu yang rata-rata adalah (seperti normal standar); mereka diproses dalam kelompok k dengan masing-masing kelompok menghasilkan satu nilai seragam semu.0k
Pengambilan sampel penolakan adalah cara standar, fleksibel, kuat untuk menggambar variasi acak dari distribusi sewenang-wenang. Misalkan target distribusi memiliki PDF . Nilai Y diambil menurut distribusi lain dengan PDF g . Pada langkah penolakan, nilai seragam U yang terletak antara 0 dan g ( Y ) diambil secara independen dari Y dan dibandingkan denganfYgU0g(Y)Y : jika lebih kecil, Yf(Y)Ydipertahankan tetapi sebaliknya proses ini diulang. Pendekatan ini tampaknya melingkar: bagaimana kita menghasilkan varian seragam dengan proses yang membutuhkan variate seragam untuk memulainya?
Jawabannya adalah kita tidak benar-benar membutuhkan variasi yang seragam untuk melakukan langkah penolakan. Sebagai gantinya (dengan asumsi ) kita dapat membalik koin yang adil untuk mendapatkan 0 atau 1 secara acak. Ini akan ditafsirkan sebagai bit pertama dalam representasi biner dari variate seragam U dalam interval [ 0 , 1 ) . Ketika hasilnya adalah 0 , yang berarti 0 ≤ U < 1 / 2 ; jika tidak, 1 / 2 ≤ U < 1 . g(Y)≠001U[0,1)00≤U<1/21/2≤U<1 Separuh dari waktu, ini cukup untuk memutuskan langkah penolakan: jika tapi koin adalah 0 , Y harus diterima; jika f ( Y ) / g ( Y ) < 1 / 2 tapi koin adalah 1 , Y harus ditolak; jika tidak, kita perlu membalik koin lagi untuk mendapatkan bit U berikutnya . Karena - berapapun nilainya f ( Yf(Y)/g(Y)≥1/20Yf(Y)/g(Y)<1/21YU memiliki - ada 1 / 2 kesempatan untuk menghentikan setelah setiap lain, jumlah yang diharapkan dari membalik hanya 1 / 2 ( 1 ) + 1 / 4 ( 2 ) + 1 / 8 ( 3 ) + ⋯ + 2 - n ( n ) + ⋯ = 2 .f(Y)/g(Y)1/21/2(1)+1/4(2)+1/8(3)+⋯+2−n(n)+⋯=2
Sampling penolakan bisa bermanfaat (dan efisien) asalkan jumlah penolakan yang diharapkan kecil. Kita dapat mencapai ini dengan mencocokkan persegi panjang terbesar yang mungkin (mewakili distribusi seragam) di bawah PDF Normal.
Menggunakan Kalkulus untuk mengoptimalkan daerah persegi panjang, Anda akan menemukan bahwa titik ujungnya harus berada di , di mana ketinggiannya sama dengan exp ( - 1 / 2 ) / √±1, menjadikan luasnya sedikit lebih besar dari0,48. Dengan menggunakan kerapatan Normal standar ini sebagaigdan menolak semua nilai di luar interval[-1,1]secara otomatis, dan jika tidak menerapkan prosedur penolakan, kita akan mendapatkan variasi seragam dalam[-1,1] secaraefisien:exp(−1/2)/2π−−√≈0.2419710.48g[−1,1][−1,1]
Dalam fraksi saat itu, varian Normal berada di luar [ - 1 , 1 ]2Φ(−1)≈0.317[−1,1] dan langsung ditolak. ( adalah CDF Normal standar.)Φ
Dalam sisa fraksi waktu, prosedur penolakan biner harus diikuti, membutuhkan dua varian Normal rata-rata.
Prosedur keseluruhan membutuhkan rata-rata langkah.1/(2exp(−1/2)/2π−−√)≈2.07
The expected number of Normal variates needed to produce each uniform result works out to
2eπ−−−√(1−2Φ(−1))≈2.82137.
Although that is pretty efficient, note that (1) computation of the Normal PDF requires computing an exponential and (2) the value Φ(−1) must be precomputed once and for all. It's still a little less calculation than the Box-Mueller method (q.v.).
The order statistics of a uniform distribution have exponential gaps. Since the sum of squares of two Normals (of zero mean) is exponential, we may generate a realization of n independent uniforms by summing the squares of pairs of such Normals, computing the cumulative sum of these, rescaling the results to fall in the interval [0,1], and dropping the last one (which will always equal 1). This is a pleasing approach because it requires only squaring, summing, and (at the end) a single division.
The n values will automatically be in ascending order. If such a sorting is desired, this method is computationally superior to all the others insofar as it avoids the O(nlog(n)) cost of a sort. If a sequence of independent uniforms is needed, however, then sorting these n values randomly will do the trick. Since (as seen in the Box-Mueller method, q.v.) the ratios of each pair of Normals are independent of the sum of squares of each pair, we already have the means to obtain that random permutation: order the cumulative sums by the corresponding ratios. (If n is very large, this process could be carried out in smaller groups of k with little loss of efficiency, since each group needs only 2(k+1)kkO(nlog(k))O(n)2n(1+1/k)n uniform values.)
[0,1] (by taking only the fractional parts of the values), we thereby obtain a distribution that is uniform for all practical purposes. This is extremely efficient, requiring one of the simplest arithmetic operations of all: simply round each Normal variate down to the nearest integer and retain the excess. The simplicity of this approach becomes compelling when we examine a practical R
implementation:
rnorm(n, sd=10) %% 1
reliably produces n
uniform values in the range [0,1] at the cost of just n
Normal variates and almost no computation.
(Even when the standard deviation is 1, the PDF of this approximation varies from a uniform PDF, as shown in the following figure, by less than one part in 108! To detect it reliably would require a sample of 1016 values--that's already beyond the capability of any standard test of randomness. With a larger standard deviation the non-uniformity is so small it cannot even be calculated. For instance, with an SD of 10 as shown in the code, the maximum deviation from a uniform PDF is only 10−857.)
In every case Normal variables "with known parameters" can easily be recentered and rescaled into the Standard Normals assumed above. Afterwards, the resulting uniformly distributed values can be recentered and rescaled to cover any desired interval. These require only basic arithmetic operations.