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

除非标准偏差是一样的,但这种方法修复反正我的具体应用问题这不匹配的高度。 –