How to fit a histogram plot to a poisson distribution
Show older comments

I have a histogram plot which looks like this. where I have only plotted spacing_ratios = diff(energies) ./ mean(diff(energies)). energies corresponds to the eigenvalues of a particular hamiltonian matrix. I have used the code
edges=linspace(min(spacing_ratios),max(spacing_ratios),300);
h=histogram(spacing_ratios,'BinEdges',edges);
Now I want to fit this histogram plot to poisson distribution such that the probabilty of having n energy levels in a particular interval of energies E and E+deltaE will be

where \lambda is the average number of levels in that interval. How can I fit this with my numerical results shown above?
5 Comments
the cyclist
on 30 Aug 2023
It will be easier for us to help if you upload the data. You can use the paper clip icon in the INSERT section of the toolbar.
Abhik
on 31 Aug 2023
Abhik
on 31 Aug 2023
Your data contain non-integer values - so they cannot follow a Poisson distribution.
To fit a distribution, you usually do not scale the data - you work with the raw data.
To get an empirical distribution curve for your data, use
histogram(spacing_ratios,'Normalization','pdf')
Answers (1)
Simply use
lambdahat = poissfit(spacing_ratios)
But I'm surprised you want to fit data that take non-integer values with a distribution that has only mass on the set of the natural numbers. Isn't that inadequate ?
1 Comment
the cyclist
on 30 Aug 2023
I agree, and frankly I'm surprised that poissfit doesn't give a warning for non-integer input. (Maybe I'm forgetting something.)
Categories
Find more on Univariate Discrete Distributions in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!