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 :)

5 件のコメント

Image Analyst
Image Analyst 2016 年 1 月 27 日
Care to attach your data and code so people can try some things?
Amr Hashem
Amr Hashem 2017 年 3 月 26 日
what is the code u use to fit the Gaussian of mixtures one dimentional?
Trisha Kibaya
Trisha Kibaya 2018 年 8 月 20 日
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 2018 年 8 月 24 日
編集済み: Ji Hoon Jeong 2018 年 8 月 24 日
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 2018 年 8 月 28 日
Thanks a lot, this helped a lot!

サインインしてコメントする。

 採用された回答

Tom Lane
Tom Lane 2016 年 1 月 28 日

2 投票

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 件のコメント

Amr Hashem
Amr Hashem 2017 年 4 月 10 日
What is equivalent to "Makedist" as I am using Matlab 2012?

サインインしてコメントする。

その他の回答 (2 件)

yusra Ch
yusra Ch 2020 年 9 月 5 日

0 投票

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

1 件のコメント

Ji Hoon Jeong
Ji Hoon Jeong 2020 年 9 月 18 日
My code and question were related to how to fit raw data into a Gaussian Mixture Distribution, so it's bit different than your intention.
If you already know about the parameters of your distribution, than use the code below
% X range
xran = -10 : 0.1 : 10;
% Component 1
mu1 = 3.3153;
sigma1 = 15.3648;
proportion1 = 0.5;
% Component 2
mu2 = -61.5348;
sigma2 = 137.2863;
proportion2 = 0.5;
% plot the GMD
plot(xran, ...
proportion1 * pdf('Normal', xran, mu1, sigma1) + proportion2 * pdf('Normal', xran, mu2, sigma2)...
);
if the Sigma value you got is not the std, rather covariance matrix of a multivariate distribution, than uses this instead.
plot(xran, ...
proportion1 * pdf('Normal', xran, mu1, sqrt(sigma1)) + proportion2 * pdf('Normal', xran, mu2, sqrt(sigma2))...
);

サインインしてコメントする。

cynthia thing
cynthia thing 2020 年 12 月 31 日

0 投票

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

質問済み:

2016 年 1 月 27 日

回答済み:

2020 年 12 月 31 日

Community Treasure Hunt

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

Start Hunting!

Translated by