Index in position 1 exceeds array bounds (must not exceed 1). FMINCON

1 回表示 (過去 30 日間)
Karim Hasouna
Karim Hasouna 2020 年 8 月 2 日
回答済み: Matt J 2020 年 8 月 2 日
A Garch model with a Vix as a esogenous variable
Yt = dev.std * Epsilon
Epsilon = Normal or student (0,1)
dev.std^2_t = omega + alpha*r_t-1^2 + Beta*dev.std^2_t-1 + lambda*VIX^2_t-1
i coefficienti omega alpha beta e delta si trovano con la maximum likelihood.
il resto è dato.
global y
filename = 'Dati_daily.xlsx';
xlRange = 'A1:L7420';
[num] = xlsread(filename,xlRange);
Dati
CAC40 =num(:,1);
FTSE100 =num(:,2);
DAX =num(:,3);
FTSEMIB =num(:,4);
SP500 =num(:,5);
NASDAQ =num(:,6);
FTSECHINA =num(:,7);
HANGSENG =num(:,8);
TOPIX =num(:,9);
ASX200 =num(:,10);
VIX =num(:,11);
%
returns_CAC40 = diff(log(CAC40));
returns_FTSE100 = diff(log(FTSE100));
returns_DAX = diff(log(DAX));
returns_FTSEMIB = diff(log(FTSEMIB));
returns_SP500 = diff(log(SP500));
returns_NASDAQ = diff(log(NASDAQ));
returns_FTSECHINA = diff(log(FTSECHINA));
returns_HANGSENG = diff(log(HANGSENG));
returns_TOPIX = diff(log(TOPIX));
returns_ASX200 = diff(log(ASX200));
returns_VIX =diff(log(VIX));
y1=returns_CAC40;
y2=returns_FTSE100;
y3=returns_DAX;
y4=returns_FTSEMIB;
y5=returns_SP500;
y6=returns_NASDAQ;
y7=returns_FTSECHINA;
y8=returns_HANGSENG;
y9=returns_TOPIX;
y10=returns_ASX200;
y11=returns_VIX;
% selezione dati singoli
y = y1;
y(isnan(y))=0;
y11(isnan(y11))=0;
% Creazione modello
[T] = size(y,1);
sigma2 = zeros(T,1);
log_likelihood_i = zeros(T,1);
%% function [log_lik] =log_lk_GARCHVIX(theta)
omega = theta(1,1);
alpha = theta(2,1);
beta = theta(3,1);
delta = theta(4,1);
sigma2(1,1) = omega;
log_likelihood_i(1,1) = -0.5 * log(2*pi) - 0.5* log(sigma2(1,1)) - 0.5/sigma2(1,1)*(y(1,1))^2;
for t = 2 : 1 : T
sigma2(t,1) = omega + alpha * y(t-1,1)^2 + beta * sigma2(t-1,1)^2 + delta * y11(t-1,1)^2;
log_likelihood_i(t,1) = -0.5 * log(2*pi) - 0.5* log(sigma2(t,1)) - 0.5/sigma2(t,1)*(y(t,1))^2;
end
log_lik = -sum(log_likelihood_i);
end
%%
theta0 = [2,0.2,0.1,0.4];
lb = [0.000000001;
0
0
0];
ub = [1000000;
0.999999
0.999999
0.999999];
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon('log_lk_GARCHVIX',theta0,[],[],[],[],lb,ub)
THE ERRORS ARE:
Index in position 1 exceeds array bounds (must not exceed 1).
alpha = theta(2,1);
Error in fmincon (line 562)
initVals.f = feval(funfcn{3},X,varargin{:});
Caused by:
Failure in initial objective function evaluation. FMINCON cannot continue.

採用された回答

Matt J
Matt J 2020 年 8 月 2 日
Make theta0 a column vector:
>> theta0 = [2,0.2,0.1,0.4].'
theta0 =
2.0000
0.2000
0.1000
0.4000

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeConditional Variance Models についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by