Separate Drawing of Gaussian Mixture Model

Asked by Ji Hoon Jeong

Ji Hoon Jeong (view profile)

on 27 Jan 2016
Latest activity Commented on by Trisha Kibaya

Trisha Kibaya (view profile)

on 28 Aug 2018
Accepted Answer by Tom Lane

Tom Lane (view profile)

I have a 1D data which need to be separated by two .
So I used
fitgmdist(data,2);
and got
1. mu
2. sigma
3. 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
1. Using makedist('Normal') to create each gaussian distribution.
2. Multiply by each component proportion
3. 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 :)

Trisha Kibaya

Trisha Kibaya (view profile)

on 20 Aug 2018
Hi Ji Hoon Jeong, could you please share your codes? I am trying to get the same gaussian model on my one dimensional data but i'm not sure of what I am doing. Thanks a lot.
Ji Hoon Jeong

Ji Hoon Jeong (view profile)

on 24 Aug 2018
For your information, I just uploaded the same kind of my data file to this question. The uploaded '.mat' file has 3 variables,
• rawdata
• tabulated (tabulated = tabulate(round(data*10))
• GMModel (GMModel = fitgmdist(data,2))
The code I used to draw upper graph is below
tabulated = tabulate(round(drawdata));
bar(tabulated(:,1),tabulated(:,3)/100,'FaceColor','k');
hold on;
GMModel = fitgmdist(drawdata(:,1),2);
plot(tabulated(:,1),pdf(GMModel,tabulated(:,1)),'Color','r','LineWidth',1);
I hope this helps you.
Trisha Kibaya

Trisha Kibaya (view profile)

on 28 Aug 2018
Thanks a lot, this helped a lot!

Products

Answer by Tom Lane

Tom Lane (view profile)

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.

Amr Hashem

Amr Hashem (view profile)

on 10 Apr 2017
What is equivalent to "Makedist" as I am using Matlab 2012?