2010-01-24 162 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的特例)。

相关问题