HI there
3 Answers
0
The covariance matrix is computed only at the end of iterations, so this is what I suggest: set the MaxIters member of the cmlmtControl structure to some limited amount, five say, then print (or save) the covariance matrix, the covPar member of the cmlmtResults structure. Also save the estimates, the Par member of the cmlmtResults structure and use as start values for another run. This could be put in a loop and you could print every fifth covariance matrix of the parameters up to convergence.
library cmlmt; y = // endogenous data x = // exogenous data struct PV p0; po = pvPack(pvcreate,@starting point@,"b"); proc fct(p0,y,x,ind); ...... likelihood calculation endp; struct cmlmtControl c0; c0.maxiters = 5; convergence = 1; do until convergence == 0; struct cmlmtResults = out; out = cmlmt(&fct,p0,y,x,c0); print out.covpar; p0 = out.par; convergence = out.retcode; endo;
0
Hi Mr Ron Schoenberg
Thank you for answering my question. Unfortunately again errors which already happened, still remain and I can not solve it. if it is possible, I send you code and data. and guide me how I solve this dilemma
I write code here but for data please send me your Email address.
// Libraries library cmlmt,pgraph; // Data x=xlsreadm("datafilename","a1:b100",1,0); y=x-meanc(x)'; n=rows(y); k=cols(y); struct DS d0; d0=dsCreate; d0.DataMatrix=y; // Declarations varred=vcx(y); epsilon=y'; avec=zeros(k,n); lnvar=zeros(k,n); lnvar[.,1]=ln(diag(varred)); var=diagrv(eye(k),exp(lnvar[.,1])); ind=1|1|1; // Parameters struct PV p; a12=0; b12=0; b122=0; b123=0; a21=0; b21=0; b212=0; b213=0; A=1~avec[1,1]|avec[2,1]~1; g=eye(k)*0.95; d=eye(k)*0.15; f=eye(k)*(-0.09); c=lnvar[.,1].*(1-diag(g)); uncs=A*varred*A'; rho=uncs[1,2]/sqrt(uncs[1,1]*uncs[2,2]); p=pvPack(pvCreate,a12,"a12"); p=pvPack(p,b12,"b12"); p=pvPack(p,b122,"b122"); p=pvPack(p,b123,"b123"); p=pvPack(p,a21,"a21"); p=pvPack(p,b21,"b21"); p=pvPack(p,b212,"b212"); p=pvPack(p,b213,"b213"); p=pvPack(p,c,"c"); p=pvPack(p,g,"g"); p=pvPack(p,d,"d"); p=pvPack(p,f,"f"); p=pvPack(p,rho,"rho"); // Algorithm settings struct cmlmtControl c0; c0=cmlmtControlCreate; c0.Algorithm=4; c0.LineSearch=4; c0.CovParType=2; c0.printIters=1; c0.DirTol=0.0001; //c0.TrustRadius=0.001; //c0.Switch=1|10000000|0; //c0.Switch={3 1, 0.1 0.1, 1 1, .001 .001}; // Start likelihood procedure proc likproc(struct PV p, struct DS d0, ind); // Declarations local i,llik,a12,b12,a21,b21,c,g,d,f,A,trans,b122,b123,b212,b213,rho; llik=zeros(n,1); A=1~avec[1,1]|avec[2,1]~1; a12=pvUnpack(p,"a12"); b12=pvUnpack(p,"b12"); b122=pvUnpack(p,"b122"); b123=pvUnpack(p,"b123"); a21=pvUnpack(p,"a21"); b21=pvUnpack(p,"b21"); b212=pvUnpack(p,"b212"); b213=pvUnpack(p,"b213"); c=pvUnpack(p,"c"); g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); rho=pvUnpack(p,"rho"); y=d0.DataMatrix; // Loop of likelihood for each observation i=2; do while i<=n; // EGARCH for structural conditional variance process lnvar[.,i]=c+g*lnvar[.,i-1]+d*(abs(epsilon[.,i-1]./sqrt(exp(lnvar[.,i-1])))-sqrt(2/pi))+f*(epsilon[.,i-1]./sqrt(exp(lnvar[.,i-1]))); // Transition variable = demeaned sqrt-variance trans=sqrt(exp(lnvar[.,i])); //-sqrt(exp(c./(1-diag(g)))); // Linear Variance Spillover vs. Taylor vs. Smooth Transition avec[.,i]=a12+b12*trans[2]|a21+b21*trans[1]; //avec[.,i]=a12+b12*trans[2]+b122*trans[2]^2+b123*trans[2]^3|a21+b21*trans[1]+b212*trans[1]^2+b213*trans[1]^3; // Structural coefficients matrix at time i A=1~avec[1,i]|avec[2,i]~1; // Structural Shocks epsilon[.,i]=A*y[i,.]'; // Log-Likelihood var=(1~rho*sqrt(exp(lnvar[1,i]+lnvar[2,i]))/exp(lnvar[2,i])|rho*sqrt(exp(lnvar[1,i]+lnvar[2,i]))/exp(lnvar[1,i])~1)*diagrv(eye(k),exp(lnvar[.,i])); llik[i]=-0.5*(k*ln(2*pi)+ln(det(var))-2*ln(det(A))+y[i,.]*(A'*inv(var)*A)*y[i,.]'); i=i+1; endo; struct modelResults mm; mm.Function=llik; retp(mm); endp; // Inequality restrictions proc ineqp(struct PV p, struct DS d0); local g,d,f; g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); retp(1-g[1,1]|1-g[2,2]|d[1,1]|d[2,2]); endp; c0.IneqProc=&ineqp; // Equality restrictions ... restrict spillover from 1 to 2 (1 to source) to zero proc eqp(struct PV p, struct DS d0); local g,d,f,b12,b122,b123,b21,b212,b213; b21=pvUnpack(p,"b21"); b212=pvUnpack(p,"b212"); b213=pvUnpack(p,"b213"); b12=pvUnpack(p,"b12"); b122=pvUnpack(p,"b122"); b123=pvUnpack(p,"b123"); g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); retp(b212|b213|b122|b123); // adjust to desired rstrictions endp; //c0.eqProc=&eqp; // uncomment for activating equality restrictions // Output struct cmlmtResults res; res=cmlmt(&likproc,p,d0,c0); cmlmtprt(res);
0
If I want to get covariance matrix after some certain amount of iteration even if cmlmt doesn't get normal convergence. for example, after 100 iterations I want to print out the covpar member of the cmlmtResults structure .
please help me
Your Answer
3 Answers
The covariance matrix is computed only at the end of iterations, so this is what I suggest: set the MaxIters member of the cmlmtControl structure to some limited amount, five say, then print (or save) the covariance matrix, the covPar member of the cmlmtResults structure. Also save the estimates, the Par member of the cmlmtResults structure and use as start values for another run. This could be put in a loop and you could print every fifth covariance matrix of the parameters up to convergence.
library cmlmt; y = // endogenous data x = // exogenous data struct PV p0; po = pvPack(pvcreate,@starting point@,"b"); proc fct(p0,y,x,ind); ...... likelihood calculation endp; struct cmlmtControl c0; c0.maxiters = 5; convergence = 1; do until convergence == 0; struct cmlmtResults = out; out = cmlmt(&fct,p0,y,x,c0); print out.covpar; p0 = out.par; convergence = out.retcode; endo;
Hi Mr Ron Schoenberg
Thank you for answering my question. Unfortunately again errors which already happened, still remain and I can not solve it. if it is possible, I send you code and data. and guide me how I solve this dilemma
I write code here but for data please send me your Email address.
// Libraries library cmlmt,pgraph; // Data x=xlsreadm("datafilename","a1:b100",1,0); y=x-meanc(x)'; n=rows(y); k=cols(y); struct DS d0; d0=dsCreate; d0.DataMatrix=y; // Declarations varred=vcx(y); epsilon=y'; avec=zeros(k,n); lnvar=zeros(k,n); lnvar[.,1]=ln(diag(varred)); var=diagrv(eye(k),exp(lnvar[.,1])); ind=1|1|1; // Parameters struct PV p; a12=0; b12=0; b122=0; b123=0; a21=0; b21=0; b212=0; b213=0; A=1~avec[1,1]|avec[2,1]~1; g=eye(k)*0.95; d=eye(k)*0.15; f=eye(k)*(-0.09); c=lnvar[.,1].*(1-diag(g)); uncs=A*varred*A'; rho=uncs[1,2]/sqrt(uncs[1,1]*uncs[2,2]); p=pvPack(pvCreate,a12,"a12"); p=pvPack(p,b12,"b12"); p=pvPack(p,b122,"b122"); p=pvPack(p,b123,"b123"); p=pvPack(p,a21,"a21"); p=pvPack(p,b21,"b21"); p=pvPack(p,b212,"b212"); p=pvPack(p,b213,"b213"); p=pvPack(p,c,"c"); p=pvPack(p,g,"g"); p=pvPack(p,d,"d"); p=pvPack(p,f,"f"); p=pvPack(p,rho,"rho"); // Algorithm settings struct cmlmtControl c0; c0=cmlmtControlCreate; c0.Algorithm=4; c0.LineSearch=4; c0.CovParType=2; c0.printIters=1; c0.DirTol=0.0001; //c0.TrustRadius=0.001; //c0.Switch=1|10000000|0; //c0.Switch={3 1, 0.1 0.1, 1 1, .001 .001}; // Start likelihood procedure proc likproc(struct PV p, struct DS d0, ind); // Declarations local i,llik,a12,b12,a21,b21,c,g,d,f,A,trans,b122,b123,b212,b213,rho; llik=zeros(n,1); A=1~avec[1,1]|avec[2,1]~1; a12=pvUnpack(p,"a12"); b12=pvUnpack(p,"b12"); b122=pvUnpack(p,"b122"); b123=pvUnpack(p,"b123"); a21=pvUnpack(p,"a21"); b21=pvUnpack(p,"b21"); b212=pvUnpack(p,"b212"); b213=pvUnpack(p,"b213"); c=pvUnpack(p,"c"); g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); rho=pvUnpack(p,"rho"); y=d0.DataMatrix; // Loop of likelihood for each observation i=2; do while i<=n; // EGARCH for structural conditional variance process lnvar[.,i]=c+g*lnvar[.,i-1]+d*(abs(epsilon[.,i-1]./sqrt(exp(lnvar[.,i-1])))-sqrt(2/pi))+f*(epsilon[.,i-1]./sqrt(exp(lnvar[.,i-1]))); // Transition variable = demeaned sqrt-variance trans=sqrt(exp(lnvar[.,i])); //-sqrt(exp(c./(1-diag(g)))); // Linear Variance Spillover vs. Taylor vs. Smooth Transition avec[.,i]=a12+b12*trans[2]|a21+b21*trans[1]; //avec[.,i]=a12+b12*trans[2]+b122*trans[2]^2+b123*trans[2]^3|a21+b21*trans[1]+b212*trans[1]^2+b213*trans[1]^3; // Structural coefficients matrix at time i A=1~avec[1,i]|avec[2,i]~1; // Structural Shocks epsilon[.,i]=A*y[i,.]'; // Log-Likelihood var=(1~rho*sqrt(exp(lnvar[1,i]+lnvar[2,i]))/exp(lnvar[2,i])|rho*sqrt(exp(lnvar[1,i]+lnvar[2,i]))/exp(lnvar[1,i])~1)*diagrv(eye(k),exp(lnvar[.,i])); llik[i]=-0.5*(k*ln(2*pi)+ln(det(var))-2*ln(det(A))+y[i,.]*(A'*inv(var)*A)*y[i,.]'); i=i+1; endo; struct modelResults mm; mm.Function=llik; retp(mm); endp; // Inequality restrictions proc ineqp(struct PV p, struct DS d0); local g,d,f; g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); retp(1-g[1,1]|1-g[2,2]|d[1,1]|d[2,2]); endp; c0.IneqProc=&ineqp; // Equality restrictions ... restrict spillover from 1 to 2 (1 to source) to zero proc eqp(struct PV p, struct DS d0); local g,d,f,b12,b122,b123,b21,b212,b213; b21=pvUnpack(p,"b21"); b212=pvUnpack(p,"b212"); b213=pvUnpack(p,"b213"); b12=pvUnpack(p,"b12"); b122=pvUnpack(p,"b122"); b123=pvUnpack(p,"b123"); g=pvUnpack(p,"g"); d=pvUnpack(p,"d"); f=pvUnpack(p,"f"); retp(b212|b213|b122|b123); // adjust to desired rstrictions endp; //c0.eqProc=&eqp; // uncomment for activating equality restrictions // Output struct cmlmtResults res; res=cmlmt(&likproc,p,d0,c0); cmlmtprt(res);
If I want to get covariance matrix after some certain amount of iteration even if cmlmt doesn't get normal convergence. for example, after 100 iterations I want to print out the covpar member of the cmlmtResults structure .
please help me