Matlab: 截断多变量正态分布随机抽样?

问题描述 投票:2回答:1

我希望在Matlab中直接从截断的多变量正态分布中进行抽样。

我知道我可以简单地使用 mvnrnd 并检查返回的值是否在感兴趣的领域内。然而,当需要大量样本时,这样做是一种资源浪费。

Matlab有一个内置的函数 truncate 参考 将截断一个给定的概率分布对象。不幸的是, mvnpdf 参考 返回给定位置的pdf值,而不是概率对象。pdf. 此外, truncate 似乎只支持一维问题。

除了简单地忽略兴趣域外的数据外,有什么办法可以直接从截断的多变量正态中取样?还是说一般情况下我必须要接受这个问题?

文件交流中的例子似乎实现了某种形式的拒绝采样。

Truncated Normal Generator

截断的多变量正态发生器

另一个截断的法线发生器

matlab random probability probability-density probability-distribution
1个回答
0
投票

显然,从这个分布中采样并不完全是小事一桩。但这里有一些提示。

  • 在SciPy中截断多变量正态分布? . 那里,公认的答案使用马尔科夫链蒙特卡洛来基于截断正态分布的对数-PDF进行采样。(注意,答案使用的是Python,而不是MATLAB。)
  • https:/hal.archives-ouvertes.frhal-01063978document . 这是一种从这个分布中采样的算法。 虽然这也使用拒绝抽样,但如果感兴趣的域远离分布的模式,它可能更有效。 只有在感兴趣的域是凸的情况下,它才会有效。
© www.soinside.com 2019 - 2024. All rights reserved.