Apakah ini akan menimbulkan bias ke dalam angka acak?

11

Asumsikan file data dengan 80+ juta yang dan nol, dihasilkan secara acak.

Dari file ini, kami ingin membuat daftar bilangan bulat desimal acak.

Ini adalah rencana untuk melakukan konversi ini.

  1. Membagi 80 juta digit menjadi pengelompokan 4 digit biner.
  2. Ubah setiap biner 4 digit menjadi desimal.
  3. Buang semua nilai desimal lebih besar dari 9.

Ini akan menghasilkan string bilangan bulat acak dari 0-9

Inilah kekhawatirannya. 24 digit biner yang terdiri dari 6 pengelompokan dari 4 digit biner yang sesuai dengan nilai 10 hingga 15 berisi 17 angka dan hanya 7 angka nol. Apakah ketidakseimbangan ini mempengaruhi distribusi bilangan bulat bahkan vs ganjil, atau kompromi keacakan string akhir angka desimal dengan cara apa pun?

Pembaruan: Dari jawaban yang diposting, tampaknya metode yang disebutkan di atas adalah suara. Saya setuju dengan kesimpulan itu. Namun, saya masih tidak mengerti mengapa menghapus yang lebih dari dua kali lebih banyak daripada nol dari string biner tidak bias hasilnya ke angka ganjil yang lebih sedikit. Saya mencari penjelasan.

Joel W.
sumber
9
Ada metode yang lebih efisien. Sebagai contoh, Anda dapat mempartisi string bit ke dalam grup 10, mengonversinya menjadi basis representasi tiga digit 10, dan membuangnya dengan nilai 1000 atau lebih. Ini akan menggunakan 97,6% dari bit daripada hanya 62,5% dari mereka. Anda tidak dapat melakukan jauh lebih baik dari itu. (Anda dapat menggunakan grup 681 dan mengonversinya menjadi string 10-basis-digit 205, dengan demikian menggunakan hampir 99,7% dari bit.)
whuber

Jawaban:

18

Mari berhitung dan lihat. Dengan membangun file, semua string 4-bit kemungkinan sama. Ada 16 string semacam itu. Di sini mereka:

 0. 0000
 1. 0001
 2. 0010
 3. 0011
 4. 0100
 5. 0101
 6. 0110
 7. 0111
 8. 1000
 9. 1001
10. 1010
11. 1011
12. 1100
13. 1101
14. 1110
15. 1111

Prosedur Anda membuang string 10 hingga 15. Jadi dalam kasus yang benar-benar Anda gunakan, Anda akan memilih 0 hingga 9, yang masing-masing kemungkinan sama, seperti yang diinginkan. Dan kita tahu digit desimal yang dihasilkan tidak tergantung satu sama lain karena masing-masing menggunakan string terpisah 4 bit dan semua bit independen. Prosedur Anda merupakan jenis sampel penolakan sederhana .

Kodiologis
sumber
5
Saya melihat logika itu dengan jelas. Namun saya khawatir bahwa saya membuang lebih banyak biner 1 daripada 0. Mengapa ketidakseimbangan itu tidak berdampak?
Joel W.
5
@ JoelW, saya kira saya tidak melihat argumen Anda. Distribusi akhir menyangkut digit desimal, bukan bit, sehingga distribusi bit tidak relevan.
Kodiologist
7
Ini benar, tetapi hanya sebagian menjawab pertanyaan. Untuk menjawab bagian "kompromi keacakan ... dengan cara apa pun" dari pertanyaan, kita juga harus menetapkan bahwa angka desimal yang dihasilkan, dengan pendekatan yang sangat baik, independen . Demi kelengkapan, ada baiknya mencurahkan satu kalimat penjelasan untuk hasil (jelas) itu.
whuber
7
Joel, aku tahu dari mana asalmu. Mungkin ada kesalahan persepsi di sini: Anda tidak dapat membalikkan prosesnya. Jika Anda ingin merekonstruksi aliran bit dari aliran angka desimal, Anda harus melakukan sesuatu seperti menghapus semua 8 dan 9 dan mengubah digit yang tersisa menjadi tiga kali lipat biner. Itu akan mengembalikan keseimbangan. Faktanya, mudah untuk melihat bahwa "perjalanan pulang-pergi" ini sama dengan memecah aliran asli Anda menjadi empat-bit nybbles dan membuang bit-bit paling signifikan mereka, meninggalkan urutan 60 juta bit yang terdistribusi secara merata dan merata.
whuber
1
@whuber Cukup adil; ditambahkan.
Kodiologist
4

Tidak ada bias karena Anda hanya mensimulasikan beberapa nilai yang dibuang dan semua nilai termasuk yang disimpan dihasilkan dengan probabilitas yang sama: masukkan deskripsi gambar di sini

Kode R untuk grafik di atas adalah

generza=matrix(sample(0:1,4*1e6,rep=TRUE),ncol=4)
uniz=generza[,1]+2*generza[,2]+4*generza[,3]+8*generza[,4]
barplot(hist(uniz[uniz<10],breaks=seq(-0.5,9.5,le=11))$counts,col="steelblue")
Xi'an
sumber