In the following program for ECS estimation, showing error in line 37. Can you please help me to solve it? Thanks.
clear p, pold, y, x, h, z, zz, delp; let h0 = 60; let h1 = 40; let ph = 0.5; y0 = 720; num = 20; let b = 4.95 -14.22 0.082; let omega = .01 0 0 0 9 .04 0 .04 .0004; omega = .01*omega; call ecs; proc q(x,p); local y; p = x[1]; y = x[2]; z = b[1] + b[2]*p + b[3]*y; retp(z); endp; @====================================@ proc 0= ecs; local del, tcs, g, gf, vh, vy, lam, nety, p0, p1, i, cs, dwl, dpdx, ss, covy, np, ny, nb, nh; clear delp, tcs, vy; del = (h1-h0)/num; h = h0; y = y0; p = ph; pold = p; nh= rows(h); nb= rows(b); i= 1; do until i>num; nety= y-h'ph; zz= h|nety; p= px(zz); delp = p-pold; pold = p; g = gradp(&px,zz); gf = gradp(&pb,b); dpdx = g[.,1:nh]-g[.,nh+1]*pold'; cs = -del'pold-.5*del'dpdx*del+del'ph; ss = gf*omega*gf'; lam = del'g[.,nh+1]; if (h == h0); vy = del'ss*del; covy = zeros(nb,1); else; vy = vy.*(1-lam)^2+del'ss*del.*(3-2*lam)+2*(lam-1)*del'gf*covy; covy = covy - omega*gf'del; endif; tcs = tcs + cs; h = h + del; y = y + cs; i = i + 1; endo; "TCS =" tcs; "stder TCS=" sqrt(vy); endp; proc pv (z,b); local i, g, h, nety, nh, f, pp0; nh = rows(z)-1; h = z[1:nh]; nety = z[nh+1]; p = pold + delp; pp0=p; i=1; do until i>500; x=p|(nety+h'p[1:nh]); f=h-q(x,b); g=gradp(&qx,x); p=p+inv(g[.,1:nh])*f; if abs(p-pp0)<0.000001; retp(p); endif; pp0=p; i=i+1; endo; "not converged"; end; endp; proc px(zz); retp(pv(zz,b)); endp; proc pb(b); retp(pv(zz,b)); endp; proc qx(x); retp(q(x,b)); endp; @======================================@
3 Answers
0
Matrices problems are solved. I used omega[3,3].
But, I am not getting the value of standard error. It only showing zero for all.
Can you please help me to solve this problem?
Thanks
0
I think you might prefer creating matrices in this manner:
omega = { .01 0 0, 0 9 .04, 0 .04 .0004 };
where commas separate rows and spaces separate elements in the row. I think it is a little more clear.
Now to the standard error. We can see that the GAUSS variable being printed as the standard error is:
"stder TCS=" sqrt(vy);
The variable vy is assigned to in only two locations:
vy = vy.*(1-lam)^2+del'ss*del.*(3-2*lam)+2*(lam-1)*del'gf*covy;
and
vy = del'ss*del;
I ran the code using the GAUSS debugger so I could stop on these lines and look at the value of the variables. It turns out that ss is always zero, because the assignment to gf here:
gf = gradp(&pb,b);
is always zero on every iteration. You should look into this.
0
Thank you very much.
I tried to solve it. But, I could not. Do you have any suggestion?
Your Answer
3 Answers
Matrices problems are solved. I used omega[3,3].
But, I am not getting the value of standard error. It only showing zero for all.
Can you please help me to solve this problem?
Thanks
I think you might prefer creating matrices in this manner:
omega = { .01 0 0, 0 9 .04, 0 .04 .0004 };
where commas separate rows and spaces separate elements in the row. I think it is a little more clear.
Now to the standard error. We can see that the GAUSS variable being printed as the standard error is:
"stder TCS=" sqrt(vy);
The variable vy is assigned to in only two locations:
vy = vy.*(1-lam)^2+del'ss*del.*(3-2*lam)+2*(lam-1)*del'gf*covy;
and
vy = del'ss*del;
I ran the code using the GAUSS debugger so I could stop on these lines and look at the value of the variables. It turns out that ss is always zero, because the assignment to gf here:
gf = gradp(&pb,b);
is always zero on every iteration. You should look into this.
Thank you very much.
I tried to solve it. But, I could not. Do you have any suggestion?