Metode terbaik untuk mengubah urutan perbedaan rendah menjadi distribusi normal?

9

Saya telah menggunakan sekuens diskrepansi yang rendah untuk sementara waktu untuk Distribusi Seragam, karena saya telah menemukan sifat-sifatnya berguna (terutama dalam grafik komputer untuk penampilan acak mereka dan kemampuan mereka untuk menutupi [0,1] dengan padat secara bertahap).

Misalnya, nilai acak di atas, nilai urutan Halton di bawah:

http://i.stack.imgur.com/gCXrh.png

Saya sedang mempertimbangkan menggunakannya untuk perencanaan analisis keuangan, tetapi saya membutuhkan distribusi yang berbeda dari sekadar seragam. Saya mulai mencoba menghasilkan distribusi normal dari distribusi seragam saya melalui algoritma kutub Marsaglia, tetapi hasilnya tidak sebagus distribusi seragam.

Contoh lain, lagi-lagi acak di atas, Halton di bawah:

http://i.stack.imgur.com/NNcdH.png

Pertanyaan saya adalah: Apa metode terbaik untuk mendapatkan distribusi normal dengan properti yang saya dapatkan dari urutan perbedaan rendah yang seragam - cakupan, pengisian tambahan, non-korelasi di berbagai dimensi? Apakah saya berada di jalur yang benar, atau haruskah saya mengambil pendekatan yang sama sekali berbeda?

(Kode Python untuk distribusi seragam dan normal yang saya gunakan di atas: Gist 2566569 )

Edouard Poor
sumber
3
Tentunya Anda telah melihat jawaban alami dan jelas, yaitu menerapkan probabilitas transformasi ke nilai-nilai seragam. Dalam hal apa pendekatan ini gagal memenuhi kebutuhan Anda?
whuber
Itulah yang saya asumsikan sebagai cara normal untuk membuat distribusi seperti itu dari input yang seragam, tetapi saya kesulitan menemukan algoritma seperti itu (saya seorang programmer, bukan ahli statistik, jadi saya mulai dari awal dalam pencarian saya). Metode yang saya temukan adalah Box Muller, Marsaglia Polar, Ziggarat dan Rasio Seragam, yang semuanya memerlukan pencampuran lebih dari satu sampel input yang tampaknya menghancurkan karakteristik yang saya coba pertahankan dalam urutan Perbedaan Rendah. Saya baru saja menemukan halaman berikut: home.online.no/~pjacklam/notes/invnorm yang telah memberi saya info yang saya inginkan.
Edouard Poor
3
Ya, situs itu mengimplementasikan transformasi probabilitas untuk distribusi Normal. Anda mungkin mengalami kesulitan dalam meneliti hal ini karena sangat terkenal sehingga hampir semua metode alternatif untuk menghasilkan nilai acak secara implisit mengasumsikan Anda dapat menggunakan metode ini dan kemudian mencari cara yang lebih efisien dalam kasus-kasus khusus (termasuk empat metode yang Anda daftarkan).
whuber
3
Pembalikan akan menjadi satu-satunya metode yang valid untuk kasus ini!
kjetil b halvorsen
Saya ingin tahu apakah kita juga bisa mendapatkan beberapa nilai acak semu distribusi lain, misalnya nilai kuasi-acak distribusi beta?
user315648

Jawaban:

5

Anda dapat mengubah dari variabel acak ke distribusi lain menggunakan invers dari CDF, juga disebut fungsi titik persen. Ini diimplementasikan sebagai scipy.stats.norm.ppf .U(0,1)scipy

Brian Z
sumber
6

Saya baru-baru ini menemukan masalah ini. Secara naif saya berpikir bahwa setiap transformasi dari seragam akan bekerja, jadi saya menghubungkannya ke urutan 1D Sobol (dan Halton) seolah-olah urutan di mana generator angka acak menjadi suatu std::normal_distribution<>variasi. Yang mengejutkan saya itu tidak bekerja, itu jelas menghasilkan distribusi yang tidak normal.

Ok, kemudian saya mengambil fungsi Numerical Recipes Edisi Ketiga Bab 7.3.9 Normal_devuntuk menghasilkan angka normal dari urutan Sobol atau Halton dengan metode "Ratio-of-Uniforms" dan gagal dengan cara yang sama. Maka saya berpikir, ok, jika Anda melihat kode, dibutuhkan dua angka acak yang seragam untuk menghasilkan dua angka acak yang terdistribusi normal. Mungkin jika saya menggunakan urutan 2D Sobol (atau Halton), itu akan berhasil. Yah, gagal lagi.

Saya ingat tentang "metode Box-Muller" (disebutkan dalam komentar) dan karena memiliki interpretasi yang lebih geometris maka saya pikir itu bisa berhasil. Ya, itu berhasil! Saya sangat senang memulai melakukan tes lain, distribusi terlihat normal.

Masalah yang saya lihat adalah bahwa distribusinya tidak lebih baik daripada acak, itu syarat pengisian, jadi saya agak kecewa, tetapi siap untuk mempublikasikan hasilnya.

Kemudian saya melakukan pencarian yang lebih dalam (sekarang saya tahu apa yang harus dicari), dan ternyata sudah ada makalah tentang subjek ini: http://www.sciencedirect.com/science/article/pii/S0895717710005935

Dalam makalah ini sebenarnya diklaim

