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:
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:
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 )
sumber
Jawaban:
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
sumber
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_dev
untuk 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
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):
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.
sumber
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.
sumber
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σ
sumber