/* new way of calculating b's. using only covariance matrix */ /* tested against current way, gives same answer to 3d decimal place. investigate numerical stability against current qr method */ /* WHy same answer to W=I, not same answer after 2nd stage GMM? */ w11 = w[1,1]; w12 = w[1,2:cols(w)]; w21 = w[2:rows(w),1]; w22 = w[2:rows(w), 2:cols(w)]; f = _factors[.,2:cols(_factors)]; r = _allr[.,2:cols(_allr)]; rbar = meanc(r); covs = 1/T*(f-meanc(f)')'(r - rbar'); invtrm = inv(covs*w22*covs'); b0str = w11 + rbar'w21 - (w12 + rbar'w22)*covs'*invtrm*covs*w21; b0str = b0str/(w11 + w12*rbar + rbar'w21 + rbar'w22*rbar - (w12 + rbar'w22)*covs'*invtrm*covs*(w22*rbar + w21) ); b1 = invtrm*covs*(w21 - (w22*rbar + w21)*b0str); b0 = b0str - meanc(f)'b1; /* old b */ bcov = 1/T*(_factors)'(_allr); bbig = inv(bcov*W*bcov')*bcov*W*_price; b0~b1'; b';bbig';