i'm trying write program in oxmetrics estimates multivariate garch model. multivariate garch model has unconditional covariance matrix (should x variable) input, i'm unsure how correctly specify correct matrix @ each iteration.
my program looks follows now:
//global variable; visible in likelihood function decl x; //likelihood contributions garch_likelihood_contributions(likval_t, par) { //local variables decl covar, lik, h,c,a, i; //parameters c = par[0]; = par[1]; //conditional covariance sequence h = constant(.nan,2,2); h = c*c'+ exp(-a)*h[0][]+a*exp(-a)*x[0][]; h[][0] = 0; //initial value x[][0] = sumc(covar[m])/2071; // not correct specified yet, should sample average of covariance matrices // for(decl i=1; i<columns(x); ++i) { h[0][i] = c*c'+ exp(-a)*h[i-1][]+a*exp(-a)*x[i-1][]; } //likelihood contributions lik = constant(.nan,columns(x),1); lik[0] = 0.5*log(determinant(h[][i-1]))+ 0.5*x[1][]*invert(h[][i-1])*x[1][]'; for(decl i=1;i<2071;++i) { lik[i] = 0.5*log(determinant(h[][i-1])) + 0.5*x[i-1][]*invert(h[][i-1])*x[i-1][]'; // stod x[i+1] } // adfunc[0] = lik; // return !ismissing(adfunc[0]); } decl likval_t; //return vector of likelihood-contributions likval_t[0] = lik; //return success return 1; } //likelihood function garch_likelihood(par, likval, avscore, amhessian) { //local variables decl likval_t; //likelihood contributions garch_likelihood_contributions(&likval_t, par); //return likelihood-value likval[0] = double(sumc(likval_t)); //return success return 1; } main() { //declare variables decl data; decl loglik, par; decl c, a, covar; decl vol, r, s_t, k, p; //load data: data = loadmat("covariances.in7")'; p = data[0][0:]; covar = data[0:1][0:]; x = constant(.nan,2,2); (decl = 0, < columns(p), i+2 ) { j[i] = <0,2;0,2> x[i]= vech(j[i]); } //initial values parameters par = 0.1|0.5; //i.e. (omega, alpha, beta). try out different starting values! //settings likelihood estimation maxcontroleps(1e-6,1e-4); maxcontrol(20000, 1, 1); //maximize likelihood function print("\n\n","maximizing likelihood: \n"); maxbfgs(garch_likelihood, &par, &loglik, 0, 1); print("%r",{"c","a"} ,"%c",{"mle"}, par); println("\nmaximized likelihood: ", loglik); }
inside main, should noticed have tried specify variable x 2x2 matrix each iteration. idea each i, loop should allocate 2 first cloumns , rows datasheet "covariances.in7" x. step loop should 2, such = 1,3,5,7 ect.
please post thoughts, it's appreciated.
best regards,
kristian
i'm aware need write following loop consider every second observation;
x = constant(.nan,2,2); (decl = 0, < columns(p), ++i ) { j[i] = <0,2;0,2> x[i]= vech(j[i]); i=i+1; }
Comments
Post a Comment