2

I tried to model a lognormal distribution in AnyLogic and I have its standard deviation and its mean but NOT the standard deviation and mean of its included normal distribution (as AnyLogic demands). How can I model a lognormal distribution directly via ITS mean and standard deviation?

I tried to take the logarithm of my mean to implement it b/o this formula:

E(X) = exp[my+(sigma^2)/2]. So when I take the logarithm, I should get my+(sigma^2)/2. When sigma=0, I could implement a lognormal distribution, but when sigma exists, above formula also depens on sigma. Therefore, I do not know how I could implement a lognormal distribution directly over ITS mean, sigma and minimum value = 0 in AnyLogic.

Does anyone have a solution to this?

DynamiX
  • 63
  • 4

1 Answers1

3

What you need to do is calculate the correct parameters for the included normal distribution based on what you want the mean and variance of your lognormal to be. I went through these calculations and made some AnyLogic code to show how to do it. In my code, targetMean := "The desired mean of the lognormal distribution." And targetVariance := "The desired variance of the lognormal distribution."

To calculate the parameters of the included normal distribution, the first function is

getMu(targetMean, targetVariance):

double mu = log(targetMean) - getSigma2(targetMean,targetVariance)/2.0;

return mu;

The second function is

getSigma2(targetMean,targetVariance):

double sigma2 = log(targetVariance/pow(targetMean,2) + 1);

return sigma2;

Here is an article going through the calculations: https://www.johndcook.com/blog/2022/02/24/find-log-normal-parameters/

and here is the result:

double targetMean = 8.0;
double targetVariance = 3.0;
for(int i=0;i<5000;i++)
{
    lognormalSamples.add(lognormal(getMu(targetMean,targetVariance),sqrt(getSigma2(targetMean,targetVariance)), 0));
}

traceln("Realized mean = " + lognormalSamples.mean());
traceln("Realized var = " + lognormalSamples.variance());

Don't forget to sqrt sigma2 in the input to lognormal. This gives the correct mean and variance that I specified for the lognormal:

Realized mean = 7.991504691617353
Realized var = 2.9660508827785415
Ryan Marizza
  • 295
  • 2
  • 9