Documentation of resid


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


Function Synopsis

[e,r]=resid(z,th,M,maxsize)

Help text

RESID  Computes and tests the residuals associated with a model.
   E = RESID(Z,TH)

   Z : The output-input data Z=[y u], with y and u being column vectors.
   For multi-variable systems Z=[y1 y2 .. yp u1 u2 ... un]. 
   For time-series Z=y only.
   TH: The model to be evaluated on the given data set. (For the theta 
   format, see also THETA.)

   E : The residuals associated with TH and Z. [RESID(Z,TH); just performs
   and displays the tests, without returning any data.]

   The autocorrelation function of E and the cross correlation between
   E and the input(s) is computed and displayed. 99 % confidence limits 
   for these values are also given (based on the hypothesis
   that the residuals are white and independent of the inputs). These 
   functions are given up to lag 25, which can be changed to M by
   E = RESID(Z,TH,M). The correlation information can be saved and re-
   plotted by
   [E,R] = RESID(Z,TH).         RESID(R);

   E = RESID(Z,TH,M,MAXSIZE) changes the memory variable MAXSIZE from
   its default value. See also AUXVAR.
   See also PE.

Cross-Reference Information

This function calls This function is called by

Listing of function resid

function [e,r]=resid(z,th,M,maxsize)

%   L. Ljung 10-1-86,1-25-92
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 2.4 $  $Date: 1997/12/02 03:42:42 $

if nargin < 1
   disp('Usage: RESID(DATA,MODEL)')
   disp('       E = RESID(DATA,MODEL,No_OF_LAGS,MAXSIZE)')
   return
end


% ** Set up the default values **
newplot;
[N,nz]=size(z);
maxsdef=idmsize(N);

if nargin<4, maxsize=maxsdef;end
if nargin<3, M=25;end
if maxsize<0,maxsize=maxsdef;end,if M<0, M=25;end
if nargin==1,[nz2,M1]=size(z);nz=sqrt(nz2);M=M1-2;N=z(1,M1-1);
ny=z(1,M1);nu=nz-ny;r=z(:,1:M);end
if nargin>1,
[N,nz]=size(z); nu=th(1,3);ny=nz-nu;
% *** Compute the residuals and the covariance functions ***

e=pe(z,th);

if nz>1, e1=[e z(:,ny+1:nz)];else e1=e;end
r=covf(e1,M,maxsize);
end
nr=0:M-1;plotind=0;
for ky=1:ny
ind=ky+(ky-1)*nz;
% ** Confidence interval for the autocovariance function **
sdre=2.58*(r(ind,1))/sqrt(N)*ones(M,1);
if nz==1,spin=111;else spin=210+plotind+1;end,subplot(spin)
plot(nr,r(ind,:)'/r(ind,1),nr,[ sdre -sdre]/r(ind,1),':r')
title(['Correlation function of residuals. Output # ',int2str(ky)])
xlabel('lag')
plotind=rem(plotind+1,2);
if plotind==0,pause,newplot;end
end


nr=-M+1:M-1;
% *** Compute confidence lines for the cross-covariance functions **
for ky=1:ny
for ku=1:nu
ind1=ky+(ny+ku-1)*nz;ind2=ny+ku+(ky-1)*nz;indy=ky+(ky-1)*nz;
indu=(ny+ku)+(ny+ku-1)*nz;
   %corr 891007
   sdreu=2.58*sqrt(r(indy,1)*r(indu,1)+2*(r(indy,2:M)*r(indu,2:M)'))/sqrt(N)*ones(2*M-1,1); % corr 890927
   spin=210+plotind+1;subplot(spin)
   plot(nr,[r(ind1,M:-1:1) r(ind2,2:M) ]'/(sqrt(r(indy,1)*r(indu,1))),...
        nr,[ sdreu -sdreu]/(sqrt(r(indy,1)*r(indu,1))),':r' )

   title(['Cross corr. function between input ' int2str(ku)...
         ' and residuals from output ',int2str(ky)])
   xlabel('lag')
   plotind=rem(plotind+1,2);if ky+ku<nz & plotind==0,pause,newplot;end
end,end
r(1,M+1:M+2)=[N,ny];
set(gcf,'NextPlot','replace');