2015-07-21 97 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