【发布时间】:2020-06-25 22:52:39
【问题描述】:
我想生成 n 个不同概率分布(正态、对数正态、泊松、均匀)的随机样本。即 R 中的 rnorm、rlnorm、rpois、runif 是什么。
我怎样才能在 Pharo 中做到这一点?了解如何计算密度也很有用(dnorm、dlnorm、dpois、dunif)
【问题讨论】:
我想生成 n 个不同概率分布(正态、对数正态、泊松、均匀)的随机样本。即 R 中的 rnorm、rlnorm、rpois、runif 是什么。
我怎样才能在 Pharo 中做到这一点?了解如何计算密度也很有用(dnorm、dlnorm、dpois、dunif)
【问题讨论】:
好的,我在这里留下一个答案作为记录,推荐使用 PolyMath。
要加载 PolyMath,请执行:
Metacello new
repository: 'github://PolyMathOrg/PolyMath/src';
baseline: 'PolyMath';
load
似乎存在两种不同类型的对象:PMProbabilityDensity 和 PMNumberGenerator,它们都有各自的子类。 您可以使用密度对象来获取密度和生成随机样本,也可以使用数字生成器生成随机样本。
因此,对于正态分布,如果使用密度对象,您可以使用以下方法进行采样:
PMNormalDistribution new random "N(0,1)"
PMNormalDistribution new initialize: mu sigma: sigma; random
或者获取点x的密度:
PMNormalDistribution new initialize: 0 sigma: 1; value: x.
完全相同的模式适用于 log normal 和 uniform:
PMUniformDistribution new initialize: from to: to; random
PMUniformDistribution new initialize: from to: to; value: x
PMLogNormalDistribution new initialize: mu sigma: sigma
PMLogNormalDistribution new initialize: mu sigma: sigma; value: x
不幸的是,我找不到泊松的密度对象。 现在,您仍然可以生成它的样本:使用数字生成器对象,您可以生成 Poisson 和 Normal 样本(并间接记录法线):
PMPoissonGenerator new lambda: lambda; next.
PMGaussianGenerator new next.
PMGaussianGenerator new standardDeviation: 2; mean: 5; next.
(PMGaussianGenerator new standardDeviation: 2; mean: 5; next) exp. "log normal"
【讨论】: