You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.5 KiB
Plaintext

*! version 1.21 March 23, 2007 @ 17:05:47
*! Roger Harbord
/*
code based on example in _pred_se.hlp
v1.21 fixed stdxbu
*/
program define metareg_p
version 7
local myopts "STDF U USTAndard XBU STDXBU Hat"
_pred_se "`myopts'" `0' /* handles xp and stdp */
if `s(done)' {
exit
}
local typ `s(typ)'
local varn `s(varn)'
local 0 `"`s(rest)'"'
syntax [if] [in] [, `myopts' noOFFset]
/* concatenate switch options together */
local type "`stdf'`u'`ustandard'`xbu'`stdxbu'`hat'"
/* quickly process default case */
if "`type'"=="" {
di as txt "(option xb assumed; fitted values)"
_predict `typ' `varn' `if' `in', xb `offset'
exit
}
/* mark sample */
marksample touse
if "`type'"=="u" | "`type'"=="xbu" | "`type'" == "ustandard" {
tempvar xb
qui _predict double `xb' if `touse', xb `offset'
}
if "`type'" == "stdf" | "`type'" == "stdxbu" | "`type'" == "ustandard" /*
*/ | "`type'" == "hat" {
tempvar stdp
qui _predict double `stdp' if `touse', stdp `offset'
}
if "`type'" == "u" | "`type'" == "xbu" | "`type'" == "stdxbu" /*
*/ | "`type'" =="ustandard" | "`type'" =="hat" {
tempvar wsvar
if "`e(wsvar)'" !="" {
qui gen `wsvar' = `e(wsvar)' if `touse'
}
else {
qui gen `wsvar' = `e(wsse)'^2 if `touse'
}
}
if "`type'" == "u" | "`type'" == "xbu" | "`type'" == "stdxbu" {
tempvar B /* Bayes shrinkage factor */
qui gen double `B' = e(tau2) / ( e(tau2) + `wsvar' ) if `touse'
}
if "`type'" == "u" {
gen `typ' `varn' = `B' * ( `e(depvar)' - `xb' ) if `touse'
label var `varn' "Predicted random effects"
exit
}
if "`type'" == "xbu" {
gen `typ' `varn' = `B' * `e(depvar)' + (1-`B') * `xb' if `touse'
label var `varn' "Prediction including random effects"
exit
}
if "`type'" == "stdf" {
gen `typ' `varn' = sqrt( `stdp'^2 + e(tau2) ) if `touse'
label var `varn' "S.E. of the forecast"
exit
}
if "`type'" == "stdxbu" {
gen `typ' `varn' = sqrt( `B'^2 * ( `wsvar' + e(tau2) ) ///
+ (1-`B'^2) * `stdp'^2 ) if `touse'
label var `varn' "S.E. of prediction incl. random effects"
exit
}
if "`type'" == "ustandard" {
gen `typ' `varn' = ( `e(depvar)' - `xb' ) / /*
*/ sqrt( `wsvar' + e(tau2) - `stdp'^2 ) if `touse'
label var `varn' "Standardized predicted random effects"
exit
}
if "`type'" == "hat" {
gen `typ' `varn' = `stdp'^2 / ( `wsvar' + e(tau2) ) if `touse'
label var `varn' "Leverage"
exit
}
error 198
end