У меня возникают проблемы при установке pdf-файла на гистограмму в Matlab. Я использую gmdistribution.fit, потому что мои данные мультимодальные. Это то, что я сделал:Установка pdf на гистограмму в matlab
data=[0.35*randn(1,100000), 0.5*randn(1,100000)+5, 1*randn(1,100000)+3]'; %multimodal data
x=min(data):(max(data)-min(data))/10000:max(data);
%Normalized Histogram
[counts,edges]=histcounts(data,500, 'Normalization', 'pdf');
bw=edges(2)-edges(1);
centers=edges(1:end-1)+bw;
H = bar(centers,counts,'hist');
hold on
%Fitting with gmdistribution
rng default
obj=gmdistribution.fit(data,3,'Replicates',5);
%the PDF
PDF=zeros(1,length(x));
for i=1:obj.NumComponents
k=obj.ComponentProportion(i);
u=obj.mu(i);
sigma=obj.Sigma(i);
PDF=PDF+k*normpdf(x,u,sigma);
end
PDF=PDF/trapz(x,PDF); %normalization (just in case)
plot(x,PDF)
%Fitting with ksdensity (for comparison)
[PDF2,xi]=ksdensity(data,x);
plot(x,PDF2)
legend('Normalized Histogram','gmdistribution','ksdensity')
Как вы можете видеть, гауссова смесь не подходит гистограмму правильно. PDF из функции ksdensiti намного лучше. Я также пытался подогнать только одного гаусса. Если вы используете тот же предыдущий код, используя data = [0.35 * randn (1,100000)] '; и obj = gmdistribution.fit (данные, 1, 'Replicates', 5); вы получите следующее
Histogram and PDFs for one gaussian
Опять же, PDF из gmdistribution не соответствует гистограмму. Похоже, что проблема связана с коэффициентом масштабирования в генерации данных (0,35). Что я делаю не так?