Dua metode terkenal yang digunakan dengan angka pseudorandom adalah Box-Muller dan metode transformasi terbalik. Beberapa peneliti dan insinyur keuangan mengklaim bahwa menggunakan metode Box-Muller tidak benar dengan urutan perbedaan rendah, dan sebaliknya, metode transformasi terbalik harus digunakan. Dalam makalah ini kami membuktikan bahwa metode Box-Muller dapat digunakan dengan urutan perbedaan rendah, dan mendiskusikan kapan penggunaannya bisa benar-benar menguntungkan.

Jadi kesimpulan keseluruhannya adalah ini:

1) Anda dapat menggunakan Box-Muller pada urutan perbedaan rendah 2D untuk mendapatkan urutan terdistribusi normal. Tetapi beberapa percobaan saya tampaknya menunjukkan bahwa perbedaan rendah / ruang, misalnya mengisi properti hilang dalam urutan transformasi normal.

2) Anda dapat menggunakan metode inversi, mungkin properti diskrepansi / ruang isi rendah akan dipertahankan.

3) Rasio-of-Seragam tidak dapat digunakan.

EDIT : Ini https://mathoverflow.net/a/144234 menunjuk ke kesimpulan yang sama.

Saya membuat ilustrasi (gambar pertama (Rasio seragam pada Sobol) menunjukkan bahwa distribusi yang diperoleh tidak normal tetapi ohters (Box-Muller dan acak untuk perbandingan) adalah):

angka

EDIT2:

Poin utama adalah bahwa, bahkan jika Anda menemukan metode yang dapat mengubah "distribusi" dari urutan perbedaan rendah, tidak jelas bahwa Anda akan mempertahankan sifat pengisian yang baik. Jadi Anda tidak lebih baik daripada dengan distribusi normal (standar) yang benar-benar acak. Saya belum menemukan metode yang perbedaannya rendah dan belum memenuhi dengan distribusi yang tidak seragam. Saya yakin metode seperti itu sangat tidak jelas dan mungkin merupakan masalah terbuka.

alfC
sumber
Dalam makalah yang disebutkan di atas ( sciencedirect.com/science/article/pii/S0895717710005935 ) kalimat terakhir berbunyi: "Berdasarkan hasil ini, kami menyimpulkan bahwa Box-Muller adalah alternatif yang baik untuk metode transformasi terbalik untuk menghasilkan urutan perbedaan rendah untuk menghasilkan urutan perbedaan rendah dari distribusi normal. " Tidakkah ini bertentangan dengan poin 1 dari kesimpulan yang dinyatakan?
ngiann
@ ngiann, Tidak bertentangan. Makalah ini mencapai kesimpulan yang sama bahwa distribusi diperoleh dengan benar oleh transformasi BM tetapi tidak dengan metode lain. Bagian kedua dari kalimat ("Tapi properti perbedaan / ruang mengisi rendah tampaknya hilang.") Terkait dengan properti sekunder yang dicari dalam urutan perbedaan rendah, seperti pengisian ruang yang efisien. Eksperimen saya tidak menunjukkan bahwa properti diterjemahkan ke urutan transformasi normal. Jika saya ingat benar kertas tidak masuk ke masalah khusus itu. Saya pikir ini perlu studi lebih lanjut untuk meyakinkan.
alfC
1

Ada dua metode yang bagus. Pertama, seperti yang disebutkan di atas, perkiraan akurat terhadap kebalikan dari distribusi Gaussian dapat digunakan. Kemudian seseorang dapat mengubah urutan perbedaan rendah menjadi Gaussian.

Metode kedua adalah Box-Muller. Metode ini membutuhkan dua nomor put (R dan A) dan menghasilkan dua output. Diperlukan urutan perbedaan dua dimensi yang rendah. Satu mengambil (misalnya dalam Urutan Halton), pasang bilangan prima digunakan, satu untuk komponen radial (R) dan satu untuk komponen sudut (A). Satu mendapat Sqrt (-2 * Log (R)) untuk komponen radial dan Sin (2 * Pi * A) dan Cos (2 * Pi * A) untuk komponen sudut. Mengalikan radial dengan dua komponen sudut (secara terpisah) menghasilkan dua Gaussians. Efisiensinya sama dengan di atas; dua input semi-acak dan dua output Gaussian.

Setiap urutan perbedaan rendah multi-dimensi dapat digunakan, tergantung pada dimensi masalah.

ttw
sumber
0

Metode yang paling asli memang menggunakan CDF terbalik untuk berubah menjadi Gaussian normal, tetapi ada juga masalah dengan ini. Jika Anda memiliki mis. LDS point set create by rank-1 lattices, maka itu akan menjadi titik awal selalu (0,0), jadi untuk mengubahnya Anda perlu sedikit perubahan, lebih baik untuk memiliki celah yang sama seperti untuk sudut (1,1).

Sejauh ini tidak ada masalah, tetapi untuk distribusi Gaussian yang ideal N (0,1) + N (0,1) harus memberikan distribusi yang sama dengan perbedaannya. Namun, ini tidak akan menjadi kasus menggunakan peringkat-1 kisi LDS dan iCDF pada setiap variabel, karena titik awal di setiap variabel akan memberikan iCDF tertentu, seperti (tergantung pada N), jadi perbedaannya adalah .3σ6σ

Dan itu adalah nilai yang terlalu ekstrem, yang benar-benar mengarah ke kesalahan sistematis (misalnya Anda tidak akan mendapatkan di sisi lain). Sebaiknya periksa LDS Anda yang telah diubah juga untuk jumlah dan perbedaan, periksa titik ekstrem seperti itu dan juga untuk kemiringan dan kurtosis.+6σ

Stephan
sumber