Bivariate Guassian mixed model on 1D data
조회 수: 2 (최근 30일)
이전 댓글 표시
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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194352/image.jpeg)
However, I am trying to get something like this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194353/image.png)
Please, how do I achieve this?
댓글 수: 2
the cyclist
2018년 8월 24일
Can you upload either the Excel file or the resulting data variable in a MAT file (using that little paperclip icon)?
답변 (1개)
Image Analyst
2018년 8월 24일
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).
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194212/image.png)
참고 항목
카테고리
Help Center 및 File Exchange에서 Line Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!