Separate Gaussian mixture distributions of 5 components.
6 次查看(过去 30 天)
显示 更早的评论
I used this code (to fit data by gaussian mixture):
binWidth = 1; %width of the bar equal 1
binCtrs = 0:binWidth:134; % the bars start from 0 to 172. d=729 w=104 93 m=24
figure
counts = hist(Life,binCtrs,'k'); % b k m %hold on; plot(n,count,'ro')
stem(binCtrs,counts,'Marker','none','Color',[0.2 0.2 0.2]);
counts = hist(Life,binCtrs);
nu = length(Life);
prob = counts / (nu * binWidth);
figure
stem(binCtrs,prob,'Marker','none','Color',[0.5 0.5 0.5]);hold on ; % axis([-5 144 0 0.018]);
%%finding the number of components
%using minimum value of AIC
AIC = zeros(1,7);
obj = cell(1,7);
for Kk = 1:7
obj{Kk} = gmdistribution.fit(Life,Kk);
AIC(Kk)= obj{Kk}.AIC;
end
[minAIC,numComponents] = min(AIC);
numComponents %differ 5=4 7=6 11=5
%%finding the parameters of Mixture of gaussian using (gmdisribution.fit)
numComponents=4;
paramEsts= gmdistribution.fit(Life,numComponents)
%mu of mixture of gaussians of 4 components
MU=[paramEsts.mu(1);paramEsts.mu(2);paramEsts.mu(3);paramEsts.mu(4)];
SIGMA=cat(3,[paramEsts.Sigma(1)],[paramEsts.Sigma(2)],[paramEsts.Sigma(3)],[paramEsts.Sigma(4)]);%I wrote it at this
PPp=[paramEsts.PComponents(1),paramEsts.PComponents(2),paramEsts.PComponents(3),paramEsts.PComponents(4)];
objA = gmdistribution(MU,SIGMA,PPp);
xgridss=transpose(linspace(0,134,100)); %using the parameters to draw a line from 0 to 173
plot(xgridss,pdf(objA,xgridss),'g--','linewidth',2); hold on
I want to separate each gaussian component (I use this code):
numComponents5=4;
paramEsts5= gmdistribution.fit(Life,numComponents5)
MU1=[paramEsts5.mu(1)];
SIGMA1=cat(3,[paramEsts5.Sigma(1)]);
PPp1=[paramEsts5.PComponents(1)];
objA1 = gmdistribution(MU1,SIGMA1,PPp1);
xgridss1=transpose(linspace(0,134,100));
MU2=[paramEsts5.mu(2)];
SIGMA2=cat(3,[paramEsts5.Sigma(2)]);
PPp2=[paramEsts5.PComponents(2)];
objA2 = gmdistribution(MU2,SIGMA2,PPp2);
xgridss2=transpose(linspace(0,134,100));
MU3=[paramEsts5.mu(3)];
SIGMA3=cat(3,[paramEsts5.Sigma(3)]);
PPp3=[paramEsts5.PComponents(3)];
objA3 = gmdistribution(MU3,SIGMA3,PPp3);
xgridss3=transpose(linspace(0,134,100));
MU4=[paramEsts5.mu(4)];
SIGMA4=cat(3,[paramEsts5.Sigma(4)]);
PPp4=[paramEsts5.PComponents(4)];
objA4 = gmdistribution(MU4,SIGMA4,PPp4);
xgridss4=transpose(linspace(0,134,100));
% figure
plot(xgridss1,pdf(objA1,xgridss1),'r-','linewidth',2) ; hold on
plot(xgridss2,pdf(objA2,xgridss2),'r-','linewidth',2) ; hold on
plot(xgridss3,pdf(objA3,xgridss3),'r-','linewidth',2) ; hold on
plot(xgridss4,pdf(objA4,xgridss4),'r-','linewidth',2) ; hold on
but the value of each gaussian not the same How I could adjust the code to plot seprate individual components?
回答(1 个)
the cyclist
2017-4-9
Do you mean you want each gaussian in a separate plot? Then,
figure
plot(xgridss1,pdf(objA1,xgridss1),'r-','linewidth',2);
figure
plot(xgridss2,pdf(objA2,xgridss2),'r-','linewidth',2);
figure
plot(xgridss3,pdf(objA3,xgridss3),'r-','linewidth',2);
figure
plot(xgridss4,pdf(objA4,xgridss4),'r-','linewidth',2);
Or perhaps use the subplot command.
If that is not what you mean, then it is not clear (to me) what you want.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!