Bivariate Guassian mixed model on 1D data

1 vue (au cours des 30 derniers jours)
Trisha Kibaya
Trisha Kibaya le 24 Août 2018
Commenté : Trisha Kibaya le 28 Août 2018
Hi, I am trying to plot a guassian curve on the histogram distribution of my 1D data. This is my code:
data = xlsread('csf.xlsx','ab');
mu1 = mean('data');
sigma1 = std('data');
X = [mvnrnd(mu1,sigma1,1000)];
numComponents=2;
paramEsts = fitgmdist(X,numComponents);
MU=[paramEsts.mu(1);paramEsts.mu(2)];
SIGMA=cat(3,[paramEsts.Sigma(1)],[paramEsts.Sigma(2)]);
PPp=[paramEsts.PComponents(1),paramEsts.PComponents(2)];
gm = gmdistribution(MU,SIGMA,PPp);
dimension = gm.NumVariables
rng(1);
min_val = min(data(:)-100); max_val = max (data(:)+1000);
% min_val = min('data'); max_val = max ('data');
histogram(data, 'Normalization', 'pdf', 'EdgeColor', 'none')
x= min_val:0.01:max_val;
xlim([min_val max_val])
hold on;
xgrid = linspace (50,3000,500)';
n1 = makedist('normal',paramEsts.mu(1),sqrt(paramEsts.Sigma(1)));
n2 = makedist('normal',paramEsts.mu(2),sqrt(paramEsts.Sigma(2)));
p = paramEsts.ComponentProportion;
y = p(1)*pdf(n1,xgrid) + p(2)*pdf(n2,xgrid);
hold on; plot(xgrid,y,'b'); hold off
And this is what I get:
However, I am trying to get something like this:
Please, how do I achieve this?
  2 commentaires
the cyclist
the cyclist le 24 Août 2018
Can you upload either the Excel file or the resulting data variable in a MAT file (using that little paperclip icon)?
Trisha Kibaya
Trisha Kibaya le 27 Août 2018
Sure. Thanks.

Connectez-vous pour commenter.

Réponses (1)

Image Analyst
Image Analyst le 24 Août 2018
Try something like the attached demo that fits two Gaussians to data. Adapt as needed (like replace blue dots on plot with white bars or whatever).
  7 commentaires
Image Analyst
Image Analyst le 28 Août 2018
Trisha Kibaya
Trisha Kibaya le 28 Août 2018
Thanks. I am still new at this, I had no idea that I posted my code in the wrong way. Sorry about that.
xgrid = linspace (40,1000,112110');
n1 = makedist('normal',paramEsts.mu(1),sqrt(paramEsts.Sigma(1)));
n2 = makedist('normal',paramEsts.mu(2),sqrt(paramEsts.Sigma(2)));
p = paramEsts.ComponentProportion;
y1 = p(1)*pdf(n1,xgrid); hold on; plot (xgrid, y1,'b'); hold off
y2 = p(2)*pdf(n2,xgrid); hold on; plot (xgrid, y2,'r'); hold off

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