TRANSFORMASI BOX-MULLER

Transformasi Box-Muller

Box-Muller ditemukan oleh George Edward Pelham Box dan Mervin Edgar Muller. Box-Muller umumnya diekspresikan dalam dua bentuk. Pertama bentuk dasar seperti yang diberikan oleh Box dan Muller mengambil dua sampel dari distribusi seragam pada interval [0, 1] dan memetakannya ke dua sampel standar, terdistribusi normal. Kedua bentuk polar mengambil dua sampel dari interval yang berbeda, [-1, 1], dan memetakannya ke dua sampel terdistribusi normal tanpa menggunakan fungsi sinus atau kosinus. Algoritma Box-Muller digunakan untuk generator bilangan acak yang terdistribusi Gaussian dengan memberikan variasi pada pemilihan skenario yang dibuat untuk mensimulasikan skenario secara dinamik (Thomas, Luk, Leong, & Villasenor, 2007). Box-Muller ini secara umum terdapat dua parameter mean (𝜇) dan standar deviasi (𝜎).

dan

Dari persamaan (1) diatas dapat disederhanakan. cos (2𝜋𝑈2) dapat ditulis menjadi (𝑢/√𝑠). (𝑈1) dan (𝑈2) dapat ditulis menjadi 𝑠. Dimana (𝑈1) dan (𝑈2) merupakan variabel acak dari interval (0, 1). Sehingga dapat disederhanakan.

Demikian dengan persamaan (2) dapat disederhanakan. sin (2𝜋𝑈2) dapat ditulis menjadi (𝑣/√𝑠). (𝑈1) dan (𝑈2) dapat ditulis menjadi 𝑠. Dimana (𝑈1) dan (𝑈2) merupakan variabel acak dari interval (0, 1). Sehingga dapat disederhanakan.

Dengan adanya penyederhanaan di atas, maka dapat ditarik kesimpulan bahwa persamaan (1) dan (2) dapat disederhanakan menjadi.

atau

Contoh Program di Software R Studio

Dibawah ini merupakan syntax atau perintah yang dijalankan pada software R Studio dengan membangkitkan data yang random dan ditransformasi Box-Muller.

