2013-11-28 101 views
0

我想使用Matlab的nlinfit函數來估計x,y配對數據的最佳擬合高斯。在這種情況下,x是2D方向的範圍,y是「是」響應的概率。使用nlinfit來擬合高斯到x,y配對數據

我從相關帖子複製了@norm_funct,我想返回一個平滑的正態分佈,它最接近y中觀察到的數據,並返回最佳擬合pdf的幅度,均值和標準差。目前,擬合功能看起來是不正確的縮放和不平滑 - 任何幫助非常感謝!

x = -30:5:30; 
y = [0,0.20,0.05,0.15,0.65,0.85,0.88,0.80,0.55,0.20,0.05,0,0;]; 

% plot raw data 
figure(1) 
plot(x, y, ':rs'); 
axis([-35 35 0 1]); 

% initial paramter guesses (based on plot) 
initGuess(1) = max(y); % amplitude 
initGuess(2) = 0;  % mean centred on 0 degrees 
initGuess(3) = 10;  % SD in degrees 

% equation for Gaussian distribution 
norm_func = @(p,x) p(1) .* exp(-((x - p(2))/p(3)).^2); 

% use nlinfit to fit Gaussian using Least Squares 
[bestfit,resid]=nlinfit(y, x, norm_func, initGuess); 

% plot function 
xFine = linspace(-30,30,100); 
figure(2) 
plot(x, y, 'ro', x, norm_func(xFine, y), '-b'); 

非常感謝

+0

我的回答對你有幫助嗎? –

+0

對不起,延遲 - 我錯過了你的答案的通知,但非常感謝你的建議。你的解釋和例子非常清楚和有用! – user3045903

+0

太棒了,很高興幫助! - 你會「接受」答案,然後點擊左邊數字下面的空白複選標記。 –

回答

1

如果您的數據實際上代表表示您希望來自於正態分佈數據的概率估計,然後擬合曲線是不估計正態分佈的參數的正確方法。有不同的方法有不同的複雜性;其中最簡單的是method of moments,這意味着您可以選擇參數,使得理論分佈的矩與您的樣本匹配。在正態分佈的情況下,這些時刻僅僅是均值和方差(或標準偏差)。下面的代碼:

% normalize y to be a probability (sum = 1) 
p = y/sum(y); 

% compute weighted mean and standard deviation 
m = sum(x .* p); 
s = sqrt(sum((x - m) .^ 2 .* p)); 

% compute theoretical probabilities 
xs = -30:0.5:30; 
pth = normpdf(xs, m, s); 

% plot data and theoretical distribution 
plot(x, p, 'o', xs, pth * 5) 

結果表明一個像樣的配合:

enter image description here

你會在最後一行看到了5倍。這是由於以下事實:對於整個值範圍,您沒有概率(密度)估計值,而是從距離爲5的點估計出來。在我的處理中,我假設它們對應於概率密度上的積分,例如在一個區間[x - 2.5,x + 2.5]上,這個區間可以粗略地用中間密度乘以區間寬度來近似。我不知道這個解釋對你的數據是否正確。

您的數據遵循高斯曲線,並將它們描述爲概率。這些數字(y)是您的原始數據嗎?或者您是從例如一個更大的數據集上的直方圖?如果是後者,則可以通過使用原始的完整數據來改善分佈參數的估計。

相關問題