我想生成n个不同概率分布(正态、对数正态、泊松、均匀)的随机样本。即R中的是rnorm
,rlnorm
,rpois
,runif
。
我如何在Pharo中做到这一点?知道如何计算密度(dnorm
、dlnorm
、dpois
、dunif
)也很有用
发布于 2020-06-27 20:12:35
好的,我在这里给出一个答案,推荐使用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
不幸的是,我找不到泊松的密度对象。现在,你仍然可以生成它的样本:使用数字生成器对象,你可以生成泊松和法线样本(以及间接的对数法线):
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"
https://stackoverflow.com/questions/62585471
复制