matlab练习程序(VAR模型)

VAR模型称为向量自回归模型,可以对多组变量之间的关系进行建模,是AR模型的多维扩展。

比如有两个变量X和Y,AR模型建模场景是X只和X过去的状态有关系,VAR模型建模场景则是X同时跟X和Y过去的状态都有关系。

VAR基本形式如下:

模型参数求解可以参考上一篇ARMA模型的求解方法。

matlab代码如下:

clear all;close all;clc;

n=50;
ux = 3.4;
uy = 2.9;
ex = randn(n,1);
ey = randn(n,1);
x = randn(n,1);
y = randn(n,1);

%VAR模型
for i=3:n
    x(i) = 0.2*x(i-1) + 0.1*x(i-2) - 0.4*y(i-1) - 0.3*y(i-2) + ux + ex(i);
    y(i) = -0.3*x(i-1) - 0.2*x(i-2) + 0.1*y(i-1) + 0.2*y(i-2) + uy + ey(i);
end

subplot(2,1,1);
plot(x,'r-o');
hold on;
plot(y,'g-o');
title('原始序列')

newux = mean(x);
newuy = mean(y);
options.Algorithm = 'levenberg-marquardt';
lb = [];ub = [];
par = [newux;newuy;rand(8,1);rand(2*n,1)];
f = @(par) func(par,x,y);
par= lsqnonlin(f,par,lb,ub,options);        %执行优化

%生成拟合量
for i=3:n
    x(i) =  par(3)*x(i-1) + par(4)*x(i-2) + par(5)*y(i-1) + par(6)*y(i-2) + par(1) + ex(i);
    y(i) =  par(7)*x(i-1) + par(8)*x(i-2) + par(9)*y(i-1) + par(10)*y(i-2) + par(2) + ey(i);
end

subplot(2,1,2);
plot(x,'r-o');
hold on;
plot(y,'g-o');
title('估计序列')

function re = func(par,x,y)

ex = par(11:10+length(x));
ey = par(11+length(x):end);

re = zeros(length(x)*2,1);
for i=3:length(x)
    re(i*2-1) = x(i) -( par(3)*x(i-1) + par(4)*x(i-2) + par(5)*y(i-1) + par(6)*y(i-2) + par(1) + ex(i));
    re(i*2) = y(i) -( par(7)*x(i-1) + par(8)*x(i-2) + par(9)*y(i-1) + par(10)*y(i-2) + par(2) + ey(i));
end

end

结果如下:

posted @ 2022-09-03 20:12  Dsp Tian  阅读(1581)  评论(0编辑  收藏  举报