41 views (last 30 days)

Show older comments

I have a 1D data which need to be separated by two .

So I used

fitgmdist(data,2);

and got

- mu
- sigma
- component proportion

for each of the gaussian distribution.

And here is the graph. (Gray : Data, Blue : psd of GMModel from fitgmdist)

Until here, everything was okay.

So, question.

How can I separate those two gaussian distribution graph?

I tried

- Using makedist('Normal') to create each gaussian distribution.
- Multiply by each component proportion
- Add two distribution up

But somehow I wasn't able to get the same graph overlapping picture above.

Probably I have the wrong concept of "Normalization" or "Gaussian Mixture Model".

Any advise or site to lookup would be grateful.

------------------------------------------------------------ @Image Analyst: data uploaded. thanks for the advice I'll remember that next time :)

Tom Lane
on 28 Jan 2016

You did something like this:

x = [randn(4000,1)/2; 5+2*randn(6000,1)];

f = fitgmdist(x,2);

histogram(x,'Normalization','pdf')

xgrid = linspace(-4,12,1001)';

hold on; plot(xgrid,pdf(f,xgrid),'r-'); hold off

You can duplicate the pdf values by doing something like this:

n1 = makedist('normal',f.mu(1),sqrt(f.Sigma(1)));

n2 = makedist('normal',f.mu(2),sqrt(f.Sigma(2)));

p = f.ComponentProportion;

y = p(1)*pdf(n1,xgrid) + p(2)*pdf(n2,xgrid);

hold on; plot(xgrid,y,'c--'); hold off

One thing to watch out for. In probability and statistics, it's common to write the standard deviation of a univariate normal distribution as the Greek letter sigma. But it's common to write the covariance matrix of a multivariate distribution as capital Sigma. So that's why I used sqrt(Sigma) to create the univariate distributions.

yusra Ch
on 5 Sep 2020

Could you plz tell me how did you plot the bleu line in your graph ? I have GM that I want to draw but I dont know how to do it . could you plz help me?

gm =

Gaussian mixture distribution with 2 components in 1 dimensions

Component 1:

Mixing proportion: 0.500000

Mean: 3.3153

Component 2:

Mixing proportion: 0.500000

Mean: -61.5348

The values of Sigma are :

val(:,:,1) =

15.3648

val(:,:,2) =

137.2863

cynthia thing
on 31 Dec 2020

Hi , could you share the code for the histogram with fitted mixture model curve like the first picture above?

Much appreciated

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

Start Hunting!