Normal-Distribution

如何使用傳統編程語言從具有已知均值和方差的正態分佈中採樣?

  • October 1, 2011

我從來沒有上過統計學課程,所以我希望我在這裡問對了地方。

假設我只有兩個描述正態分佈的數據:均值和方差. 我想使用計算機從這個分佈中隨機抽樣,以便我尊重這兩個統計數據。

很明顯,我可以通過簡單地在 0 左右標準化來處理平均值:只需添加在輸出樣本之前對每個樣本。但我看不到如何以編程方式生成要尊重的樣本.

我的程序將使用傳統的編程語言;我無權訪問任何統計包。

如果您可以從均值為 0 和方差為 1 的給定分佈中採樣,那麼您可以輕鬆地從該分佈的尺度位置變換中採樣,該分佈具有均值和方差. 如果是來自均值 0 和方差 1 分佈的樣本,那麼

是具有均值的樣本和方差. 所以,你所要做的就是用標準差來縮放變量(方差的平方根)添加平均值之前. 如何從均值 0 和方差 1 的正態分佈中實際獲得模擬是另一回事。知道如何實現這些東西很有趣,但是無論您是否使用統計包或編程語言,我都建議您獲取並使用合適的函數或庫來生成隨機數。如果您想獲得有關使用哪個庫的建議,您可能需要添加有關您正在使用的編程語言的特定信息。

**編輯:**根據評論、其他一些答案以及 Fixee 接受這個答案的事實,我將提供更多關於如何使用統一變量的轉換來產生正常變量的細節。

  • 一種方法,已經在VitalStatistix的評論中提到,是 Box-Muller 方法,它採用兩個獨立的均勻隨機變量並產生兩個獨立的正態隨機變量。francogrex發布了一種類似的方法,該方法可以避免計算兩個超越函數sincos ,但需要進行更多的模擬。
  • 一種完全通用的方法是通過逆分佈函數對均勻隨機變量進行變換。如果均勻分佈在然後

具有標準正態分佈。雖然沒有明確的解析公式,它可以通過精確的數值近似來計算。R 中的當前實現(我上次檢查過)使用了這個想法。該方法在概念上非常簡單,但需要準確實現,這可能不像(其他)超越函數logsincos那樣普遍。

  • 幾個答案提到使用中心極限定理將正態分佈近似為均勻隨機變量的平均值的可能性。一般不建議這樣做。所提出的論點,例如匹配均值 0 和方差 1,以及對分佈支持的考慮並不令人信服。在 Christian P. Robert 和 George Casella 的“用 R 介紹蒙特卡洛方法”的練習 2.3 中,這個生成器被稱為過時的,而近似值被稱為非常差
  • 還有一些令人眼花繚亂的其他想法。第 3 章,特別是第 3.4 節,在“計算機編程的藝術”卷。Donald E. Knuth 的 2 是關於隨機數生成的經典參考。Brian Ripley 寫了Computer Generation of Random Variables: A Tutorial,這可能很有用。還推薦羅伯特和卡塞拉提到的書,或者他們的另一本書“蒙特卡洛統計方法”中的第 2 章。

歸根結底,正確實施的方法並不比使用的統一偽隨機數生成器好。就個人而言,我更喜歡依賴我認為值得信賴的特殊用途庫。我幾乎總是依賴在 R 中直接在 R 中或通過 C/C++ 中的 API 實現的方法。顯然,這不是適合所有人的解決方案,但我對其他庫還不夠熟悉,無法推薦替代方案。

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

comments powered by Disqus