(在excel中)随机生成幂律分布

时间:2017-05-02 18:54:24

标签: excel random distribution power-law

我正在尝试使用Excel为项目模拟许多不同的分发类型。现在,我已经生成了一个平均分布,平均值为35,标准差为3.33。到现在为止还挺好。

我还想生成一些其他分发类型。

我尝试过的是对数正态。为此,我使用以下代码:

=(LOGNORM.INV(RAND(),LN(45^2/SQRT(45^2+3.33^2)),SQRT(LN((45^2+3.33^2)/4.5^2))

它产生一些输出,但我欢迎任何人对语法的输入。

我真正想要做的是一个幂律分布。据我所知,Excel没有内置函数来随机生成这些数据。除了切换软件包之外,有没有人知道这样做的方法?

感谢您提供的任何帮助。

电子

1 个答案:

答案 0 :(得分:1)

对于(类型I)Pareto分布,如果参数是最小值xm和指数alpha,那么cdf由

给出
p = 1 - (xm/x)^alpha

这给出了随机变量取值为< = p的概率x。这很容易反转,因此您可以使用inverse sampling生成遵循该分布的随机变量:

x = xm/(1-p)^(1/alpha) = xm*(1-p)^(-1/alpha)

如果p在[0,1]上统一,那么1-p也是如此,所以在上面你可以使用RAND()来模拟1 / p。因此,在Excel中,如果您想要例如使用xm = 2alpha = 3模拟类型1 Pareto分布,您将使用以下公式:

= 2 * RAND()^(-1/3)

如果您要使用不同的发行版进行大量此类操作,您可能需要考虑使用R,可以使用REXcel add-in直接从Excel调用。 R有很多内置的发行版,它可以直接从中采样(并且它还使用比Excel更好的基础随机数发生器)。