【问题标题】:Sample multinomial distribution in Matlab without using mnrndMatlab中的样本多项分布而不使用mnrnd
【发布时间】:2015-11-12 21:45:34
【问题描述】:

对于随机变量 x,我知道每个 i=1,2,...,100 的 P(x=i)。那么如何根据 Matlab 中给定的 P(x=i) 通过多项分布对 x 进行采样?

我可以使用 Matlab 内置命令 randrandi,但不能使用 mnrnd

【问题讨论】:

  • 这不是你任务的一部分吗?否则,您将被允许使用您需要的任何东西。对不对?
  • 提示:累积分布函数有什么作用?
  • @AndrasDeak 是的,这是 CS 课程的最后一部分。我擅长编码但不擅长概率......
  • @MatthewGunn 我的印象是执行以下操作:通过 rand(0,1) 采样 x 并找到 i 使得 p1+p2+..+pi
  • 那么你可能想看看cumsum

标签: matlab


【解决方案1】:

一般来说,您可以使用均匀随机数生成器和 X 的逆累积分布函数从任何一维概率分布 X 中采样数字。这称为inverse transform sampling

random_x = xcdf_inverse(rand())

这在此处如何应用?如果您有向量p 定义多项分布的概率,F = cumsum(p) 会为您提供定义 CDF 的向量。然后您可以使用temp = rand() 在[0,1] 上生成一个统一的随机数,然后找到F 中的第一行大于temp。这基本上是使用多项分布的逆 CDF。

请注意,尽管对于某些分布(例如 gamma 分布),这被证明是生成随机抽取的低效方式,因为评估逆 CDF 非常慢(如果 CDF 不能解析表示,则必须使用较慢的数值方法使用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2020-04-28
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多