2010-01-24 52 views
4

從雙變量正態分佈和學生T分佈生成隨機樣本的最佳方法是什麼?在這兩種情況下,西格瑪都是一個,意味着0 - 所以我真正感興趣的唯一參數是相關性(以及學生t的自由度)。我需要在C++中有解決方案,所以我不能不幸地使用MatLab或Mathematica中已經實現的函數。如何從C++中的二元正態和學生T分佈生成隨機樣本?

+0

rho是相關性而不是協方差。 – 2013-03-04 17:40:45

回答

6

您可以使用GNU GSL庫。看到這裏的二元正態分佈:

http://www.gnu.org/software/gsl/manual/html_node/The-Bivariate-Gaussian-Distribution.html

和學生T分佈在這裏:

http://www.gnu.org/software/gsl/manual/html_node/The-t_002ddistribution.html

他們直截了當地使用。

+0

很酷,他們有雙變量高斯,但學生T似乎只是單變量:( – Grzenio 2010-01-24 18:34:13

+0

)你可以用多元t分佈來模擬使用多變量t用多元正態分佈和chi2分佈表示,GSL同時具有MVN和Chi2,因此您可以設置,參見第一段:http://en.wikipedia.org/wiki/Multivariate_Student_distribution。 – Tristan 2010-01-24 22:01:21

3

你應該看看Boost庫隨機發行版 - 請參閱http://www.boost.org/doc/libs/1_41_0/libs/random/random-distributions.html。我發現它們很容易使用,一旦你將自己的頭圍繞在他們的基本概念上。不幸的是,我對統計數據不夠了解,不知道他們是否會完全滿足您的需求。

+0

他們似乎並沒有實現我之後的任何分佈:( – Grzenio 2010-01-24 18:35:36

4

對於具有協方差單位和零均值的二元法線,只需繪製兩個單變量法線。

如果要繪製二元正態的裝置(M1,M2),標準偏差(S1,S2)和相關RHO,然後畫兩個單元的單變量法線X和Y,並設置

u = m1 + s1 * X 
v = m2 + s2 * (rho X + sqrt(1 - rho^2) Y) 

然後你和你的願望分配。

對於學生T,你必須繪製一個正常變量N和一個變量V.然後,N/sqrt(V)具有T分佈。

要繪製chi^2,你應該使用一個包。或者查看Numerical Recipes第7章瞭解如何從Gamma分佈中繪製(xhi^2是Gamma的特例)。

相關問題