Normal-Distribution

手動生成隨機數

  • November 21, 2016

如何從給定分佈中手動生成隨機數,例如標準正態分佈中的 10 個實現?

如果“手動”包括“機械”,那麼您有很多選擇。為了模擬概率為一半的伯努利變量,我們可以擲硬幣: $ 0 $ 對於尾巴, $ 1 $ 為頭。為了模擬幾何分佈,我們可以計算在獲得正面之前需要投擲多少次硬幣。為了模擬二項分佈,我們可以拋硬幣 $ n $ 次(或簡單地折騰 $ n $ 硬幣)併計算正面。“梅花形”或“豆機”或“高爾頓盒”是一種更具動態性的替代方案——為什麼不將其付諸行動並親眼看看呢?似乎沒有“加權硬幣”這樣的東西,但如果我們希望將伯努利或二項式變量的概率參數更改為除 $ p = 0.5 $ ,Georges-Louis Leclerc 的針,布馮伯爵將允許我們這樣做。模擬離散均勻分佈 $ {1, 2, 3, 4, 5, 6} $ 我們擲出一個六面骰子。角色扮演遊戲的愛好者會遇到更多奇特的骰子,例如從四面體骰子中統一採樣 $ {1,2,3,4} $ ,而使用旋轉器或輪盤賭可以走得更遠。(圖片來源

各種骰子

今天,我們是否會因為這種方式生成隨機數而發瘋,當它只是在計算機控制台上的一個命令時——或者,如果我們有一個合適的隨機數表可用,一次嘗試到書架上塵土飛揚的角落?也許吧,儘管物理實驗有一些令人愉悅的觸覺。但是對於在計算機時代之前工作的人來說,實際上在廣泛使用的大規模隨機數表之前(稍後會更多),手動模擬隨機變量具有更大的實際意義。當布馮調查聖彼得堡悖論時——著名的擲硬幣遊戲,每次擲正面時玩家獲勝的金額翻倍,玩家在第一次反面時輸掉,其預期收益是違反直覺的無限的——他需要模擬幾何分佈 $ p=0.5 $ . 為此,他似乎雇了一個孩子擲硬幣來模擬聖彼得堡比賽的 2048 場比賽,記錄比賽結束前的擲硬幣次數。Stigler (1991)中再現了這種模擬的幾何分佈:

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

在他發表對聖彼得堡悖論的實證調查的同一篇文章中,布馮還介紹了著名的“布馮之針”。如果一個平面被平行線分割成一條距離 $ d $ 分開,還有一根長針 $ l \leq d $ 落到它上面,針穿過其中一條線的概率是 $ \frac{2l}{\pi d} $ .

布馮的針刺實驗

因此,布馮的針可以用來模擬隨機變量 $ X \sim \text{Bernoulli}(\frac{2l}{\pi d}) $ 或者 $ X \sim \text{Binomial}(n,\frac{2l}{\pi d}) $ ,我們可以通過改變我們的針的長度或(也許更方便)我們統治線的距離來調整成功的概率。Buffon’s needles 的另一種用法是找到概率近似值的一種非常低效的方法 $ \pi $ . 圖像(信用)顯示了 17 根火柴,其中 11 根穿過一條線。當格線之間的距離設置為等於火柴的長度時,如此處,交叉火柴的預期比例為 $ \frac{2}{\pi} $ 因此我們可以估計 $ \hat \pi $ 作為觀察分數的倒數的兩倍:這裡我們得到 $ \hat \pi = 2 \cdot \frac{17}{11} \approx 3.1 $ . 1901 年,馬里奧·拉扎里尼聲稱使用 2.5 厘米的針進行了實驗,針距 3 厘米,經過 3408 次拋擲後獲得 $ \hat \pi = \frac{355}{113} $ . 這是一個眾所周知的理性 $ \pi $ ,精確到小數點後六位。 Badger (1994) 提供了令人信服的證據表明這是欺詐,尤其是要使用 Lazzarini 的儀器對小數點後 6 位的準確度有 95% 的把握,必須扔掉 134 萬億根需要耐心的針!當然,布馮的針作為隨機數生成器比作為估計方法更有用 $ \pi $ .


到目前為止,我們的發電機的離散性令人失望。如果我們想模擬正態分佈怎麼辦?一種選擇是獲取隨機數字並使用它們形成良好的離散近似值,以均勻分佈在 $ [0,1] $ ,然後執行一些計算以將這些轉換為隨機正態偏差。旋轉器或輪盤賭可以給出從零到九的十進制數字;骰子可以生成二進制數字;如果我們的算術技能可以應付更時髦的基礎,那麼即使是一套標準的骰子也可以。其他答案更詳細地介紹了這種基於轉換的方法;我將任何進一步的討論推遲到最後。

到 19 世紀後期,正態分佈的效用已廣為人知,因此統計學家熱衷於模擬隨機正態偏差。不用說,冗長的手工計算是不合適的,除非首先設置模擬過程。一旦確定,隨機數的生成必須相對快速和容易。Stigler (1991) 列出了這個時代三位統計學家採用的方法。所有人都在研究平滑技術:隨機正態偏差是顯而易見的,例如模擬需要平滑的測量誤差。

傑出的美國統計學家**Erastus Lyman De Forest**對平滑生命表很感興趣,但遇到了一個需要模擬正態偏差絕對值的問題。在將被證明是一個運行主題中,De Forest 確實是從半正態分佈中抽樣的。此外,而不是使用一個標準偏差( $ Z \sim N(0, 1^2) $ 我們習慣稱“標準”),De Forest 想要一個“可能的錯誤”(中值偏差)。這是William Chauvenet的“A Manual Of Spherical And Practical Astronomy, Volume II”附錄中的“Probability of Errors”表格中給出的表格。從這張表中,De Forest 插值了半正態分佈的分位數,從 $ p=0.005 $ 到 $ p=0.995 $ ,他認為這是“相同頻率的錯誤”。

De Forest 等頻誤差表

如果您希望按照 De Forest 模擬正態分佈,您可以將這張表打印出來並將其切割。De Forest (1876) 寫道,這些錯誤“已被刻在 100 塊大小相同的紙板上,這些紙板在一個盒子裡被搖晃起來,然後一張一張地抽出來”。

天文學家和氣象學家**喬治霍華德達爾文爵士**(博物學家查爾斯的兒子)通過開發他所謂的“輪盤賭”來產生隨機正態偏差,對事物進行了不同的解釋。達爾文 (1877)描述瞭如何:

一張圓形卡片呈放射狀刻度,因此刻度標記 $ x $ 曾是 $ \frac{720}{\sqrt \pi} \int_0^x e^{-x^2} dx $ 距離固定半徑的度數。卡片圍繞其中心旋轉,靠近固定的索引。然後將其旋轉數次,並在停止時讀取與索引相對的數字。[達爾文在腳註中補充說:當圓盤旋轉得如此之快以至於刻度不可見時,最好停止它,而不是讓它運行它。]從刻度的性質來看,由此獲得的數字將精確地出現與觀察錯誤在實踐中發生的方式相同;但它們沒有加法或減法前綴。然後一遍又一遍地擲硬幣並叫出正面 $ + $ 和尾巴 $ - $ , 標誌 $ + $ 或者 $ - $ 被偶然分配給這一系列錯誤。

“索引”在這裡應讀作“指針”或“指示器”(參見“食指”)。斯蒂格勒指出,達爾文和德福里斯特一樣,在圓盤周圍使用了半正態累積分佈。隨後使用硬幣隨機附上一個標誌,這使得這是一個完全正態分佈。斯蒂格勒指出,目前尚不清楚刻度的刻度有多精細,但假定手動阻止磁盤中轉的指令是“減少對磁盤某一部分的潛在偏差並加快過程”。

弗朗西斯·高爾頓爵士,順便說一句,查爾斯·達爾文的同父異母表弟,已經提到了他的梅花形。雖然這機械地模擬了二項分佈,但根據De Moivre-Laplace 定理,該分佈與正態分佈有著驚人的相似之處(並且偶爾用作該主題的教具),但高爾頓實際上在他想要的時候產生了一個更精細的方案來自正態分佈的樣本。比這個答案頂部的非常規例子更不尋常的是,高爾頓開發了正態分佈骰子— 或者更準確地說,是一組骰子,可以對具有中值偏差的正態分佈產生出色的離散逼近。這些骰子可追溯到 1890 年,保存在倫敦大學學院的高爾頓收藏中。

高爾頓普通骰子

1890 年Nature的一篇文章中,高爾頓寫道:

作為一種隨機選擇的工具,我發現沒有什麼比骰子更好的了。在每次連續抽牌之間徹底洗牌是最乏味的,而在袋子中混合和攪拌標記球的方法則更乏味。teetotum或某種形式的輪盤賭比這些更可取,但骰子勝過一切。當它們在籃子裡被搖晃和拋擲時,它們相互碰撞,撞在籃筐的肋骨上以不同的方式衝撞,以至於它們瘋狂地翻滾,它們的位置在一開始就無法讓人知道它們在經過一個單好搖一搖。骰子提供的機會比通常想像的要多得多。有 24 種相等的可能性,而不僅僅是 6 種,因為每個面都有四個可以使用的邊,我將展示。

對於高爾頓來說,能夠快速生成一系列正態偏差非常重要。每次擲骰後,高爾頓都會通過觸摸將骰子排成一行,然後沿著它們的前緣記錄分數。他最初會擲幾個 I 型骰子,其邊緣是半正常偏差,很像 De Forest 的牌,但使用的是 24 而不是 100 分位數。對於最大的偏差(實際上在 I 型骰子上標記為空白),他將擲出盡可能多的更敏感的 II 型骰子(僅顯示較大的偏差,在更精細的刻度上),因為他需要在他的序列中填充空格. 要將半正常偏差轉換為正常偏差,他會擲骰子 III,這將分配 $ + $ 或者 $ - $ 一次以三個或四個偏差為一組標記他的序列。骰子本身是桃花心木,側面 $ 1 \frac 1 4 $ 英寸,並貼上薄薄的白紙,以便在上面寫上標記。高爾頓建議準備三個 I 型骰子,兩個 II 型骰子和一個 III 型骰子。

高爾頓普通骰子設計

Raazesh Sainudiin 的數學統計實驗實驗室包括一個來自新西蘭坎特伯雷大學的學生項目,該項目再現了高爾頓的骰子。該項目包括多次擲骰子的經驗調查(包括看起來令人放心的“正常”的經驗 CDF)和骰子分數的調整,以便它們遵循標準正態分佈。使用高爾頓的原始分數,還有一個骰子分數實際遵循的離散正態分佈圖。

高爾頓骰子離散分佈


從宏觀上看,如果您準備將“機械”擴展到電氣,請注意蘭德史詩般*的具有 100,000 個正常偏差的百萬隨機數字*是基於輪盤賭的一種電子模擬。從技術報告(George W. Brown,最初是 1949 年 6 月)中,我們發現:

因此,蘭德公司的人在道格拉斯飛機公司工程人員的幫助下,根據塞西爾黑斯廷斯的提議設計了一個電子輪盤賭輪。出於本次演講的目的,一個簡短的描述就足夠了。隨機頻率脈衝源由恆定頻率脈衝選通,大約每秒一次,平均在一秒鐘內提供大約 100,000 個脈衝。脈衝標準化電路將脈衝傳遞到一個五位二進制計數器,因此原則上機器就像一個有 32 個位置的輪盤賭,平均每轉約 3000 轉。使用二進製到十進制轉換,丟棄 32 個位置中的 12 個,並將生成的隨機數字輸入 IBM 打孔器,產生隨機數字的打孔卡表。

但是,在您也想組裝電動輪盤之前,最好先閱讀報告的其餘部分!結果表明,該方案“嚴重依賴於理想脈衝標準化的假設,以克服計數器位置之間的自然偏好;後來的經驗表明,這種假設是弱點,後來對機器大驚小怪的大部分時間都與源自這點”。詳細的統計分析揭示了輸出的一些問題:例如 $ \chi^2 $ 奇數位和偶數位頻率的測試表明,一些批次有輕微的不平衡。這在某些批次中比其他批次更糟,這表明“機器自調試以來在一個月內一直在運行……跡象表明,這台機器需要過度維護才能保持最佳狀態”。但是,找到了解決這些問題的統計方法:

此時,我們有了最初的百萬位數,即 20,000 張 IBM 卡,每張卡有 50 位數,統計分析揭示了小但可察覺的奇偶偏差。現在決定重新隨機化桌子,或者至少改變它,通過玩一個小輪盤賭來消除奇偶偏差。我們將(mod 10)每張卡中的數字逐位添加到前一張卡的相應數字上。派生的一百萬位數字表隨後經過各種標準測試、頻率測試、系列測試、撲克測試等。這百萬位數字具有清晰的健康狀況,並已被用作蘭德的現代隨機數字表。

當然,有充分的理由相信添加過程會帶來一些好處。一般而言,基本機制是隨機變量和以矩形分佈中的單位間隔為模的限制方法,就像無限制的隨機變量和接近正態性一樣。州際商務委員會的 Horton 和 Smith 使用了這種方法,從較大的非隨機數批次中獲得一些明顯隨機數的好批次。

當然,這涉及到隨機十進制數字的生成,但是很容易使用這些生成隨機偏差,從 $ [0,1] $ ,四捨五入到您認為適合取數字的小數位數。有多種可愛的方法可以從您的均勻偏差中生成其他分佈的偏差,也許最美觀的方法是用於概率分佈的ziggurat 算法,它要么是單調遞減的,要么是單峰對稱的,但從概念上講,最簡單和最廣泛適用的是逆CDF 變換:給定一個偏差 $ u $ 從均勻分佈上 $ [0,1] $ ,並且如果您想要的發行版有 CDF $ F $ , 然後 $ F^{-1}(u) $ 將隨機偏離您的分佈。如果您對隨機法線偏差特別感興趣,那麼在計算上,Box-Muller 變換比逆變換採樣更有效,Marsaglia 極坐標方法再次更有效,而 ziggurat(下面動畫的圖片來源)甚至更好。如果您打算在代碼中實現這些方法中的一個或多個,將在此 StackOverflow 線程上討論一些實際問題。

半正常的 Ziggurat

參考

  • 獾,L.(1994 年)。“拉扎里尼的 π 幸運近似”。數學雜誌。美國數學協會。67(2):83-91。
  • Brown, GW “蘭德隨機數字的歷史——摘要”。在 AS Householder、GE Forsythe 和 HH Germond 編輯中,“蒙特卡洛方法”,國家標準局應用數學系列,12(華盛頓特區:美國政府印刷局,1951 年):31-32 $ (*) $
  • GH 達爾文 (1877)。“關於可變數量的錯誤測量,以及氣象觀測的處理。哲學雜誌, 4 (22), 1-14
  • 德福里斯特,EL (1876)。系列的插值和調整。康涅狄格州紐黑文市的塔特爾、莫爾豪斯和泰勒。
  • 高爾頓,F. (1890)。“統計實驗的骰子”。自然, 42 , 13-14
  • 斯蒂格勒,SM (1991)。“十九世紀的隨機模擬”。統計科學6(1),89-97。

$ () $ 在同一個期刊上,馮·諾依曼的高引用論文《與隨機數字連接使用的各種技術》中,他考慮了生成用於計算機的隨機數的困難。他拒絕將物理設備連接到計算機上即時生成隨機輸入的想法,並考慮是否可以採用某種物理機制來生成隨機數,然後將其記錄下來以備將來使用——基本上就是 RAND 用他們的百萬位數所做的. 它還包括他關於我們將描述為隨機數和偽隨機數生成之間差異的名言:“任何考慮產生隨機數字的算術方法的人當然是處於一種罪惡狀態。因為正如多次指出的那樣,沒有隨機數這樣的東西——只有產生隨機數的方法,而嚴格的算術程序當然不是這樣的方法。”*

引用自:https://stats.stackexchange.com/questions/247094

comments powered by Disqus