Генерування випадкових чисел вручну


30

Як я можу вручну генерувати випадкове число із заданого розподілу, як, наприклад, 10 реалізацій від стандартного нормального розподілу?


10
Чи можете ви пояснити, чому ви хочете це зробити та які інші обмеження у вас є?
mdewey

2
Ви можете отримати таблицю випадкових чисел (rand, що використовується для їх публікації серед інших).
Бетмен

4
@Batman: так, і книга RAND з 10⁶ випадковими числами отримала 655 коментарів щодо Amazon. Все передбачувано, звичайно.
Сіань

10
(Я здивований, що ніхто не коментував це раніше) Якщо це абсолютно не по суті, не слід намагатися використовувати спеціальні реалізації для генерації випадкових чисел. Так, чудово знати, як це зробити, і це, мабуть, перше, що вам покажуть у класі " Методи МС " (і це чудово!), Але цього не робите в жодних реальних життєвих проектах. Спеціалізовані процедури генерації випадкових чисел існують з причини, реалізація основного алгоритму з нуля - це втрата часу, джерела помилок і погані зусилля щодо обізнаності на місцях.
usεr11852 повідомляє Відновити Монік

2
@ Xi'an: Так, я згоден, це безпечна презумпція. Як вже згадувалося, це лише коментар, щоб застерегти людей від використання власного РНГ, не усвідомлюючи, що дизайн RNG - дуже серйозний бізнес. Щоб процитувати фон Нейман : «Будь-який, хто вважає арифметичні методи отримання випадкових чисел є, звичайно ж , в стані гріха.»
usεr11852 повідомляє Відновити Монік

Відповіді:


46

Якщо "вручну" включає "механічний", то у вас є багато варіантів. Щоб імітувати змінну Бернуллі з половиною ймовірності, ми можемо кинути монету: для хвостів, для голів. Для імітації геометричного розподілу ми можемо порахувати, скільки кидок монет потрібно, перш ніж ми отримаємо голови. Щоб імітувати двочленний розподіл, ми можемо кинути свою монету разів (або просто кинути монет) і порахувати голови. « У шаховому порядку» або «боб машина» або «Гальтон вікно» є більш кінетичну альтернативу - чому б не встановити один з них в дію і побачити для себе ? Здається , немає такої речі, як "зважена монета"1 n n p = 0,5 { 1 , 2 , 3 , 4 , 5 , 6 } { 1 , 2 , 3 , 4 }01ннале якщо ми хочемо змінити параметр ймовірності нашої Бернуллі або біноміальної змінної на значення, відмінні від , голка Жорж-Луї Леклер, Конт де Буффон дозволить нам це зробити. Для імітації дискретного рівномірного розподілу на прокатуємо шестигранну штамп. Шанувальники рольових ігор зіткнуться з більш екзотичними кістками , наприклад, з тетраедричних кісток, щоб провести рівномірний вибір із , тоді як за допомогою спінера або колеса рулетки все одно можна піти далі. ( Графічне зображення )p=0,5{1,2,3,4,5,6}{1,2,3,4}

Різноманітність кісток

Невже нам би довелося божеволіти, щоб генерувати випадкові числа таким чином сьогодні, коли це лише одна команда на комп'ютерній консолі - або, якщо у нас є відповідна таблиця випадкових чисел, один пробіг до найбрудніших куточків книжкової полиці? Можливо, хоча у фізичному експерименті є щось приємно тактильне. Але для людей, що працюють до епохи комп’ютера, і раніше перед широко доступними широкомасштабними таблицями випадкових чисел (з яких пізніше), моделювання випадкових змінних вручну мало більше практичного значення. Коли Буффон досліджував петербурзький парадокс- знаменита гра в монети, де сума гравця виграється вдвічі щоразу, коли кидається голова, гравець втрачає перші хвости, і очікувана їх виплата проти інтуїтивно нескінченна - йому потрібно було імітувати геометричний розподіл за допомогою . Для цього, здається, він найняв дитину, щоб кинути монету, щоб імітувати 2048 ігор петербурзької гри, записуючи, скільки кидок до закінчення гри. Цей модельований геометричний розподіл відтворений у Стиглера (1991) :p=0.5

