【问题标题】:MatLab:Generate N pseudo-random numbers with a Poisson distribution having mean M and total T where N,M, and T are user definedMatLab:生成具有平均 M 和总 T 的泊松分布的 N 个伪随机数,其中 N、M 和 T 是用户定义的
【发布时间】:2019-03-07 08:42:34
【问题描述】:

我希望能够在 MatLab 中生成 N 个伪随机数序列,其泊松分布均值为 MN 个数字的总和应该是 TNMT 始终为正数或零,并且是用户为任何函数指定的参数。

显然,如果 T 相对于 N 来说很小,那么实现总 T 可能会出现问题。在这种情况下,函数可能只返回值T 然后是 N-1 个零或错误代码。但是,在大多数情况下,T>>N 的可能性很大。

我一直在尝试基于http://matlabtricks.com/post-44/generate-random-numbers-with-a-given-distribution 提供的具有给定分布的随机数生成方法的变化,并在每一步尝试各种标准化,但没有成功。

【问题讨论】:

  • 我认为不可能有 独立 泊松变量和规定的总和。甚至可能不是依赖,因为泊松随机变量可以任意大。篡改总和会破坏分布
  • 好的,我明白你在说什么。如果伪随机数的值限制在(比如说)平均值的 6 个标准差之内,也许有一种解决方法。 (6{\sigma} 的值源自高斯近似方法。)显然,某处(可能在函数外部)将不得不检查是否可以在该条件下达到 T。

标签: matlab random poisson


【解决方案1】:

您可以尝试使用multinomial distribution 来近似您想要的。

如果您使用 Wikipedia 表示法,则 k=Nn=T 和 pi=M/T。泊松分布具有均值等于方差的独特性质,但如果您的参数使得 pi 很小,则均值 npi 将非常接近方差 npi(1-pi)。 Sum 将自动(通过多项式的属性)等于 T。

Matlab 中的多项式采样是使用mnrmd function 完成的。

更新

写评论,让我们考虑N采样值vi,并写出它们的总和

Sum(i=1...N) vi = T

让我们计算这个等式左右两边的平均值。

总和(i=1...N) E(vi) = E(T) = T

在右边,常数的平均值是常数本身。在左侧我们有

Sum(i=1...N) E(vi) = Sum(i=1...N) M = N*M = T

因此,M=T/N 且 pi=M/T=1/N。

【讨论】:

  • 这看起来很有希望,但是,对不起,我今天有点愚蠢,看不出如何在 MatLab 中 pi 可以等于所有 i 的常数 M/T如果所有 pi 的总和必须等于 1。在 MatLab 中测试函数表明这可能是 1/N 的拼写错误 - 正确吗?
  • @AlfredPennyworth。一样,请检查更新
  • @AlfredPennyworth 这也意味着,给定TNM 不能是独立值
  • 明白。这证实了我对原始问题的担忧。我将使用您解释过的多项分布方法。非常感谢。
  • @AlfredPennyworth 不客气。请记住,有相当多的离散分布具有样本总和等于固定值的特性。 F.e. en.wikipedia.org/wiki/Dirichlet-multinomial_distribution,它比多项式更复杂,可以说参数更多,泊松效应更少,但如果多项式不适合你,肯定有替代方案
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2018-06-23
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多