2016-03-26 8 views
0

私は、多変量GARCHモデルを推定Oxmetricsでプログラムを書くことをしようとしています。 私の多変量GARCHモデルは入力として無条件の共分散行列(X変数である必要があります)を持っていますが、各繰り返しで正しい行列を正しく指定する方法は不明です。Oxmetrics、対数尤度関数の入力として行列(GARCH)

私のプログラムは、今のところ、以下のようになります。メインインサイド

//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); 
} 

を、あなたは私が反復ごとに2×2の行列として、変数Xを指定しようとしたことに気づいたはずです。アイデアは、各iについて、ループは、ループのステップ2であるべきであるX. にデータシート「covariances.in7」から2第cloumns及び行を割り当てなければならないということであるよう私その= 1,3,5,7 ect。

自分の考えを投稿してください、それは本当に感謝です。

敬具、

クリスチャン

答えて

0

私は今、私はすべての第2の観察を考慮することが私のループを取得するには次のように記述する必要があることを承知しています。

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; 
} 
関連する問題