Documentation of iv4mv


Global Index (short | long) | Local contents | Local Index (short | long)


Function Synopsis

TH=iv4mv(z,nn,maxsize,T,p)

Help text

IV4MV  Computes approximately optimal IV-estimates for multivariate ARX-models
   Auxiliary routine to iv4
   TH = iv4mv(Z,NN)

   TH: returned as the estimate of the ARX model
   A(q) y(t) = B(q) u(t-nk) + v(t)
   along with estimated covariances and structure information.
   For the exact format of TH see HELP THETA.

   Z : the output-input data Z=[y u], with each output, input as column
   vectors: Z=[y1 y2 ... yp u1 u2 ... un]

   NN: NN=[na nb nk], giving the orders and delays of the above model.

   Some parameters associated with the algorithm are accessed by
   TH = iv4mv(Z,NN,maxsize,T)
   See HELP AUXVAR for an explanation of these and their default values.

Cross-Reference Information

This function calls This function is called by

Listing of function iv4mv

function TH=iv4mv(z,nn,maxsize,T,p)

%   L. Ljung 10-3-90
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 2.3 $  $Date: 1997/12/02 03:43:23 $

% *** Set up default values ***
[nnr,nnc]=size(nn);
ny=nnr;nu=(nnc-ny)/2;
if nu<=0,error('This routine is not intended for time series. Use ARX or AR instead!'),end
[Ncap,nz]=size(z);
if nz>Ncap,error(' Data should be organized in column vectors!'),return,end
if nz~=(nu+ny),disp(' Incorrect number of orders specified!'),disp('For an AR-model nn=na'),disp('For an ARX-model, nn=[na nb nk]'),
error('see above'),return,end
na=nn(:,1:ny);
if nu>0,nb=nn(:,ny+1:ny+nu);else nb=zeros(ny,1);end
if nu>0,nk=nn(:,ny+nu+1:nnc);else nk=zeros(ny,1);end

maxsdef=idmsize(Ncap);
if nargin<5, p=1;end
if nargin<4, T=1;end
if nargin<3, maxsize=maxsdef;end

if p<0,p=1;end, if T<0, T=1;end,if maxsize<0,maxsize=maxsdef;end

% *** Do some consistency tests ***


if nz>Ncap, error('The data should be organized in column vectors')
return,end
%
% *** First stage: compute an LS model ***
%
th=mvarx(z,nn,maxsize,T);
a=th2ss(th);
maxa=max(abs(eig(a)));
if maxa>1, %Stabilize!
        [a,b]=th2arx(th);[nar,nac]=size(a);
        for ka=1:(nac/ny)-1
        a(:,ka*ny+1:(ka+1)*ny)=((0.9/maxa)^ka)*a(:,ka*ny+1:(ka+1)*ny);
        end
  th=arx2th(a,b,ny,nu);
end
%
% *** Second stage: Compute the IV-estimates using the LS
%     model a, b for generating the instruments ***
%
yh=idsimss(z(:,ny+1:nz),th);
for outp=1:ny
if norm(yh(:,outp),inf)<eps,
error(['Output number ' int2str(outp) ' is decoupled from all inputs. IV4 cannot be used!']),end,end
th=ivxmv(z,nn,yh,maxsize,T,0);
a=th2ss(th);th1=th;
maxa=max(abs(eig(a)));
if maxa>1, %Stabilize!
        [a,b]=th2arx(th);[nar,nac]=size(a);
        for ka=1:(nac/ny)-1
        a(:,ka*ny+1:(ka+1)*ny)=((0.9/maxa)^ka)*a(:,ka*ny+1:(ka+1)*ny);
        end
  th1=arx2th(a,b,ny,nu);
end

%
% *** Third stage: Compute the residuals, v, associated with the
%     current model, and determine an AR-model, A, for these ***
%
v=pe(z,th);if ny>1, v=sum(v')';end
art=arx(v,(max(sum(na))+max(sum(nb))),maxsize,T,0);

%
% *** Fourth stage: Use the optimal instruments ***
%
for kz=1:nz
zf(:,kz)=filter([1 art.'],1,z(:,kz));
end
xf=idsim(zf(:,ny+1:nz),th1);
TH=ivxmv(zf,nn,xf,maxsize,T,1);
TH(2,7)=34;