Documentation of selstruc


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


Function Synopsis

[nn,Vmod]=selstruc(V,c)

Help text

SELSTRUC Selects model structures according to various criteria.

   nn = selstruc(V,c)    or   [nn,Vm] = selstruc(V,c)

   V: is a matrix containing information about different structures,
   typically obtained as the output of ARXSTRUC or IVSTRUC.

   c: selects the criterion: c='PLOT' gives plots of the loss function
   and (if applicable) the conditioning number from IVSTRUC as func-
   tions of the number of estimated parameters. The user then selects the
   number of parameters.
   Automatic choices of structures are obtained by c='AIC', which gives
   Akaike's information theoretic criterion, while c='MDL' gives
   Rissanen's minimum description length criterion. If c is given a
   numeric value the structure is selected by minimization of
   (1 + c*d/N)*Vd, where d is the number of estimated parameters,
   Vd is the loss function of the corresponding model, and N is the
   number of data. If c is omitted, PLOT is chosen.

   nn: is returned as the chosen structure. The format is compatible
   with the input format for ARX and IV4.
   Vm: the first row of Vm contains the logarithms of the modified
   criteria of fit. The remaining rows of Vm coincide with V.

Cross-Reference Information

This function calls This function is called by

Listing of function selstruc

function [nn,Vmod]=selstruc(V,c)


%   L. Ljung 4-12-87,8-27-94
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 2.3 $  $Date: 1997/12/02 03:44:07 $

if nargin < 1
   disp('Usage: NN = SELSTRUC(V)')
   disp('       NN = SELSTRUC(V,SELECTION_CRIT)')
   disp('       SELECTION_CRIT is one of ''PLOT'', ''LOG'', ''AIC'', ''MDL''')
   disp('       or a real number.')
   return
end

nn=[];

if nargin<2,c='p';end


if c<0|isempty(c),c='p';end
[nl1,nm1]=size(V);
nu=floor((nl1-2)/2);
Nc=V(1,nm1);
if c(1)=='a' | c(1)=='A',alpha=2;end
if c(1)=='m' | c(1)=='M', alpha=log(Nc);end
if norm(c(1)=='mMaApPlL')==0,alpha=c;end
if norm(c(1)=='PpLl')>0,newplot,alpha=0;
        if nu>0,sv=sum(V(2:2+nu,1:nm1-1));else sv=V(2,1:nm1-1);end %Cor 9007
        vv=V(1,1:nm1-1);
        if c(1)=='l' |c(1)=='L', vv=log(vv);end
        kt=((2+2*nu)==nl1);
        if kt==1,subplot(111),else subplot(121),end
        axsv=[min(sv)-1 max(sv)+1];
        plot(sv,vv,'*',axsv,[max(vv) min(vv)],'.')
        xlabel('# of par''s'),
        if c(1)=='l' |c(1)=='L',ylabel('log of loss fcn'),
        else ylabel('loss fcn'),end
        if kt==0,
           subplot(122),
           plot(sv,V(nl1,1:nm1-1),'o',axsv,...
               [min(V(nl1,1:nm1-1)) max(V(nl1,1:nm1-1))],'.')
           xlabel('# of par''s'),ylabel('log of cond''ing #')
        end
        title('Select # of parameters to be estimated in Command Window.')
        if exist('testall')
                pp=-1;
        else
        pp=input('Enter # of parameters to be estimated (''enter'' gives default): ');
        end
        if length(pp)>0 & pp>0,kk=find(sv==pp);
        if length(kk)==0, disp('This number of par''s is not available'),return,end
        [vm,skl]=min(V(1,kk));nn=V(2:2+2*nu,kk(skl))';
        end
end
for kj=1:nm1-1
Vmod(1,kj)=V(1,kj)*(1+(alpha/Nc)*sum(V(2:nu+2,kj)));
end
Vmod(2:nl1,1:nm1-1)=V(2:nl1,1:nm1-1);

Vmod(1,1:nm1-1)=log(Vmod(1,1:nm1-1));
if length(nn)==0,[vm,sel]=min(Vmod(1,1:nm1-1));
nn=V(2:2+2*nu,sel)';end