The Curvefit application works great. A notation in the Curvefit documentation bothers me, and I think is misleading. The Global Output _cv_InfoMatrix is said to be the cross product of the first derivatives. It refers to Section 3.2.1. At the top of page 3-27 it says G'G is stored in the matrix. However it contains the inverse of cov, the returned covariance matrix of the coefficients, as the following example illustrates.
new; cls; // simulated example 1 in Nonlinear Statistical Methods by Ronald Gallant, 1987 output file=curvefit_typo.out reset; library cvfit; #include cvfit.ext CurveFitSet; n = 500; parm0 = {0,1,-1,-0.5}; sig20 = 0.001; state1 = 75551107; state2 = 85121119; state3 = 29959447; { x1,state1 } = rndu(n,1,state1); x1 = (x1 .>= 0.5); x2 = ones(n,1); { x3,state2 } = rndu(n,1,state2); x = x1~x2~x3; { epsilon, state3 } = rndn(n, 1, state3); y = parm0[1]*x1 + parm0[2]*x2 + parm0[4]*exp(parm0[3].*x3) + sqrt(sig20).*epsilon; CurveFitClr; {b,sighat2,g,V,retcode}=curvefit("", y, x, &xm1_gallant, parm0); _cv_GradProc=&grad_uc; ""; "V"; V; info = _cv_InfoMatrix; invinfo = invpd(info); ""; "inv(_cv_InfoMatrix)"; invinfo; gmat = grad_uc(b, x); cov = sighat2.*invpd(gmat'gmat); ""; "inv(cov)"; cov; proc (1) = xm1_gallant(b, x); retp(b[1]*x[.,1] + b[2]*x[.,2] + b[4]*exp(b[3].*x[.,3])); endp; proc (1) = grad_uc(b, x); local g; g = x[.,1]~x[.,2]~(b[4] .* x[.,3] .* exp(b[3].*x[.,3]))~(exp(b[3].*x[.,3])); retp(g); endp; end;
With output
V 8.0948379e-06 -3.6844297e-08 9.8550578e-06 -3.6474411e-06 -3.6844297e-08 0.0021533593 0.0057820503 -0.0020045045 9.8550578e-06 0.0057820503 0.015751500 -0.0053465465 -3.6474411e-06 -0.0020045045 -0.0053465465 0.0018797061 inv(_cv_InfoMatrix) 8.0948379e-06 -3.6844297e-08 9.8550578e-06 -3.6474411e-06 -3.6844297e-08 0.0021533593 0.0057820503 -0.0020045045 9.8550578e-06 0.0057820503 0.015751500 -0.0053465465 -3.6474411e-06 -0.0020045045 -0.0053465465 0.0018797061 inv(cov) 8.0948466e-06 -3.6840840e-08 9.8550726e-06 -3.6474462e-06 -3.6840840e-08 0.0021533594 0.0057820504 -0.0020045045 9.8550726e-06 0.0057820504 0.015751500 -0.0053465466 -3.6474462e-06 -0.0020045045 -0.0053465466 0.0018797062