How to fit a multi modal distribution using a weighted sum of PDFs?

29 vues (au cours des 30 derniers jours)
Maria Amr
Maria Amr le 2 Mar 2021
Commenté : Maria Amr le 6 Avr 2021
I am new to matlab and I know my question is rudimentary. I really appreciated if you help me. I have a data-set (attached) shows multi modal distributions and I want to make a fit using a weighted sum of PDFs. How may I do that?
I have applied the Kernel distribution but I am not sure is right.
clc;
clear all;
close all;
%.....................................................................
data=xlsread('A');
rr=data(:,1);%gr/cm3
[x11,y11]=hist(rr,36);
hist(rr,36);
hold on
[f,x11] = ksdensity(rr,'Bandwidth',0.0028);
plot(x11,f,'-r','LineWidth',2)

Réponse acceptée

Bjorn Gustavsson
Bjorn Gustavsson le 2 Mar 2021
Modifié(e) : Bjorn Gustavsson le 2 Mar 2021
You don't have enough samples to confidently claim you have a multimodal distribution. If you simply try this with fitting exponential distributions to your data you'll see that they work reasonably OK:
PARHAT = expfit(abs(rr));
PARHATp = expfit(rr(rr>=0));
PARHATm = expfit(-rr(rr<=0));
hist(NUM,40)
hold on
x = linspace(-0.1,0.1,1001);
plot(x,30*exp(-abs(x)/PARHAT),'c')
plot(x,30*exp(-abs(x)/PARHATp),'r')
plot(x,30*exp(-abs(x)/PARHATm),'m')
There are indications that there might be a multimodal distribution, but if you do fit for a multimodal distribution you will probably find that the parameter uncertainty will be very large. First you need to gather more observations (hopefully this will be possible without too large costs in time and resources).
HTH
  6 commentaires
Maria Amr
Maria Amr le 2 Mar 2021
Bjorn Gustavsson, Really appreciated!
Maria Amr
Maria Amr le 6 Avr 2021
Bjorn Gustavsson, You have already provided me a great answer that is working very well. Now I need to compare the previous result with a case with a few modes. You have already mentioned the data is not enough to claim a multimodal distribution. I truly appreciate you to direct me how I can show a multimodal dataset assuming the samples are enough. I means I want to show a data set like the attached figure (the figure is not mine and I only use it to express my question). The dataset is the same already attached above.Thank you in advance!

Connectez-vous pour commenter.

Plus de réponses (1)

Tom Lane
Tom Lane le 2 Mar 2021
I'm glad Bjorn provided an answer that works for you. For future reference, there is a function for fitting mixtures of normal distributions:
Also, there is an example that fits a mixture of two normals, but it can be adapted to fix mixtures of any distributions:
  3 commentaires
Maria Amr
Maria Amr le 3 Mar 2021
Modifié(e) : Maria Amr le 3 Mar 2021
Would you please direct me how may I estimate the percentage of each bin in histogram? Reall appreciates! i have added these line to my code but there is an error!
The error is:
Subscript indices must either be real positive integers or logicals.
binranges = -0.1:0.1;
[bincounts] = h(rr,binranges);
percentagevalues = bincounts./sum(bincounts) * 100;
Tom Lane
Tom Lane le 3 Mar 2021
@Maria Amr, I don't know what h() is in your code, but if it is a variable then you are indexing into it using values like -0.1.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by