Czy wprowadzi to uprzedzenia do liczb losowych?

11

Załóżmy, że plik danych ma ponad 80 milionów zer i zer, losowo generowanych.

Z tego pliku chcemy utworzyć listę losowych liczb całkowitych dziesiętnych.

Taki jest plan przeprowadzenia tej konwersji.

  1. Podziel 80 milionów cyfr na grupy 4 cyfr binarnych.
  2. Konwertuj każdy 4-cyfrowy plik binarny na dziesiętny.
  3. Odrzuć wszystkie wartości dziesiętne większe niż 9.

Powinno to dać ciąg liczb losowych od 0 do 9

Oto troska. 24 cyfry binarne, które składają się z 6 grup 4 cyfr binarnych, które odpowiadają wartościom od 10 do 15, zawierają 17 jedynek i tylko 7 zer. Czy ta nierównowaga wpłynie na rozkład liczb całkowitych parzystych i nieparzystych, czy w jakikolwiek sposób wpłynie na losowość końcowego ciągu cyfr dziesiętnych?

Aktualizacja: z opublikowanych odpowiedzi wydaje się, że powyższa metoda jest poprawna. Zgadzam się z tym wnioskiem. Nadal jednak nie rozumiem, dlaczego usunięcie więcej niż dwa razy więcej zer od ciągu binarnego nie wpływa na wynik w kierunku mniejszej liczby nieparzystych. Szukam wyjaśnień.

Joel W.
źródło
9
Istnieją bardziej wydajne metody. Na przykład, możesz podzielić ciąg bitów na grupy po 10, przekonwertować je na trzycyfrowe reprezentacje 10 i odrzucić dowolne o wartości 1000 lub większej. Wykorzystałoby to 97,6% bitów, a nie tylko 62,5%. Nie możesz zrobić nic lepszego. (Można użyć grup 681 i przekonwertować je na 205-cyfrowe ciągi base-10, wykorzystując w ten sposób prawie 99,7% bitów.)
whuber

Odpowiedzi:

18

Policzmy i zobaczmy. Dzięki konstrukcji pliku wszystkie ciągi 4-bitowe są jednakowo prawdopodobne. Istnieje 16 takich ciągów. Tutaj są:

 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

Twoja procedura wyrzuca ciągi od 10 do 15. Tak więc w przypadkach, których faktycznie używasz, wybierzesz od 0 do 9, z których każdy jest równie prawdopodobny, jak chcesz. Wiemy, że generowane cyfry dziesiętne są od siebie niezależne, ponieważ każdy używa osobnego ciągu 4 bitów, a wszystkie bity są niezależne. Twoja procedura stanowi prosty rodzaj próbkowania odrzucenia .

Kodiolog
źródło
5
Widzę tę logikę wyraźnie. Obawiam się jednak, że odrzucam więcej binarnych jedynek niż 0. Dlaczego ta nierównowaga nie ma żadnego wpływu?
Joel W.
5
@JoelW Chyba nie widzę twojego argumentu. Ostateczny rozkład dotyczy cyfr dziesiętnych, a nie bitów, więc rozkład bitów jest nieistotny.
Kodiolog,
7
To prawda, ale tylko częściowo odpowiada na pytanie. Aby odnieść się do części pytania „kompromis losowości ... w jakikolwiek sposób”, należy również ustalić, że wynikowe cyfry dziesiętne są, w doskonałym przybliżeniu, niezależne . Dla kompletności warto poświęcić jedno zdanie wyjaśnienia temu (oczywistemu) wynikowi.
whuber
7
Joel, widzę skąd pochodzisz. Może być tutaj błędne wyobrażenie: nie można odwrócić procesu. Jeśli chcesz zrekonstruować strumień bitów ze strumienia cyfr dziesiętnych, musisz zrobić coś takiego, jak usunąć wszystkie 8 i 9 i przekonwertować pozostałe cyfry na trzy binarne. To przywróci równowagę. W rzeczywistości łatwo zauważyć, że ta „podróż w obie strony” sprowadza się do rozbicia oryginalnego strumienia na czterobitowe wątki i odrzucenia ich najbardziej znaczących bitów, pozostawiając ładnie równomiernie rozłożoną sekwencję 60 milionów bitów.
whuber
1
@whuber Fair; dodany.
Kodiolog,
4

Nie ma uprzedzeń, ponieważ po prostu symulujesz niektóre wartości, które są odrzucane, a wszystkie wartości, w tym te, które są przechowywane, są generowane z takim samym prawdopodobieństwem: wprowadź opis zdjęcia tutaj

Kod R dla powyższego wykresu to

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
źródło