excelrandomdistributionpower-law

(in excel) randomly generating a power law distribution


I am trying to simulate a number of different distribution types for a project using Excel. Right now, I have generated a normal distribution with a mean of 35 and a standard deviation of 3.33. So far so good.

I would like to also generate some other distribution types.

One I have tried is a lognormal. To get that, I am using the following code:

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

It produces some output, but I would welcome anyone's input on the syntax.

What I really want to try to do is a power law distribution. From what I can tell, Excel does not have a built-in function to randomly generate this data. Does anyone know of a way to do it, besides switching software packages?

Thanks for any help you can provide.

E


Solution

  • For the (type I) Pareto distribution, if the parameters are a min value xm and an exponent alpha then the cdf is given by

    p = 1 - (xm/x)^alpha
    

    This gives the probability, p, that the random variable takes on a value which is <= x. This is easy to invert, so you can use inverse sampling to generate random variables which follow that distribution:

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

    If p is uniform over [0,1] then so is 1-p, so in the above you can just use RAND() to simulate 1/p. Thus, in Excel if you wanted to e.g. simulate a type-1 Pareto distribution with xm = 2 and alpha = 3, you would use the formula:

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

    If you are going to be doing this sort of thing a lot with different distributions, you might want to consider using R, which can be called directly from Excel using the REXcel add-in. R has a very large number of built-in distributions that it can directly sample from (and it also uses a better underlying random number generator than Excel does).