如何从C ++中的双变量正态分布和学生T分布生成随机样本?

时间:2010-01-24 18:15:39

标签: c++ math statistics probability

从双变量正态分布和学生T分布生成随机样本的最佳方法是什么?在这两种情况下,sigma是1,意思是0 - 所以我真正感兴趣的唯一参数是相关性(和学生t的自由度)。我需要在C ++中使用解决方案,所以我不能不幸地使用MatLab或Mathematica已经实现的函数。

3 个答案:

答案 0 :(得分: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

他们很容易使用。

答案 1 :(得分:4)

对于具有协方差单位和零均值的双变量法线,只需绘制两个单变量法线。

如果你想用平均值(m1,m2),标准偏差(s1,s2)和相关rho绘制二元法线,则绘制两个单位单变量法线X和Y并设置

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

然后根据您的意愿分发你和你。

对于学生T,你必须画一个正常变量N和一个chi ^ 2变量V.然后,N / sqrt(V)有T分布。

要绘制chi ^ 2,您应该使用包。或者看一下数字食谱第7章,了解如何从Gamma分布中绘制(xhi ^ 2是Gamma的特例)。

答案 2 :(得分:3)

您应该查看Boost库随机分布 - 请参阅http://www.boost.org/doc/libs/1_41_0/libs/random/random-distributions.html。一旦你围绕他们的基本概念,我发现它们非常容易使用。不幸的是,我对统计数据的了解不足以告诉您它们是否完全符合您的需求。