2015-07-21 135 views
1

我有一個向量y包含1440個值(值在0-1之間),看起來像一個高斯分佈。 因此,我想找到最佳擬合高斯分佈有一個模型。擬合高斯分佈到數據

x=1:1440; 
[sigma_,mu_] = gaussfit(x,y); 
norm = normpdf(x,mu_,sigma_); 

我的問題是,在範數的值是在y比的值越小的方式,即在norm值是10-3的順序,而在y值是0 1之間。

我然後添加一個額外的步驟,以規範0和1之間的標準值。

norm_data = (norm - min(norm))/(max(norm) - min(norm)); 

我的程序是否正確? (西格瑪和畝的估計,normpdf,歸一化) 有沒有辦法直接擬合表達概率的原始數據?

y可以下載here

回答

1

假設你正在使用這個gaussfit,如果你檢查函數的頭部:

% REMARKS: 
% The function does not always converge in which case try to use initial 
% values sigma0, mu0. Check also if the data is properly scaled, i.e. p.d.f 
% should approx. sum up to 1 

這意味着安裝之前,你需要確保sum(y)==1+err是犯錯小東西。

您的ysum(y)470.1964,這是一種遠離1。對數據進行規範化處理,使其總和等於1,然後再進行擬合。

EDIT

實際上,所述溫控功能不如果數據是不正常化(或多或少,它接受在範圍0.5-1.5的數據)。並且工作得很好。由於y在函數內部被歸一化,所以如果要比較結果normy,您需要將y歸一化或者非規格化norm

% normalize y 
plot(x,norm,x,y./sum(y)) 
% denormalize norm 
plot(x,norm*sum(y),x,y) 
在任一情況下(但不同的比例)

enter image description here

+0

嗨,感謝您的回答,但函數gaussfit已經正常化數據,如果他們不是......我的問題是,估計的PDF值比經驗值小... – gabboshow

+0

@gabboshow我複製來自函數的文本。這意味着**不會**正常化數據。否則文本不會在那裏。再次閱讀我的答案,正常化'y'應該很簡單。請注意,如果您正在處理統計信息,則必須將**標準化,否則其概念錯誤。 –

+0

Plase請參閱函數gaussfit的第56行 – gabboshow

0

gaussfit(X,Y)適合的歸一化高斯到的數據。如果你的數據沒有被標準化,這是行不通的。如何正確適應這個問題的答案是here