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
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
|