1

確定MATLAB正態分佈適合的高度我公司生產使用MATLAB中的histfit功能正常分佈擬合直方圖和包括誤差線如下:你怎麼能histfit

h = histfit(data); 
[nelements,bincenters] = hist(data); 
hold on 
err = sqrt(nelements); 
errorbar(bincenters, nelements, err); 
hold off 

其中「數據「是m個數據點的向量,用於進行分佈,」dataerror「是每個點上的誤差向量。來自histfit的正態分佈導致可能與「數據錯誤」中的平均誤差欄不同的標準偏差。我想通過繪製一個單獨的正態分佈來直觀地檢查這種差異,該正態分佈的平均值是avg = mean(data);,而我的已知錯誤stdev = mean(dataerrors);給出了一個標準差。我這樣做以下列方式:

x = sort(data); 
    y = exp(- 0.5 * ((x - avg)/stdev) .^ 2)/(stdev * sqrt(2 * pi));  
    plot(x, y,'k') 

當我做到這一點,均值和標準差的外觀接近,但分佈不匹配,因爲histfit分佈不是標準化的高度,但在第二次分配是。我可以通過發明一個比例因子或y點來做臨時更正,但我需要這個自動化,所以需要相應地知道高度並進行比例縮放。

Incorrect scaling of normal distribution

如果我能以某種方式從histfit測量分佈的高度,我可以縮放第二分佈相匹配。或者,我可以以允許輸入已知平均值和標準偏差的方式擬合第二個分佈,然後適合分佈的高度。

理想的方法是將第二個正態分佈與數據分開擬合。通過這種方式,高度可能不同,但對於分佈的尾部,擬合會更好。

所以問題是:

如何這些分佈進行縮放高度來匹配? 如何以與histfit相似的方式將高斯分佈(使用高度作爲參數)與已知平均值和標準偏差分別擬合?

回答

0

如果你想進行非規範化正態分佈,以適應您的柱狀圖,可以由直方圖的面積乘以(與trapz()計算,看到這個post獲取更多信息)。例如:

data = randn(250,1); 

% Histogram with histfit 
nbins = 20; 
h = histfit(data,nbins); 
[nelements,bincenters] = hist(data,nbins); 
hold on 

% Histogram computed manually and scaled with trapz() 
avg = mean(data); 
stdev = std(data); 
x = sort(data); 
y = exp(- 0.5 * ((x - avg)/stdev) .^ 2)/(stdev * sqrt(2 * pi)); 
plot(x, y*trapz(bincenters,nelements),'g','LineWidth',1.5) 
legend('Histogram','Distribution from histfit','Distribution computed manually') 

enter image description here

+1

除非標準偏差是一樣的,但這種方法修復反正我的具體應用問題這不匹配的高度。 –