# Separate Drawing of Gaussian Mixture Model

68 views (last 30 days)
Ji Hoon Jeong on 27 Jan 2016
Commented: Trisha Kibaya on 28 Aug 2018
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
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 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 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 on 28 Aug 2018
Thanks a lot, this helped a lot!

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.

#### 1 Comment

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