如何在 Pharo 中采样概率分布
How to sample probability distributions in Pharo
我想生成 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.
完全相同的模式适用于对数正态和均匀:
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"
我想生成 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.
完全相同的模式适用于对数正态和均匀:
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"