Tosses Frequency
1      1061
2      494
3      232
4      137
5      56
6      29
7      25
8      8
9      6

У тому ж есе, де він опублікував це емпіричне розслідування петербурзького парадоксу, Буффон також представив знамениту « голку Буфона ». Якщо площину розділити на смужки паралельними прямими відстань один від одного, а голка довжиною опустити на неї, ймовірність, що голка перетинає одну з ліній, є .l d 2 ldld2lπd

Експеримент з голкою Буфона

Отже, голка Буфона може використовуватися для імітації випадкової змінної або , і ми можемо регулювати ймовірність успіху, змінюючи довжину наших голок або (можливо, зручніше) відстань, на якій ми правимо лінії. Альтернативне використання голок Буфона є надзвичайно неефективним способом знайти ймовірнісне наближення для . На зображенні ( кредиті ) зображено 17 сірників, з яких 11 перетинають лінію. Коли відстань між правими лініями встановлено рівним довжині сірника, як тут, очікувана частка схрещування сірників становить і отже, ми можемо оцінитиXдвочлен(n,2lXBernoulli(2lπd)π2XBinomial(n,2lπd)π2ππ^як вдвічі зворотна частка спостережуваного дробу: тут ми отримуємо . У 1901 році Маріо Лаццаріні стверджував, що провів експеримент, використовуючи 2,5 см голки з лініями на відстані 3 см, а після 3408 кидок отримав . Це добре відомий раціональний , точний до шести знаків після коми. Badger (1994) наводить переконливі докази того, що це було шахрайством , і не менш важливо, щоб бути 95% впевненим у шести десяткових знаках точності за допомогою апарату Лацаріні, потрібно терпнути терпіння 134 трильйона голок! Безумовно, голка Буфона є більш корисною як генератор випадкових чисел, ніж як метод оцінки .π^=217113.1π^=355113ππ


Наші генератори поки що невтішно дискретні. Що робити, якщо ми хочемо імітувати нормальний розподіл? Один варіант - отримати випадкові цифри та використовувати їх для формування хороших дискретних наближень до рівномірного розподілу на , а потім виконати деякі обчислення, щоб перетворити їх у випадкові нормальні відхилення. Колесо прядильника або рулетки може дати десяткові цифри від нуля до дев'яти; кістки можуть генерувати двійкові цифри; якщо наші арифметичні навички можуть впоратися з кумеднішою базою, навіть стандартний набір кубиків зробив би. Інші відповіді більш детально висвітлювали подібний підхід на основі трансформації; Я відкладаю будь-яке подальше обговорення цього питання до кінця.[0,1]

До кінця дев'ятнадцятого століття корисність нормального розподілу була добре відома, і тому були статистики, які прагнули моделювати випадкові нормальні відхилення. Потрібно сказати, що тривалі обчислення рук не були б придатними, за винятком налаштування процесу імітації в першу чергу. Як тільки це було встановлено, генерація випадкових чисел повинна бути відносно швидкою і простою. Стіглер (1991) перераховує методи, якими користуються три статистики цієї епохи. Усі досліджували методи згладжування: випадкові нормальні відхилення представляли очевидний інтерес, наприклад, для імітації похибки вимірювання, яку потрібно було згладити.

Чудовий американський статистик Ерастус Ліман Де Ліс зацікавився вирівнюванням таблиць життя і зіткнувся з проблемою, яка вимагала моделювання абсолютних значень нормальних відхилень. Що доведе, що є актуальною темою, Де Форест справді відбирав вибір із напів нормальної дистрибуції . Більше того, замість того, щоб використовувати стандартне відхилення одиниці ( ми звикли називати "стандартним"), Де Фостер захотів "ймовірної помилки" (середнього відхилення) одиниці. Така форма була наведена в таблиці "Ймовірність помилок" у додатках до "Посібника зі сферичної та практичної астрономії, том II" Вільяма ЧавенетаZN(0,12). З цієї таблиці Де Форест інтерполював квантили напів нормального розподілу від до , які він вважав "помилками однакової частоти".p=0.005p=0.995

Таблиця помилок De Forest з однаковою частотою

Якщо ви хочете імітувати нормальний розподіл, слідуючи за De Forest, ви можете роздрукувати цю таблицю і вирізати її. Де Форест (1876) писав, що помилки "були вписані на 100 біт картонної дошки однакового розміру, які були струшені у коробці і всі витягнуті одна за одною".

Астроном і метеоролог сер Джордж Говард Дарвін (син натураліста Чарльза) поклав різне віджимання на речі, розробивши те, що він назвав "рулетою" для генерації випадкових нормальних відхилень. Дарвін (1877) описує, як:

Круглий шматок картки був закінчений радіально, так що градація, позначена була градусів, віддалених від фіксованого радіуса. Картка була обернена навколо її центру близько до фіксованого покажчика. Потім він крутився кілька разів, а при зупинці його було відчинено число навпроти індексу. [Дарвін додає у виносці: Краще зупинити диск, коли він крутиться так швидко, що градації невидимі, ніж дозволяти йому пробігатись.] Від природи закінчення отримані таким чином числа точно відбуватимуться так само, як помилки спостереження трапляються на практиці; але вони не мають ознак додавання чи віднімання з префіксом. Потім кидаючи монету знову і знову і кличучи голови і хвостиx720π0xex2dx+ , знаки або випадково присвоюються цій серії помилок.+

"Покажчик" слід читати тут як "вказівник" або "індикатор" (cf "вказівний палець"). Стіглер зазначає, що Дарвін, як і Де Форест, використовував напів нормальний кумулятивний розподіл навколо диска. Згодом за допомогою монети, щоб прикріпити знак навмання, це стає цілком нормальним розподілом. Стіглер зазначає, що незрозуміло, наскільки тонко була закінчена шкала, але припускає, що інструкція вручну затримувати середину відкрутки диска полягала в тому, щоб "зменшити потенційний ухил до однієї секції диска і прискорити процедуру".

Сер Френсіс Галтон , до речі, напіврідний двоюрідний брат Чарльза Дарвіна, вже згадувався у зв'язку з його квінкунсом. Хоча це механічно імітує біноміальне розподіл, який за теоремою Де Моєра-Лапласа має разюче подібність до нормального розподілу (і час від часу використовується як навчальний посібник для цієї теми), Гальтон насправді створив набагато більш детальну схему, коли бажав зразок від звичайного розподілу. Навіть неординарніше, ніж нетрадиційні приклади у верхній частині цієї відповіді, Галтон розробив нормально розподілені кістки- або, точніше, набір кісток, які дають відмінний дискретний наближення до нормального розподілу з середнім відхиленням. Ці кістки, що датуються 1890 роком, зберігаються в колекції Галтона в Університетському коледжі Лондона.

Галтон звичайні кубики

У статті 1890 року в Nature Nature Гальтон писав, що:

Як інструмент для випадкового вибору, я не знайшов нічого кращого за кістки. Найбільш утомливо ретельно перемішувати картки між кожним наступним розіграшем, а метод перемішування та перемішування позначених куль у мішку все-таки більш стомлюючий. Вид дзиги або іншій формі рулетки краще їх, але кістки найкраще. Коли їх струшують і кидають у кошик, вони настільки різко б'ються одне проти одного і проти ребер кошикової роботи, що вони дико обертаються, і їхні позиції спочатку не дають відчутної підказки, що вони будуть після навіть одиночний хороший струс і кидання. Шанси, які дає штамп, більш різні, ніж зазвичай; Є 24 рівні можливості, а не лише 6, оскільки кожна грань має чотири ребра, які можна використовувати, як я покажу.

Галтону було важливо мати можливість швидко формувати послідовність нормальних відхилень. Після кожного рулону Галтон буде вирівнювати кістки одним дотиком, а потім записувати бали по своїх передніх краях. Спочатку він заграв би кілька кубиків типу I, на краях яких було відхилено напів нормально, подібно до карт De De, але використовуючи 24, а не 100 квантових. Для найбільших відхилень (насправді позначених як заготовки на кубиках типу I) він би розгортав стільки більш чутливих кісток типу II (які показували лише великі відхилення, при більш тонкому градації), скільки йому потрібно, щоб заповнити пробіли у своїй послідовності . Для переходу від половини нормального до нормального відхилялася, він буде котитися кубика III, який буде виділяти або+знаки до його послідовності в блоках по три-чотири відхиляється за один раз. Самі кістки були червоним кольором , розміром з дюйми, і обклеєні тонким білим папером для маркування, на якому слід писати. Галтон рекомендував приготувати три кубики I типу, дві II та одну ІІІ.114

Нормальний дизайн костей Галтона

Лабораторія математичних статистичних експериментів Раазеш Сайнудіна включає студентський проект з Кентерберійського університету, штат Нью- Йорк, який відтворює кістки Галтона . Проект включає емпіричне дослідження багаторазового кочення (включаючи емпіричний CDF, який виглядає заспокійливо "нормальним") та адаптацію балів для кісток, щоб вони відповідали звичайному нормальному розподілу. Використовуючи оригінальні показники Галтона, також є графік дискретного нормального розподілу, за яким насправді дотримуються результати з кістки.

Дискретний розподіл кісток Галтона


Якщо ви готові розтягнути «механічне» до електричного, зауважте, що епічна RAND « Мільйон випадкових цифр зі 100 000 нормальних відхилень » базувалася на своєрідному електронному моделюванні колеса рулетки. З технічного звіту (Джордж В. Браун, спочатку червня 1949 р.) Ми знаходимо:

Таким чином, мотивація людей RAND за сприяння інженерного персоналу компанії Douglas Aircraft Company сконструювала колесо електро-рулетки на основі варіанту пропозиції, зробленої Сесілом Гастінгсом. Для цілей цієї бесіди буде достатньо короткого опису. Джерело імпульсу випадкової частоти враховується імпульсом постійної частоти, приблизно один раз в секунду, забезпечуючи в середньому близько 100 000 імпульсів за одну секунду. Схеми стандартизації імпульсів передавали імпульси на п'ятимісцевий бінарний лічильник, так що в принципі машина схожа на колесо рулетки з 32 положеннями, роблячи в середньому близько 3000 оборотів на кожному ході. Було використано двійкове перетворення в десяткову точку, відкинувши 12 з 32 позицій, а отриману випадкову цифру подавали в перфоратор IBM, отримуючи таблиці перфорованих карт випадкових цифр.

Однак, перш ніж ви також спробуєте зібрати колесо електро-рулетки, було б непогано прочитати решту доповіді! Виявилося, що схема "сильно спиралася на припущення про ідеальну стандартизацію імпульсів для подолання природних уподобань серед зустрічних позицій; пізній досвід показав, що це припущення є слабкою стороною, і значна частина пізнішого метушні з машиною стосувалася проблем, що виникають на цей пункт ". Детальний статистичний аналіз виявив деякі проблеми з результатом: наприклад,χ2випробування частот непарних і парних цифр показали, що деякі партії мали невеликий дисбаланс. У деяких партіях це було гірше, ніж на інших, що свідчить про те, що "машина працювала в минулому місяці з моменту налаштування ... Вказівки на цій машині вимагали надмірного обслуговування, щоб підтримувати її у виглядній формі". Однак був знайдений статистичний спосіб вирішення цих питань:

На даний момент ми мали свої оригінальні мільйони цифр, 20 000 карток IBM з 50 цифрами на карту, з невеликими, але помітними непарними зміщеннями, розкритими статистичним аналізом. Тепер було прийнято рішення переупорядкувати стіл або принаймні змінити його за допомогою невеликої гри в рулетку, щоб зняти непарне зміщення. До відповідних цифр попередньої картки ми додали (моди 10) цифри кожної картки, цифри за цифрою. Отриману таблицю в один мільйон цифр потім піддавали різним стандартним тестам, частотним тестам, серійним тестам, тестам на покер тощо. Ці мільйони цифр мають чіткий стан здоров'я і були прийняті як сучасна таблиця випадкових цифр RAND.

Звичайно, були вагомі підстави вважати, що процес додавання принесе користь. Загалом, основним механізмом є обмежувальний підхід сум випадкових величин, модулюючи одиничний інтервал у прямокутному розподілі, таким же чином, як необмежені суми випадкових величин наближаються до нормальності. Цей метод використовували Гортон і Сміт з Міждержавної комісії з питань торгівлі, щоб отримати кілька хороших партій очевидно випадкових чисел з більших партій погано невипадкових чисел.

Звичайно, це стосується генерування випадкових десяткових цифр , але їх легко використовувати для отримання випадкових відхилень, відібраних на вибірці рівномірно від , округлених до скільки-небудь десяткових знаків, які ви вважаєте за потрібне взяти цифри. Існують різні прекрасні методи, щоб генерувати відхилення інших розподілів від ваших рівномірних відхилень, можливо, найестетичнішим з яких є естетичний алгоритм зиггурата для розподілу ймовірностей, який є монотонним зменшенням або одномодульним симетричним, але концептуально найпростішим і найбільш застосовним є зворотне. Трансформація CDF : задається відхилення від рівномірного розподілу на , і якщо бажаний розподіл має CDF[0,1]u[0,1]FF1(u)

Зигурат на пів-норми

Список літератури


()"Кожен, хто розглядає арифметичні методи отримання випадкових цифр, перебуває, звичайно, у стані гріха. Бо, як уже зазначалося декілька разів, немає такого поняття, як випадкове число - існують лише методи отримання випадкових чисел і сувора арифметична процедура звичайно не такий метод ".


5
Ви мусите жартувати ... (але, так, це дійсно вручну +1)
nalzok

8
Скільки роботи вкладено в це!
Річард Харді

3
Зауважте, що нестандартні кістки можуть бути несправедливими, тому добре спробувати їх спочатку, наприклад, youtube.com/watch?v=VI3N4Qg-JZM
Tim

2
@ RichardHardy Парадоксально, що мені справді простіше все це записати, поки воно переді мною, і принаймні тимчасово в моїй пам’яті, ніж намагатися все це носити в голові!
Срібна рибка

2
У будь-якому випадку, я вважаю це вражаючим!
Річард Харді

44

X=2logU1cos(2πU2)
Y=2logU1sin(2πU2)X

Наприклад, на моїй ОС Linux я можу перевірити

$ date +%s.%N
1479733744.077762986
$ date +%s.%N
1479733980.615056616

U1=.077762986, U2=.615056616
X
> sqrt(-2*log(.077762986))*cos(2*pi*.615056616)
[1] -1.694815

Додаток: оскільки обчислення логарифмів і косинусів може вважатися недостатньо ручним , існує варіант Box-Мюллера, який уникає використання цих трансцендентальних функцій (див. Вправу 2.9 у нашій книзі Статистичні методи Монте-Карло ):

варіант Box-Muller

Тепер можна сперечатися з цією версією через Експоненціальні змінні. Але також існує дуже розумний спосіб моделювання цих змінних без виклику трансцендентальних функцій , завдяки фон Нойману, як узагальнено в цьому алгоритмі, відтвореному з неоднорідних випадкових варіантів Люка Девроя :

введіть тут опис зображення

Справді, він вимагає обчислення 1 / е, але лише один раз.

(0,1)2(0,1)(0,2π)

Використання CLT для наближення нормальності, безумовно, не є методом, який я б коли-небудь радив, оскільки (1) вам все одно потрібні інші змінні для подачі середнього значення, тому, можливо, також можна використовувати уніформу в алгоритмі Box-Müller, і (2) точність зростає досить повільно з кількістю моделювання. Особливо, якщо використовувати дискретну випадкову змінну, як результат кістки, навіть з більш ніж шістьма гранями . Цитувати з Thomas et al. (2007), опитування про плюси і мінуси випадкових генераторів Гаусса:

Звичайно, центральна гранична теорема є прикладом "приблизного" методу - навіть якщо використовується досконала арифметика, для кінцевого K вихід не буде гауссовим.

Ось короткий експеримент, щоб проілюструвати проблему: я створив у 100 разів більше середнього показника на 30 випадків:

dies=apply(matrix(sample(1:6,30*100,rep=TRUE),ncol=30),1,mean)

потім нормалізували ці середні значення в середнє нульове - дисперсія змінних

stdies=(dies-3.5)/sqrt(35/12/30)

і подивився на нормальне пристосування [або його відсутність] цього зразка:

qqnorm (stdies, col = "gold2", pch = 19); abline (a = 0, b = 1, col = "steelblue", lwd = 2, lty = 2)

dies76/30122/30Di

U=i=1kDi16i
k=15
dies=matrix(apply(matrix(sample(0:5,15*200,rep=TRUE),nrow=15)/6^(1:15),2,sum),ncol=2) 
norma=sqrt(-2*log(dies[,1]))*c(cos(2*pi*dies[,2]),sin(2*pi*dies[,2]))

підгонка так добре , як можна було б очікувати для нормальної вибірки розміру 200 (тільки сюжет інший для істинного нормального зразка norma=rnorm(100)):

введіть тут опис зображення

як далі показано тестом Колмогорова-Смірнова:

> ks.test(norma,pnorm)

        One-sample Kolmogorov-Smirnov test

data:  norma
D = 0.06439, p-value = 0.3783
alternative hypothesis: two-sided

3

Це не зовсім випадково, але воно повинно бути досить близьким, оскільки, здається, ви хочете грубий експеримент.

Використовуйте свій телефон, щоб налаштувати хронометр. Через добрі 10 секунд припиніть це (Чим більше ви чекаєте, тим більше підходите до справді "випадкового" результату, але 10 секунд - це добре). Візьміть останні цифри (наприклад, 10,67 сек дасть вам 67). Застосуйте таблицю відсотків для нормального розподілу. У цьому прикладі потрібно просто шукати 0,67, і ви знайдете число. У цьому випадку ваше значення становить приблизно 0,45. Це не зовсім точно, але це дасть вам ґрунтовну оцінку.

Якщо ви котитеся нижче 50, просто зробіть 100- [Your Result] і скористайтеся таблицею. Ваш результат буде однаковим, зі знаком мінус, завдяки симетрії N (0,1).


3

n+11nnnN(0,1)


Чому? Дозволяє

Хк: ={+1 якщо к-на монетний фліп - це голови-1 якщо к-на монету фліп - це хвости

П(Хк=±1)=12

Е(Хк)=0Вар(Хк)=1

Y: =Х1+Х2++Хн

E(Y)=0Var(Y)=n

Нормалізуючи,

Z:=Yn

ми отримуємо випадкову величину з одиничною дисперсією

E(Z)=0Var(Z)=1

1
Як я обговорював у своїй відповіді, я побоююсь, що CLT не є ефективним використанням випадкових випадків у монетах, які можна обернути: їх краще використовувати як двійкові цифри псевдовипадкової змінної U (0,1) з простою або подвійною точністю.
Сіань

@ Xi'an Я прочитав вашу відповідь перед тим, як розмістити шахту, і ваше заперечення проти CLT, здавалося, грунтується на повільній конвергенції. Оскільки це продуманий експеримент, перевернути монету в 10 мільярдів разів нічого не коштує. І це справді ручна процедура, яка не вимагає ні комп’ютерів, ні обчислення логарифмів, квадратних коренів чи косинусів. Звичайно, можна скористатися правилом слайда, але це може бути занадто далеко.
Родріго де Азеведо

1
:}}: 10 мільярдів монет перевертається для мене не дуже зручно ...!
Сіань

Посібник = від руки. Обчислення логарифмів і косинусів вручну також вимагає часу.
Родріго де Азеведо

0

Варто зазначити, що як тільки ви можете генерувати рівномірну (0,1), ви можете створити будь-яку випадкову змінну, для якої обернена cdf може бути обчислена, просто включивши єдину випадкову змінну у зворотну CDF.

То як же можна обчислити рівномірність (0,1) вручну? Ну, як згадував @Silverfish, є різноманітні кістки, які використовуються традиційними гравцями RPG. Один з яких - десятибічний штамб. Якщо припустити, що це справедлива смерть, то тепер ми можемо створити дискретну форму (0, 9).

0.01,0.02,...,0.99,1.000.001,0.002,...,0.999,1.000

Таким чином, ми можемо дуже наблизитись до суцільної рівномірної форми (0,1), наблизивши її до тонкомережевого дискретного рівномірного розподілу з кількома 10-ти сторонніми кубиками. Потім це може бути підключено до зворотного CDF для отримання випадкової величини, що цікавить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.