*! v 1.1 26Oct2004
*! Roger Harbord
/*
log-likelihood evaluator (method d0) for metareg v2.
Estimates tau2 by REML.
Variables :
$ML_y1 holds the y-vector of study estimates,
$ML_y2 holds the within-study variances
$REML_x holds the covariates
$REML_nocons is flag "" or "noconstant"
*/

program define metareg_ll
version 7
	args todo b lnf
	tempvar  lnfj v r
	tempname  R tau2 
	mleval `tau2' = `b', scalar
	quietly {
		gen double `v' = $ML_y2 +`tau2' /* v_i = sigma_i^2 + tau^2 */
		capture regress $ML_y1 $REML_x [iw=1/`v'] if $ML_samp, $REML_nocons
		if _rc == 0 {
			predict double `r' if $ML_samp, resid 
			gen double `lnfj' =  `r'^2/`v' +log(`v')
			mlsum `lnf' = `lnfj'
			matrix accum R = $REML_x [iw=1/`v'] if $ML_samp, $REML_nocons
			/* R = X'V^-1X is reml correction to -2logL */
			scalar `lnf' = -0.5 * ( `lnf' +log( det(R) ) )
			}
		else {
			scalar `lnf' = .
			}
		}
	
end