Matrix Oxmetrics,作为对数似然函数(GARCH)输入的矩阵

Matrix Oxmetrics,作为对数似然函数(GARCH)输入的矩阵,matrix,Matrix,我正试图用Oxmetrics编写一个程序来估计多元GARCH模型。 我的多元GARCH模型以无条件协方差矩阵(应该是X变量)作为输入,但我不确定如何在每次迭代时正确指定正确的矩阵 目前,我的程序如下所示: //Global variable; visible also in the likelihood function decl X; //Likelihood contributions garch_likelihood_contributions(likval_t, par) {

我正试图用Oxmetrics编写一个程序来估计多元GARCH模型。 我的多元GARCH模型以无条件协方差矩阵(应该是X变量)作为输入,但我不确定如何在每次迭代时正确指定正确的矩阵

目前,我的程序如下所示:

//Global variable; visible also in the 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];
A   = 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 be the    sample average of the 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][]'; // her 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);
 for (decl i = 0, i < columns(P), i+2    )
  {
   j[i] = <0,2;0,2>
   X[i]= vech(j[i]);

   }

//Initial values for parameters
par      = 0.1|0.5;                 //i.e. (omega, alpha, beta).    Try out different starting values!

//Settings for 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);
}
//全局变量;在似然函数中也可见
十二月十日;
//可能性贡献
garch_似然贡献(likval_t,par)
{
//局部变量
decl covar,lik,H,C,A,i;
//参数
C=标准杆[0];
A=标准杆[1];
//条件协方差序列
H=常数(.NaN,2,2);
H=C*C'+exp(-A)*H[0][+A*exp(-A)*X[0][];
H[][0]=0;//初始值
X[][0]=sumc(covar[m])/2071;//尚未正确指定,应为协方差矩阵的样本平均值//

对于(DECL i=1;i我现在意识到我需要写下面的内容来获得我的循环来考虑每一秒的观察;

X          = constant(.NaN,2,2);
for (decl i = 0, i < columns(P), ++i    )
{
j[i] = <0,2;0,2>
X[i]= vech(j[i]);
i=i+1;
}
X=常数(.NaN,2,2);
对于(decl i=0,i<列(P),+i)
{
j[i]=
X[i]=vech(j[i]);
i=i+1;
}