Global Index (short | long) | Local contents | Local Index (short | long)
[nn,Vmod]=selstruc(V,c)
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.
This function calls | This function is called by |
---|---|
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