monte carlo from lognormal distribution?
7 views (last 30 days)
Show older comments
Hi,
I know how to select from a normal distribution...for example:
Cons = unifrnd(0,800);
But how does one select from a lognormal distribution? For data I have the data sample size, the mean, standard deviation, 1st, 5th, 10th, 25th, 50th, 75th, 90th, 95th, 99th percentiles for the distribution along with the max value. I've read the sections on lognormal distribution and I can't quite sort out how to work my data into the example presented.
Thank you in advance for any help!
9 Comments
Jeff Miller
on 6 Jan 2023
@Wesser To do what @Image Analyst suggests, the first step is to take measurements from the histogram of the distribution that you want to use. For each bar in the histogram, determine the value of X at the center of the bar, and the value of Y at the top of the bar. These are the (X,Y) pairs that @Image Analyst refers to in his answer. Note that the scale of the Y values is not important as these can be normalized later, so the heights of the bars can be measured in whatever unit is most convenient (e.g.,. pixels, mm, etc.)
Answers (2)
Image Analyst
on 5 Jan 2023
You can get random samples from either the blue curve or the red curve if you know the heights of those bars.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1253682/image.png)
Just use inverse transform sampling.
Attached is a demo for Rayleigh.
If you need more help, attach the (x,y) data for the red and blue bar charts.
0 Comments
John D'Errico
on 5 Jan 2023
You have not told me the distribution quantiles yet. So I'll make some up.
P = [1, 5, 10, 25, 50, 75, 90, 95, 99]/100;
Q = logninv(P,2,3);
These are just some made up values. But now we can recover the distribution parameters easily enough. A simple test is to look at this plot:
z0 = norminv(P,0,1);
plot(z0,log(Q),'-o')
If that plot is linear, or reasonably close, then this scheme will work easily enough. In this case of course, the plot is exactly linear, since I constructed the data from a known lognoormal distribution.
P1 = polyfit(norminv(P,0,1),log(Q),1);
Mu = P1(2)
Sigma = P1(1)
Now if you want to generate a sample from that distribution, you can use those distribution parameters.
lognsample = lognrnd(Mu,Sigma,[1,5])
If the plot I showed above (for your data) is not linear or close to a straight line, then your distribution may not be lognormal.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!