代码之家  ›  专栏  ›  技术社区  ›  Grzenio

如何在C++中生成二元正态和学生t的随机样本?

  •  4
  • Grzenio  · 技术社区  · 16 年前

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

    3 回复  |  直到 11 年前
        1
  •  6
  •   dangerstat    16 年前
        2
  •  4
  •   Alexandre C.    11 年前

    对于协方差为零均值的二元正态,只需画出两条单变量正态。

    如果要用均值(m1,m2)、标准差(s1,s2)和相关rho绘制二元正态,则绘制两个单位的单变量正态x和y并设置

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

    然后u和v按您的意愿分布。

    对于学生t,你必须画一个正态变量n和一个chi^2变量v,然后,n/sqrt(v)有t分布。

    要绘制chi^2,应该使用一个包。或者看一下第7章的数字配方,了解如何从伽马分布中提取(xhi^2是伽马的一种特殊情况)。

        3
  •  3
  •   anon    16 年前

    您应该看看Boost库的随机分布-参见 http://www.boost.org/doc/libs/1_41_0/libs/random/random-distributions.html .我发现它们很容易使用,一旦你把你的头围绕在它们的基本概念上。不幸的是,我对统计数据的了解不够,无法告诉你它们是否完全能满足你的需要。