2016-12-23 8 views
1

Matlabのヒストグラムにpdfを当てはめるときに問題があります。私はデータがマルチモーダルなのでgmdistribution.fitを使用しています。これは私がやっていることである:あなたが見ることができるように、ガウス混合が適切にヒストグラムをフィットしないmatlabのヒストグラムにpdfを当てはめる

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

Histogram and PDFs

。 ksdensiti関数のPDFははるかに優れています。私はまた、ただ1つのガウス分布に合うように試みました。前の同じコードを実行する場合は、 data = [0.35 * randn(1,100000)] ';を使用してください。 および obj = gmdistribution.fit(data、1、 'Replicates'、5);あなたは

再び

Histogram and PDFs for one gaussian

次を得る 、gmdistributionからPDFをヒストグラムに適合していません。問題は、データ生成のスケーリング係数(0.35)によると思われる。私は間違って何をしていますか?

答えて

0

gmdistributionオブジェクトのパラメータは共分散に対応しますが、normpdf関数は標準偏差が必要です。この問題は、forループ内のnormpdf(x,u,sigma)normpdf(x,u,sqrt(sigma))に置き換えることで修正されています。

関連する問題