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
结果如下: