【发布时间】:2012-06-15 02:01:24
【问题描述】:
如果我有数据(每日股票图表是一个很好的例子,但它可以是任何东西),其中我只知道 X 单位销售的范围(高 - 低),但我不知道确切的价格出售的任何给定物品。为简单起见,假设价格范围包含足够的桶(例如,40 美分范围内的 41 美分增量)以使这种分布可行。如何分配这些项目以形成存储在向量中的正常钟形曲线?它不必是完美的,而是现实的。
我(非常)天真的想法是假设由于随机数应该形成正态分布,我可以做一些像二进制 RNG 这样的事情。例如,如果有 40 个存储桶,那么如果 '0' 出现 40 次,则第 0 个存储桶会递增,如果连续出现 '1' 次,则第 39 个存储桶会递增。如果“1”出现 20 次,则它位于向量的中间。对每个项目执行此操作,直到计算完 X 个单位。这可能是正确的,也可能不是正确的,并且在任何情况下似乎都比必要的效率低得多。我正在寻找更明智的东西。
这不是作业,只是一直困扰着我的一个问题,我的统计数据达不到标准。大多数文献似乎都在分析已经存在的分布,而不是关于如何人为地创建分布。
我想用 C++ 写这个,所以用 R 或 matlab 或其他东西预先打包的解决方案对我来说不是太有用。
谢谢。我希望这是有道理的。
【问题讨论】:
-
“我(非常)幼稚的想法是假设随机数应该形成正态分布” - 这真的不是真的。但是,您可以使用算法从正态分布(实际上是从许多统计分布)生成值。
-
您是否有可能尝试创建一个高斯分布的直方图,其中每个 bin 的频率计数存储为向量的元素??
-
为什么不使用 Boost 随机生成器库?还是新的 C++11 随机库?
-
查看Boost.Random docs - C++11 版本应该相同,但在
std命名空间中。 -
顺便说一句,在我看来,二项式分布更适合您的问题。二项式“大致”呈正态,但比正态更适合您的桶模型,因为它表示一组离散值的概率。
标签: c++ algorithm math statistics