⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xtregar.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
		/* 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 + -