> #Program inti untuk membangkitkan 2*50 data normal standar
> u1 <- runif(50,0,1)
> u1
[1] 0.115694534 0.903334009 0.772026067 0.922205786 0.446081026
[6] 0.714667152 0.685462085 0.986559282 0.675087005 0.900223890
[11] 0.458493509 0.813529905 0.088733827 0.457111364 0.169151026
[16] 0.301846303 0.718424853 0.358360699 0.145043908 0.358167740
[21] 0.327284271 0.334474868 0.050656719 0.807853217 0.669388794
[26] 0.262831288 0.508707702 0.748425867 0.774745010 0.826821435
[31] 0.563727944 0.097825259 0.115706726 0.198049309 0.245121093
[36] 0.9676[41] 0.047389230 0.601007633 0.571552487 0.732313148 0.635932534
[46] 0.094821283 0.656127457 0.721306703 0.598392067 0.639175231
> u2 <- runif(50,0,1)
> u2
[1] 0.94789532 0.24923125 0.43254050 0.39121825 0.27300331 
0.68999877
[7] 0.41834596 0.50229261 0.49998667 0.02603243 0.61432423 
0.28107841
[13] 0.61513427 0.17112237 0.06689405 0.72401548 0.34717307 
0.85234709
[19] 0.34976201 0.95824414 0.51864666 0.05088930 0.77119256 
0.56805812
[25] 0.31428982 0.44259551 0.96745206 0.40799246 0.23548289 
0.62876506
[31] 0.58166617 0.04759819 0.26997985 0.10679240 0.70409554 
0.12775251
[37] 0.77277212 0.05990384 0.51198759 0.48713112 0.23758395 
0.19003213
[43] 0.21346868 0.44024819 0.27728650 0.35494972 0.37248362 
0.15416537
[49] 0.99180646 0.88153590
> z1 <- sqrt(-2*log(u1))*cos(2*pi*u2)
> z1
[1] 1.966610179 0.002178016 -0.655699276 -0.312055051 -
0.183011092
[6] -0.301750539 -0.757200439 -0.164493493 -0.886469060 
0.452381712
[11] -0.940271988 -0.124656838 -1.649736505 0.595052642 
1.721105977
[16] -0.251580746 -0.466259775 0.859079337 -1.152651334 
1.383969946
[21] -1.484361559 1.404982066 0.324263301 -0.594437751 -
0.352163882
[26] -1.529586051 1.138425852 -0.637584105 0.065077556 -
0.425643628
[31] -0.932797456 2.060477508 -0.260040044 1.409433484 -
0.476984867
[36] 0.178229113 0.127886524 0.806836097 -3.111514097 -
1.311763613
[41] 0.192460687 0.371287330 0.240658277 -0.734383512 -
0.162330617
[46] -1.329836744 -0.638809072 0.457843093 1.012076412 
0.695913752
> z2 <- sqrt(-2*log(u1))*sin(2*pi*u2)
> z2
[1] -6.678684e-01 4.509114e-01 2.958587e-01 2.541563e-01 
1.257385e+00
[6] -7.621177e-01 4.265814e-01 -2.369675e-03 7.426566e-05 
7.466155e-02
31940 0.668861616 0.686371570 0.007686217 0.420625876
[11] -8.218923e-01 6.302427e-01 -1.456914e+00 1.100713e+00 
7.692339e-01
[16] -1.527214e+00 6.663259e-01 -1.146479e+00 1.591487e+00 -
3.716650e-01
[21] -1.747085e-01 4.652015e-01 -2.420789e+00 -2.709125e-01 
8.238696e-01
[26] 5.769336e-01 -2.361143e-01 4.159961e-01 7.114826e-01 -
4.462741e-01
[31] -5.256005e-01 6.352774e-01 2.060527e+00 1.118917e+00 -
1.607635e+00
[36] 1.845030e-01 -8.876943e-01 3.188853e-01 -2.348043e-01 
1.062978e-01
[41] 2.462048e+00 9.383182e-01 1.029991e+00 2.894391e-01 
9.375363e-01
[46] 1.715534e+00 6.593356e-01 6.661542e-01 -5.214935e-02 -
6.409815e-01
> z <- c(z1,z2)
> z
[1] 1.966610e+00 2.178016e-03 -6.556993e-01 -3.120551e-01
[5] -1.830111e-01 -3.017505e-01 -7.572004e-01 -1.644935e-01
[9] -8.864691e-01 4.523817e-01 -9.402720e-01 -1.246568e-01
[13] -1.649737e+00 5.950526e-01 1.721106e+00 -2.515807e-01
[17] -4.662598e-01 8.590793e-01 -1.152651e+00 1.383970e+00
[21] -1.484362e+00 1.404982e+00 3.242633e-01 -5.944378e-01
[25] -3.521639e-01 -1.529586e+00 1.138426e+00 -6.375841e-01
[29] 6.507756e-02 -4.256436e-01 -9.327975e-01 2.060478e+00
[33] -2.600400e-01 1.409433e+00 -4.769849e-01 1.782291e-01
[37] 1.278865e-01 8.068361e-01 -3.111514e+00 -1.311764e+00
[41] 1.924607e-01 3.712873e-01 2.406583e-01 -7.343835e-01
[45] -1.623306e-01 -1.329837e+00 -6.388091e-01 4.578431e-01
[49] 1.012076e+00 6.959138e-01 -6.678684e-01 4.509114e-01
[53] 2.958587e-01 2.541563e-01 1.257385e+00 -7.621177e-01
[57] 4.265814e-01 -2.369675e-03 7.426566e-05 7.466155e-02
[61] -8.218923e-01 6.302427e-01 -1.456914e+00 1.100713e+00
[65] 7.692339e-01 -1.527214e+00 6.663259e-01 -1.146479e+00
[69] 1.591487e+00 -3.716650e-01 -1.747085e-01 4.652015e-01
[73] -2.420789e+00 -2.709125e-01 8.238696e-01 5.769336e-01
[77] -2.361143e-01 4.159961e-01 7.114826e-01 -4.462741e-01
[81] -5.256005e-01 6.352774e-01 2.060527e+00 1.118917e+00
[85] -1.607635e+00 1.845030e-01 -8.876943e-01 3.188853e-01
[89] -2.348043e-01 1.062978e-01 2.462048e+00 9.383182e-01
[93] 1.029991e+00 2.894391e-01 9.375363e-01 1.715534e+00
[97] 6.593356e-01 6.661542e-01 -5.214935e-02 -6.409815e-01
> plot(density(z), xlab = 'x', ylab = 'p')
> x <- seq(min(z), max(z), 0.1)
> x
[1] -3.1115141 -3.0115141 -2.9115141 -2.8115141 -2.7115141 -
2.6115141
[7] -2.5115141 -2.4115141 -2.3115141 -2.2115141 -2.1115141 -
2.0115141
[13] -1.9115141 -1.8115141 -1.7115141 -1.6115141 -1.5115141 -
1.4115141
[19] -1.3115141 -1.2115141 -1.1115141 -1.0115141 -0.9115141 -
0.8115141
[25] -0.7115141 -0.6115141 -0.5115141 -0.4115141 -0.3115141 -
0.2115141
[31] -0.1115141 -0.0115141 0.0884859 0.1884859 0.2884859 
0.3884859
[37] 0.4884859 0.5884859 0.6884859 0.7884859 0.8884859 
0.9884859
[43] 1.0884859 1.1884859 1.2884859 1.3884859 1.4884859 
1.5884859
[49] 1.6884859 1.7884859 1.8884859 1.9884859 2.0884859 
2.1884859
[55] 2.2884859 2.3884859
> y <- dnorm(x,0,1)
> y
[1] 0.003152062 0.004281092 0.005756672 0.007663823 0.010101283
[6] 0.013181493 0.017029808 0.021782712 0.027584887 0.034584979
[11] 0.042929999 0.052758361 0.064191684 0.077325600 0.092219951
[16] 0.108888879 0.127291447 0.147323481 0.168811403 0.191508758
[21] 0.215096110 0.239184773 0.263324674 0.287016349 0.309726791
[26] 0.330908532 0.350021090 0.366553622 0.380047494 0.390117369
[31] 0.396469474 0.398915837 0.397383523 0.391918252 0.382682127
[36] 0.369945648 0.354074558 0.335512400 0.314759963 0.292352930
[41] 0.268839123 0.244756675 0.220614308 0.196874678 0.173941456
[46] 0.152150505 0.131765207 0.112975730 0.095901769 0.080598161
[51] 0.067062649 0.055245045 0.045057077 0.036382267 0.029085300
[56] 0.023020481
> lines(x,y)

