RT:matlab做copula,运行fitmodel老出错。
老是提示:
??? Input argument "solver" is undefined.
Error in ==> fitModel at 39
switch solver
fitmodel代码如下:
if nargin == 2
solver = 'fmincon';
end
switch solver
case 'fmincon'
% create starting values
if isfield(spec,'comment')==1
theta0 = spec.ctheta0;
else
theta0 = InputStartingValues(spec);
end
pause(.1);
% create constraints + bounds matrices for fmincon
[A, B, lower, upper] = CreateFminconConstraints(spec);
%define optimization specifications
options = optimset('Algorithm','interior-point','Display','iter','Hessian','bfgs','MaxFunEvals',12000);
options = optimset(options,'FinDiffType','central','MaxIter',1500,'TolCon',10^-12,'TolFun',10^-5,'TolX',10^-5);
case 'fminunc'
%define optimization specifications
options = optimset('Algorithm','interior-point','Display','iter','MaxFunEvals',9000,'MaxIter',1000,'TolCon',10^-12,'TolFun',10^-4,'TolX',10^-5,'FinDiffType','central');
% invoke optimization procedure
end
purp = spec.purpose;
switch purp
case 'fitGARCH'
T = size(data,1); n = spec.size; m = spec.vecsize;
parameters=zeros(m,n);
LogL = zeros(1,n);
exitflag = zeros(1,n);
evalmodel = cell(1,n);
GradHess = cell(1,n);
udata = zeros(size(data));
for i=1:n
tic;
if strcmp(solver,'fmincon')==1
[parameters(:,i), LogL(i),exitflag(i),output,lambda,grad,hessian]= fmincon('GARCHLogL',theta0,A,B,[],[],lower,upper,[],options,data(:,i),spec,solver);
yz = menu('calculate asymptotic standard errors?','yes','no');
pause(.1)
if yz == 1
[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('GARCHLogL', parameters(:,i), data(:,i), grad,hessian,spec,solver);
else
derivatives.grad = grad;
derivatives.hessian = hessian;
end
else
% create starting values
theta0 = InputStartingValues(spec);
pause(.1);
% make theta0 unconstrained
theta0 = RescaleParameters(theta0, 2, spec);
[params, LogL(i),exitflag(i),output,grad,hessian]= fminunc('GARCHLogL',theta0,options,data(:,i),spec,solver);
parameters(:,i)=RescaleParameters(params,1,spec);
yz = menu('calculate asymptotic standard errors?','yes','no');
pause(.1)
if yz == 1
[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('GARCHLogL', parameters(:,i), data(:,i), grad, hessian, spec, solver);
else
derivatives.grad = grad;
derivatives.hessian = hessian;
RobStE = [];
end
end
if yz == 1
derivatives.grad = grad;
derivatives.hessian = hessian;
GradHess{1,i}=derivatives;
else
GradHess{1,i}=derivatives;
end
[AIC,BIC] = aicbic(-LogL(i),m,T);
output.AIC = AIC;
output.BIC = BIC;
output.LogL = -LogL(i);
evalmodel{1,i} = output;
[dum, dum, dum, dum, udata(:,i)]=GARCHLogL(parameters(:,i),data(:,i),spec,'fmincon');
output.TimeInSeconds = toc;
DisplayResults(parameters(:,i),RobStE,output)
if i
fprintf(1,'Press any key to continue\n\n')
pause
end
end
varargout{1} = udata;
case 'fitCopula'
tic
T = size(data,1); m = size(spec.ctheta0,1);
if strcmp(solver,'fmincon')==1
[parameters, LogL,exitflag,output,lambda,grad,hessian]= fmincon('CopulaLogL',theta0,A,B,[],[],lower,upper,[],options,data,spec,solver);
[dum,dum,Rt]=CopulaLogL(parameters,data,spec, 'fmincon');
if isfield(spec,'comment')==1
yz = 0;
else
yz = menu('calculate asymptotic standard errors?','yes','no');
end
pause(.1)
if yz == 1
[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('CopulaLogL', parameters, data, grad, hessian, spec, 'fmincon');
else
derivatives.grad = grad;
derivatives.hessian = hessian;
RobStE = [];
end
else
% create starting values
theta0 = InputStartingValues(spec);
pause(.1);
% make theta0 unconstrained
theta0 = RescaleParameters(theta0, 2, spec);
[params, LogL,exitflag,output,grad,hessian]= fminunc('CopulaLogL',theta0,options,data,spec,solver);
parameters=RescaleParameters(params,1,spec);
[dum,dum,Rt]=CopulaLogL(parameters,data,spec, 'fmincon');
yz = menu('calculate asymptotic standard errors?','yes','no');
pause(.1)
if yz == 1
[derivatives, RobVCV, VCV, hessian, RobStE]=CalcStErrors('CopulaLogL', parameters, data, grad, hessian, spec, 'fminunc');
else
derivatives.grad = grad;
derivatives.hessian = hessian;
RobStE = [];
end
end
求大神高手指导,感激不尽!