2013-07-30 47 views
0

假设无噪声的AR(1)过程y(t)= a*y(t-1)。我有以下的概念问题,并且很乐意澄清。将数据拟合到线性模型中的问题

Q1 - 数学公式与实现之间的差异 - AR模型的数学公式为y(t) = - summmation over i=1 to p[a*y(t-p)] + eta(t),其中p =模型阶数,eta(t)是白高斯噪声。但是在使用任何方法(如arburg()或最小二乘法)估计系数时,我们只需调用该函数即可。我不知道是否隐式添加了白色高斯噪声。然后,当我们用估计的系数分解AR方程时,我已经看到负号不被考虑,也没有被添加噪声项。

什么是AR模型的正确表示方法?当我只有1000个数据点的单个样本时,如何在k个试验中找到平均系数?

Q2 - I嵌合的数据“数据”,从未知系统产生并由

load('data.txt'); 

for trials = 1:10 

    model = ar(data,1,'ls'); 
    original_data=data; 

    fitted_data(i)=coeff1*data(i-1); % **OR** 
    data(i)=coeff1*data(i-1); 

    fitted_data=data; 

    residual= original_data - fitted_data; 
    plot(original_data,'r'); hold on; plot(fitted_data); 

end 

获得的系数在计算残余 - 在如何模拟fitted_data用于试验中的k数,然后找到残差编码问题是通过用所获得的系数来解析AR方程而获得的拟合数据, Matlab有这样做的功能,但我想做我自己的。那么,从原始数据中找出系数后,我该如何解决?上面的代码不正确。附加的是原始数据和fits_data的图。 Plot of original vs fitted data

+4

配件数据来模拟一条通往黑暗面的道路,这是年轻人一个。相反,您应该尝试将模型拟合到您的数据中...... –

+0

您发布的代码令人困惑,例如您在某个时间点使用索引i。请张贴matlab代码或解释您发布伪代码。 –

回答

1

AR型模型可以用于很多目的,包括线性预测,线性预测编码,滤波噪声。 eta(t)不是我们想要保留的东西,而是算法的一部分是通过查找数据中的持久模式来消除它们的影响。

我有教科书,在线性预测的上下文中,在总和之前不包括表达式中包含的负号。在另一方面Matlab的功能lpc做:

Xp(n) = -A(2)*X(n-1) - A(3)*X(n-2) - ... - A(N+1)*X(n-N) 

我建议你看一下功能lpc如果你有没有准备好,并在examples从文档,如以下几点:

randn('state',0); 
noise = randn(50000,1); % Normalized white Gaussian noise 
x = filter(1,[1 1/2 1/3 1/4],noise); 
x = x(45904:50000); 
% Compute the predictor coefficients, estimated signal, prediction error, and autocorrelation sequence of the prediction error: 
p = lpc(x,3); 
est_x = filter([0 -p(2:end)],1,x); % Estimated signal 
e = x - est_x;      % Prediction error 
[acs,lags] = xcorr(e,'coeff');  % ACS of prediction error 

的估计x计算为est_x。请注意该示例如何使用filter。再次引用了MATLAB DOC,“是‘转置直接形式II’执行标准差分方程:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) 
         - a(2)*y(n-1) - ... - a(na+1)*y(n-na) 

这意味着在之前的示例est_x(n)被计算为

est_x(n) = -p(2)*x(n-1) -p(3)*x(n-2) -p(4)*x(n-3) 

这是你所期望的

编辑:

由于REGA rds函数ar,matlab documentation解释了输出系数与上面讨论的lp场景中的含义相同。

评估AR模型的输出正确的方法是计算

data_armod(i)= -coeff(2)*data(i-1) -coeff(3)*data(i-2) -coeff(4)*data(i-3) 

哪里_系数为系数矩阵返回与

model = ar(data,3,'ls'); 
coeff = model.a; 
+0

感谢您对lpc的回复和信息,我不知道。我仍然想澄清我所做的是否正确或不使用AR。在我的代码中,执行data = original_data是不正确的; %通过model查找系数.a = ar(data,3,'ls'); %通过解决方程式估算;数据(i)= coeff1 * data(i-1)* coeff2 * data(i-2)* coeff3 * data(i-3),以便找到估计的输出α,那么残差将是e = original_data- –

+0

谢谢。我想接受这两个答案..但奇怪的是,只有一个可以打勾。你对我所有问题的答复真的很有帮助。 –

+0

尽管如此,数学表达式中的eta(t)不是残差而是噪声项。那么,是否有可能确定它的分布值? –

2

如果模型只是y(n)= a*y(n-1)标量a,那么这就是解决方案。

y = randn(10, 1); 
a = y(1 : end - 1) \ y(2 : end); 

y_estim = y * a; 
residual = y - y_estim; 

当然,你应该将数据分为列车试验,对试验数据应用a。你可以概括这种方法y(n)= a*y(n-1) + b*y(n-2)

注意\代表mldivide()功能:mldivide

编辑:

% model: y[n] = c + a*y(n-1) + b*y(n-2) +...+z*y(n-n_order) 
n_order = 3; 
allow_offset = true; % alows c in the model 

% train 
y_train = randn(20,1); % from your data 
[y_in, y_out] = shifted_input(y_train, n_order, allow_offset); 
a = y_in \ y_out; 

% now test 
y_test = randn(20,1); % from your data 
[y_in, y_out] = shifted_input(y_test, n_order, allow_offset); 
y_estim = y_in * a; % same a 
residual = y_out - y_estim; 

这里是shifted_input():

function [y_in, y_out] = shifted_input(y, n_order, allow_offset) 
y_out = y(n_order + 1 : end); 
n_rows = size(y, 1) - n_order; 
y_in = nan(n_rows, n_order); 
for k = 1 : n_order  
    y_in(:, k) = y(1 : n_rows); 
    y = circshift(y, -1); 
end 
if allow_offset 
    y_in = [y_in, ones(n_rows, 1)]; 
end 
return