> #Menguji kenormalan data
> nortest::ad.test(z)
Anderson-Darling normality test
data: z
A = 0.16102, p-value = 0.9458
> nortest::cvm.test(z)
Cramer-von Mises normality test
data: z
W = 0.019321, p-value = 0.9733
> nortest::lillie.test(z)
Lilliefors (Kolmogorov-Smirnov) normality test
data: z
D = 0.037542, p-value = 0.9795

Berdasarkan percobaan diatas dengan membangkitkan data sebanyak 100 data dengan nilai mean = 0, dan standar deviasi = 1 pada software R Studio. Setelah data dibangkitkan secara acak, amak kita akan transformasi data tersebut dari distribusi uniform ke distribusi normal dengan transformasi Box-Muller. Transformasi Box-Muller pada percobaan ini dinyatakan dengan 𝑧1 dan 𝑧2, selanjutnya 𝑧1 dan 𝑧2 digabungkan untuk memperoleh nilai 𝑍. Kemudian plot data 𝑍 yang diperoleh untuk melihat distribusi data.

Selanjutnya yaitu menguji kenormalan data dengan menggunakan beberapa uji diantaranya yaitu Anderson-Darling normality test, Cramer-von Mises normality test, dan Lilliefors (Kolmogorof-Smirnov) normality test. Dengan uji tersebut didapatlah nilai p-value tiap uji kenormalan, semua nilai p-value-nya > 𝛼 = 5% yang dimana gagal tolak 𝐻0 yang artinya data tersebut sudah berdistribusi normal.

1 Response

Leave a Reply