📄 xtregar.ado
字号:
/* now make mu_i g_i */
tempvar muigi muigi2
gen double `muigi'=`mu'*`g_i'
by `id': gen double `muigi2'=sum(`muigi')
by `id': replace `muigi2'=. if _n<_N
replace `muigi2'=`muigi2'*`muigi2' /* muigi2 is (mu_i'g_i)^2 */
/* now get sigmaw2 */
tempname sigmaw2
replace `muigi2'= `muigi2'/`g_i2s'
sum `muigi2', meanonly
scalar `sigmaw2'=r(sum) /* sigmaw2=hat{sigma}_w^2 */
/* now make sigmae2 */
tempname sigmae2 mui2s nim1s
tempvar mu2 mui2 nim1
gen double `mu2'=`mu'*`mu'
by `id': gen double `mui2'=sum(`mu2')
by `id': replace `mui2'=. if _n<_N
sum `mui2', mean
scalar `mui2s'=r(sum) /* mui2s is sum_i^N (mu_i'mu_i) */
by `id': gen long `nim1'=_n
by `id': replace `nim1'=. if _n<_N
replace `nim1'=`nim1'-1
sum `nim1', mean
scalar `nim1s'=r(sum) /* nim1s is sum_i^N (n_i-1) */
scalar `sigmae2'=(`mui2s'-`sigmaw2')/`nim1s'
/* now make sigmau2 */
tempname N sigmau2
tempvar idc
by `id': gen byte `idc'=(_n==_N)
sum `idc', mean
scalar `N'=r(sum)
scalar `sigmau2'=( `sigmaw2'-`N'*`sigmae2')/`g_i2ss'
/* now make omega_i^2 and thetai */
tempvar omi2 thetai
if `sigef' != 0 {
scalar `sigmae2'=`sigef'
}
if `siguf' != 0 {
scalar `sigmau2'=`siguf'
}
scalar `sigmau2' = max(0,`sigmau2')
gen double `omi2'=`g_i2'*`sigmau2'+`sigmae2'
/* omi2 is constant
over i */
gen double `thetai' = 1-sqrt(`sigmae2'/`omi2')
/* thetai is constant
over i */
sum `thetai', detail
tempname thta_mi thta_5 thta_50 thta_95 thta_ma
scalar `thta_mi'=r(min)
scalar `thta_5'=r(p5)
scalar `thta_50'=r(p50)
scalar `thta_95'=r(p95)
scalar `thta_ma'=r(max)
/* now transform data to y** and x** */
tempvar yigi
foreach x of local varlist {
capture drop `yigi'
gen double `yigi'=`x'*`g_i'
by `id': replace `yigi'=sum(`yigi')
by `id': replace `yigi'=`yigi'[_N]
replace `x'=`x'-`thetai'*`g_i'*(`yigi'/`g_i2')
}
/* now get gls estimates */
qui regress `varlist', nocons
local obs = e(N)
if "`constan'" == "" {
local mnames "`indeps' _cons"
}
else {
local mnames "`indeps'"
}
tempname b V
mat `b'=e(b)
mat colnames `b' = `mnames'
mat `V'=e(V)
mat rownames `V' = `mnames'
mat colnames `V' = `mnames'
tempname df_m r2
scalar `df_m'=e(df_m)
scalar `r2'=e(r2)
tempvar Ti
tempname g_max g_min g_avg Tbar N_g
by `id': gen `Ti'=_N if _n==_N
summ `Ti'
scalar `N_g'=r(N)
scalar `g_max'=r(max)
scalar `g_min'=r(min)
scalar `g_avg'=r(mean)
means `Ti'
scalar `Tbar'=r(mean_h)
restore
estimates post `b' `V', depname(`depname') obs(`obs') /*
*/ esample(`touse')
tempname chi2
if "`indeps'" != "" {
test `indeps'
local chi2t Wald
scalar `chi2'=r(chi2)
}
else {
scalar `chi2'=.
}
est local depvar `depname'
est local ivar `id'
est local chi2type `chi2t'
est local model "re"
est local predict "xtrar_p"
est local dw "`lbi'"
est local tvar "`t'"
est local rhotype "`rhot'"
tempvar xb xbmean depmean
gen byte `touse'=e(sample)
/* obtain R^2 overall */
_predict double `xb' if `touse', xb
corr `xb' `depvar'
est scalar r2_o = r(rho)^2
sort `id' `touse'
/* obtain R^2 between */
by `id' `touse': gen double `xbmean' = /*
*/ cond(_n==_N & `touse', /*
*/ sum(`xb'/_N), .)
by `id' `touse': gen double `depmean' = /*
*/ cond(_n==_N & `touse', /*
*/ sum(`depvar'/_N), .)
corr `xbmean' `depmean'
est scalar r2_b = r(rho)^2
/* obtain R^2 within */
by `id' `touse': replace `xbmean' = `xb'-`xbmean'[_N]
by `id' `touse': replace `depmean'=`depvar'-`depmean'[_N]
corr `xbmean' `depmean'
est scalar r2_w = r(rho)^2
tempname b2
mat `b2'=e(b)
mat colnames `b2' = `indepsn' _cons
est repost b = `b2' , rename
est scalar sigma_u = sqrt(`sigmau2')
est scalar sigma_e = sqrt(`sigmae2')
est scalar rho_fov=`sigmau2'/(`sigmae2'+`sigmau2')
est scalar df_m =`df_m'
est scalar N_g=`N_g'
est scalar g_max=`g_max'
est scalar g_min=`g_min'
est scalar g_avg=`g_avg'
est scalar Tbar =`Tbar'
if `g_max'==`g_min' {
est scalar Tcon=1
}
else {
est scalar Tcon=0
}
est scalar chi2=`chi2'
est scalar thta_min=`thta_mi'
est scalar thta_5=`thta_5'
est scalar thta_50=`thta_50'
est scalar thta_95=`thta_95'
est scalar thta_max=`thta_ma'
est scalar rho_ar =`rho'
est local cmd "xtregar"
}
DispRE `level'
end
program define demean
syntax varlist, i(varname)
tempvar mean
foreach x of local varlist {
capture drop `mean'
qui by `i': gen double `mean'=sum(`x')
qui by `i': replace `mean'=`mean'[_N]/_N
qui replace `x'=`x'-`mean'
}
end
program define fevars
syntax varlist [aw fw], i(varname)
tempvar imean mean N Ti temp notmiss
foreach x of local varlist {
recast double `x'
capture drop `imean' `mean' `Ti' `temp' `notmiss'
qui sum `x' [`weight'`exp']
qui gen double `mean'=r(mean)
qui gen byte `notmiss'=(`x'<.)
/*
gen `temp'=1 if `notmiss'
gen `N'=sum(`temp')
replace `N'=`N'[_N]
gen double `mean'=sum(`x')
replace `mean'=`mean'[_N]/`N'
drop `temp'
*/
gen `temp'=1 if `notmiss'
qui by `i': gen `Ti'=sum(`temp')
qui by `i': replace `Ti'=`Ti'[_N]
qui by `i': gen double `imean'=sum(`x')
qui by `i': replace `imean'=`imean'[_N]/`Ti'
qui replace `x'=`x'+`mean'-`imean'
qui replace `x'=. if `notmiss'!=1
}
end
program define rtparse, rclass
syntax , [ RHOF(real -2) ONEstep REGress FREG TSCorr DW THeil /*
*/ NAGar]
tempname cnt
scalar `cnt'=0
if "`regress'" != "" { scalar `cnt' = `cnt'+ 1}
if "`onestep'" != "" { scalar `cnt' = `cnt' +1}
if "`freg'" != "" { scalar `cnt' = `cnt'+1}
if "`tscorr'" != "" { scalar `cnt' = `cnt'+1}
if "`dw'" != "" { scalar `cnt' = `cnt'+1}
if "`theil'" != "" { scalar `cnt' = `cnt'+1}
if "`nagar'" != "" { scalar `cnt' = `cnt'+1}
local rtype "`regress'`onestep'`freg'`dw'`theil'`nagar'`tscorr'"
if `cnt' > 1 {
di as err "Only one rhotype may be specified."
error 198
}
if `cnt' >0 & `rhof' != -2 {
di as err "rho cannot be fixed and estimated, specify " \*
*/ "rhotype( ) or rhof(), not both "
error 198
}
if "`rtype'"=="" & `rhof'==-2 {
local rtype "dw"
}
return local type "`rtype'"
return scalar rho_f=`rhof'
end
program define DispFE
args level
if "`e(dw)'" != "" & "`e(LBI)'"=="" {
lbi2
}
local dft = e(N) - 1
local dfe = `dft' - e(df_m)
local mse = e(rss)/`dfe'
local p = fprob(e(df_b),`dfe',e(F))
#delimit ;
di _n as txt "FE (within) regression with AR(1) disturbances"
_col(49) as txt "Number of obs" _col(68) "="
_col(70) as res %9.0f e(N) ;
di as txt "Group variable (i): " as res "`e(ivar)'" as txt
_col(49) "Number of groups" _col(68) "="
_col(70) as res %9.0g e(N_g) _n ;
di as txt "R-sq: within = " as res %6.4f e(r2_w)
_col(49) as txt "Obs per group: min" _col(68) "="
_col(70) as res %9.0g e(g_min) ;
di as txt " between = " as res %6.4f e(r2_b)
_col(64) as txt "avg" _col(68) "="
_col(70) as res %9.1f e(g_avg) ;
di as txt " overall = " as res %6.4f e(r2_o)
_col(64) as txt "max" _col(68) "="
_col(70) as res %9.0g e(g_max) _n ;
di as txt _col(49) "F(" as res e(df_b) as txt "," as res `dfe'
as txt ")" _col(68) "=" _col(70) as res %9.2f e(F) ;
di as txt "corr(u_i, Xb)" _col(16) "= " as res %6.4f e(corr)
as txt _col(49) "Prob > F" _col(68) "="
_col(73) as res %6.4f `p' _n ;
#delimit cr
est di, level(`level') plus
di in smcl as txt " rho_ar {c |} " as res %10.0g e(rho_ar)
di in smcl as txt " sigma_u {c |} " as res %10.0g e(sigma_u)
di in smcl as txt " sigma_e {c |} " as res %10.0g e(sigma_e)
di in smcl as txt " rho_fov {c |} " as res %10.0g e(rho_fov) /*
*/ as txt " (fraction of variance due to u_i)"
di in smcl as txt "{hline 13}{c BT}{hline 64}"
#delimit ;
di as txt "F test that all u_i=0: "
"F(" as res e(df_a) as txt "," as res e(df_r) as txt ") = "
as res %8.2f e(F_f) _col(62) as txt "Prob > F = "
as res %6.4f fprob(e(df_a),e(df_r),e(F_f)) ;
#delimit cr
if "`e(dw)'" != "" {
di as txt "modified Bhargava et al. Durbin-Watson = "/*
*/ as res e(d1)
di as txt "Baltagi-Wu LBI = " as res e(LBI)
}
end
/* this program computes fixed effect residuals */
program define fe_res
syntax varlist, res(string) i(varname)
tempvar xb u
_predict double `xb'
MkUi `varlist' , new(`u') i(`i')
tokenize `varlist'
gen double `res'=`1'-`xb'-`u'
end
program define DispRE
args level
if "`e(dw)'" != "" & "`e(LBI)'"=="" {
lbi2
}
#delimit ;
di _n as txt "RE GLS regression with AR(1) disturbances"
_col(49) as txt "Number of obs" _col(68) "="
_col(70) as res %9.0f e(N) ;
di as txt "Group variable (i): " as res "`e(ivar)'" as txt
_col(49) "Number of groups" _col(68) "="
_col(70) as res %9.0g e(N_g) _n ;
di as txt "R-sq: within = " as res %6.4f e(r2_w)
_col(49) as txt "Obs per group: min" _col(68) "="
_col(70) as res %9.0g e(g_min) ;
di as txt " between = " as res %6.4f e(r2_b)
_col(64) as txt "avg" _col(68) "="
_col(70) as res %9.1f e(g_avg) ;
di as txt " overall = " as res %6.4f e(r2_o)
_col(64) as txt "max" _col(68) "="
_col(70) as res %9.0g e(g_max) _n ;
di as txt _col(49) "`e(chi2type)' chi2("
as res e(df_m) as txt ")" _col(68) "="
_col(70) as res %9.2f e(chi2) ;
di as txt "corr(u_i, Xb)" _col(20) "= " as res "0"
as txt " (assumed)" _col(49) "Prob > chi2" _col(68) "="
_col(73) as res %6.4f 1-chi2(e(df_m),e(chi2)) ;
#delimit cr
if e(Tcon)==0 {
di in smcl as txt _n "{hline 19} theta {hline 20}"
di as txt " min 5% median 95%" /*
*/ " max"
di as res %6.4f e(thta_min) %9.4f e(thta_5) /*
*/ %11.4f e(thta_50) %11.4f e(thta_95) /*
*/ %9.4f e(thta_max)
}
display
est di, level(`level') plus
di in smcl as txt " rho_ar {c |} " as res %10.0g e(rho_ar) /*
*/ as txt " (estimated autocorrelation coefficient)"
di in smcl as txt " sigma_u {c |} " as res %10.0g e(sigma_u)
di in smcl as txt " sigma_e {c |} " as res %10.0g e(sigma_e)
di in smcl as txt " rho_fov {c |} " as res %10.0g e(rho_fov) /*
*/ as txt " (fraction of variance due to u_i)"
if e(Tcon)==1 {
di in smcl as txt " theta {c |} " as res %10.0g e(thta_min)
}
di in smcl as txt "{hline 13}{c BT}{hline 64}"
if "`e(dw)'" != "" {
di as txt "modified Bhargava et al. Durbin-Watson = "/*
*/ as res e(d1)
di as txt "Baltagi-Wu LBI = " as res e(LBI)
}
end
program define lbi2, eclass
sort `e(ivar)' `e(tvar)'
tempname touse
qui gen byte `touse'=e(sample)
tempname b
mat `b'=e(b)
local names : colnames `b'
local names : subinstr local names "_cons" ""
local vars "`e(depvar)' `names'"
tsrevar `vars', substitute
local vars "`r(varlist)'"
lbiw2 `vars', id(`e(ivar)') t(`e(tvar)') touse(`touse')
end
program define lbiw2, eclass
syntax varlist, id(varname) t(varname) touse(varname)
tempvar zres zresLD Itj zres2I zres2 first last bhvar Itjf
tempname d d1 d2 d3 d4 Szres2 bhstat NT xtest
qui {
est hold `xtest'
sort `id' `t'
preserve
keep if `touse'
demean `varlist', i(`id')
tokenize `varlist'
local depvar "`1'"
macro shift
_rmcoll `*'
local varlist "`depvar' `r(varlist)'"
tokenize `varlist'
macro shift
local indeps "`*'"
tsset `id' `t'
regress `varlist'
scalar `NT'=e(N)
predict double `zres', res
by `id': gen byte `Itj'=(`t'-`t'[_n-1]==1)
by `id': gen byte `Itjf'=(`t'[_n+1]-`t'==1)
by `id': gen double `zresLD'=(`zres'-`zres'[_n-1]*`Itj')^2
by `id': gen double `bhvar'=(`zres'-`zres'[_n-1])^2
gen double `zres2'=`zres'^2
gen double `zres2I'=`zres2'*(1-`Itjf')
by `id': replace `zres2I'=. if _n==_N
sum `zres2', meanonly
scalar `Szres2'=r(sum)
sum `bhvar', meanonly
scalar `bhstat'=r(sum)
scalar `bhstat'=`bhstat'/`Szres2'
sum `zresLD', meanonly
scalar `d1'=r(sum)
scalar `d1'=`d1'/`Szres2'
sum `zres2I', meanonly
scalar `d2'=r(sum)
scalar `d2'=`d2'/`Szres2'
by `id': gen byte `first'=(_n==1)
by `id': gen byte `last'=(_n==_N)
sum `zres2' if `first'==1
scalar `d3'=r(sum)
scalar `d3'=`d3'/`Szres2'
sum `zres2' if `last'==1
scalar `d4'=r(sum)
scalar `d4'=`d4'/`Szres2'
scalar `d'=`d1'+`d2'+`d3'+`d4'
restore
est unhold `xtest'
est scalar d1=`d1'
est scalar LBI=`d'
est scalar N_LBI=`NT'
}
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -