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

📄 xtabond.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 3 页
字号:
		qui gen double `res2'=`res'^2
		qui summ `res2' if `touses'
		scalar `sig'=r(sum)
		local NT =r(N)

		scalar `sig'=`sig'/(`NT'-`k')

		mat colnames `V'=`names'
		mat rownames `V'=`names'
		mat `b'=e(b)

		tempname b_2 V_2
		mat `b_2' = `b'
		mat `V_2' = `V'

	}

	local df=`NT'-`k'

	tempvar touse3 t2b
	qui gen long `t2b'=`t'-`tmin'+1
	mark `touse3' if `t2b'>`q'
	local namesf2 : subinstr local namesf "_cons" ""
	markout `touse3' `namesf2' 
	
	tempname b1 V1
	mat `b1' = `b'
	mat `V1' = `V'

	tempname v4
	mat `v4' = .5*(`V1'' + `V1' )

	if mreldif(`v4', `V1') > 1e-5 {
		di as err "robust VCE not symetric"
		exit 198
	}	

	mat `V1'=`v4'
	mat `V'=`v4'

	est post `b1' `V1'
	est scalar sig=`sig'
	est scalar N_g=`id2max_t'

	
/* calculate AR statistics */	
	

	tempvar xb res wi lsqr
	tempname d0 
	qui _predict double `xb', xb
	qui gen double `res'=D.`depvar'-`xb'  if `touse'

	qui replace `res'=0 if `res'>=.

	tempname ZHW WW d1 d2m d3m d2 d3 ZV sargan wHw wHws 
	tempname hwname wtname

	_xtzv `res', zvname(`ZV') ivar(`abid') 			/*	
  		*/ imax(`id2max') tvar(`t2') tmin(`t2min')	/*
  		*/ tmax(`t2max') lags(`lags') touse(`l2touse') 	/*	
 		*/ zivars(zivars) timac(timac) lvmac(lvmac) 	/*
  		*/ indmac(indmac) instmac(instmac) 		/*
  		*/ zwords(`zvcnt') indwords(`indcnt')		/*
  		*/ instwords(`instcnt') zimat(`zimat')

		local i 1 
	
	while( `i' <= `artests') { 

		local zero -1

		tempname arm`i' 

		qui capture drop `wi' `lsqr' 
		local sarres ""
		local zvname ""

/* AR(m) statistic */
	
		qui gen double `wi'=l`i'.`res' if `touse'
		qui replace `wi'=0 if `wi'>=.

		qui gen double `lsqr'=`wi'*`res'


		qui summ `lsqr'
		scalar `d0'=r(sum)

		if `d0' == 0 {
			di as txt "note: the residuals and the L(`i') " _c
			di as txt "residuals have no obs in common" 
			di as txt "      The AR(`i') is trivially zero "
			scalar `arm`i''=.
			local zero 0
		}

		if (`zero' != 0 | `i'==1 ) {
			if "`twostep'" == "" {
				local ltwo 0
				if "`robust'" == "" {
					if `i'==1 {
						local sarres "sarres(`res')"
					}	
				}
				else {
					local ltwo 1 
					local resl " res1(`res1') "
				}
			}
			else {
				local ltwo 1 
				/* local resl " res1(`res1') " */
				local resl " res1(`res') "
				if `i'==1 {
					local sarres "sarres(`res')"
				}	
			}	
		
	
/* begin new method */
			if "`twostep'" != "" | "`robust'" != "" {
	
_xtwhw `wi' , zhname(`ZHW') wwname(`WW') ivar(`abid') imax(`id2max') 	/*
	*/ tvar(`t2') tmin(`t2min') tmax(`t2max') lags(`lags') 		/*
	*/ touse(`l2touse') zivars(zivars) timac(timac) 		/*
	*/ lvmac(lvmac) indmac(indmac) instmac(instmac) wvmac(wvmac)	/*
	*/ wwords(`wvcnt') zwords(`zvcnt') indwords(`indcnt')	 	/*
	*/ instwords(`instcnt') zimat(`zimat') hwname(`hwname')		/*
	*/ wtname(`wtname') res1(`res')
scalar `wHws' = r(wHw)
			}
			else {
_xtwhw `wi' , zhname(`ZHW') wwname(`WW') ivar(`abid') 		/*	
	 */ imax(`id2max') tvar(`t2') tmin(`t2min')		/*
	 */ tmax(`t2max') lags(`lags') touse(`l2touse')		/*
	 */ zivars(zivars) timac(timac) lvmac(lvmac) 		/*
	 */ indmac(indmac) instmac(instmac) wvmac(wvmac)	/*
	 */ wwords(`wvcnt') zwords(`zvcnt') indwords(`indcnt')	/*
	 */ instwords(`instcnt') zimat(`zimat') hwname(`hwname')/*
	 */ wtname(`wtname')
scalar `wHws' =r(wHw)
			}

/* end new method */
			
			if "`twostep'" == "" & "`robust'" == "" {
				scalar `d1'=`wHws'*`sig1'
				mat `d2m'=-2*`sig1'*`WW'*`M1'*`W'*`A'*`ZHW'
				if `i' == 1 {
			
					if (`sig1' >=. |  1/`sig1'>=. ) {
						scalar `sargan' = .
					}
					else { 
						mat `sargan'= `ZV''*`A'* /*
							*/ `ZV'*(1/`sig1')
						scalar `sargan' = `sargan'[1,1]
					}	
				}	
			}
			else {
				if "`robust'" != "" {
					scalar `d1'= `wHws'
					mat `d2m'=-2*`WW'*`M1'*`W'*`A'*`ZHW'
				}
				else {
					scalar `d1'= `wHws'
					mat `d2m'=-2*`WW'*`M1'*`W'*`A2'*`ZHW'
					if `i'==1 {
						mat `sargan'= `ZV''*`A2'*`ZV'
						scalar `sargan' = `sargan'[1,1]
					}	
				}
			}
		
			mat `d3m'=`WW'*e(V)*`WW''
		
			if `zero' != 0 {
				scalar `arm`i''=(`d0')/ /*
					*/ ( sqrt(`d1'+`d2m'[1,1]+`d3m'[1,1]) )
			}
			else {
				scalar `arm`i'' = . 
			}	
		}
		local i = `i' + 1
	}	

	restore 

 	foreach var of local prevars_o {
 		local prevars_do " `prevars_do' d.`var' "
 	}
 
 	tempname dd3 dd4
 	qui gen double `dd3' = `depvar' 
 	markout `touse' `dd3' DL(1/`lags').`dd3' `indeps_o' 		/*
 		*/ `prevars_do' `inst_o' 

	if "`small'" != "" {
		local dofm " dof( `df' ) "
	}
	est post `b' `V', depname(D.`depvar') obs(`NT') `dofm' /*
		*/ esample(`touse')



	local i 1
	while `i' <= `artests' {
		est scalar arm`i' = `arm`i''
		if "`robust'" == "" & `i'==1 {
			/* est scalar sargan = `sargan'[1,1] */
			est scalar sargan = `sargan'
		}	
		local i = `i' + 1
	}	

/* do wald test on constant */
	
	if "`constant'" == "" {
		qui test `namesf2'
		if "`small'" != "" {
			est scalar F=r(F)
			est scalar F_p = r(p)
			est scalar F_df=r(df)
		}
		else {
			tempname chi2 chi2_p chi2_df
			
			est scalar chi2    = r(chi2)
			est scalar chi2_p  = r(p)
			est scalar chi2_df = r(df)
			est local chi2type "Wald"	
		
		}
	}

	est scalar N = `n2'
	est scalar g_min=`tobs_min'
	est scalar g_max=`tobs_max'
	est scalar g_avg=`tobs_av'
	est scalar t_min=`tmin'
	est scalar t_max=`tmax'
	est scalar n_lags = `lags'

	est scalar sig2=`sig'
	est scalar N_g=`id2max_t'

	est local inst_l "`inst_l'"
	est local ivar "`id'"
	est local tvar "`t'"
	est local robust "`robust'"
	est local twostep "`twostep'"
	est local predict "xtab_p"
	est local bnames_ud `names_ud'
	est local depvar_ud "`depvar'"
	est local depvar "D.`depvar'"
	est local small "`small'"
	
	est scalar artests = `artests'
	est scalar df_m = `k'
	est scalar zcols =`zcols'
	if "`robust'" == "" {
		est scalar sar_df= `zcols'-`k'
	}	
	else {
		est local vce "robust"
		est local vcetype "Robust"
	}
	est local cmd "xtabond"

	Disp `level'
end


program define tsvars, rclass
	syntax varlist(ts)
	return local varlist "`varlist'"
end	


/* pre_p parses pre(<varlist>, [LAGstruct(<#_1,#_2) ENDogenous 
	exog(exogvarlist) prevs(all_ready_parsed_predeterm_vars])
*/

program define pre_p, rclass
	capture syntax varlist , [			/*
		*/ LAGstruct(string)			/*
		*/ ENDogenous				/*
		*/ exog(varlist ts)			/*
		*/ prevs(varlist ts)			/*
		*/ noCONStant				/*
		*/ ]

	if _rc > 0 {
		di as err "pre(`0') invalid "
		exit 198
	}	

	_rmcoll `varlist', `constant' 
	local varlist "`r(varlist)'"

	foreach var of local varlist {
	capture _rmdcoll `var' `prevs', nocoll `constant'
		if _rc == 459 {
			di as txt "note: `var' dropped due to collinearity"
		}
		else {
			capture _rmdcoll `var' `exog', nocoll `constant'
			if _rc == 459 {
di as txt "note: `var' dropped due to collinearity"
			}
			else {
local prelist "`prelist' `var' "
			}
		}	
	}

	local varlist "`prelist'"

	if "`lagstruct'" != "" {
		local lagstruct : subinstr local lagstruct " " "", all
		gettoken lags lagstruct : lagstruct, parse(",")
			if "`lags'"=="." {
				local lags "."
			}

		gettoken comma lagstruct : lagstruct, parse(",")
		if "`comma'"!="," {
			error 198
		}		

		gettoken maxlags lagstruct : lagstruct, parse(",")
		if "`maxlags'" == "." {
			local maxlags "."
		}	

		if "`lagstruct'"!="" {
			error 198
		}		
	
	}
	else {
		local lags "." 
		local maxlags "."
	}

	capture confirm integer number `lags'
	if _rc > 0 {
		local lagsn 0
	}
	else {
		if `lags' < 0 {
			di as err "lags of predetermined variables "	///
				"must be nonnegative"
			exit 498
		}
		local lagsn `lags'
	}

	if "`endogenous'" != "" {
		local first =   1 + `lagsn'
		if `maxlags' < . {
			local ++maxlags
		}	
	}	
	else {
		local first =   0 + `lagsn'
	}
	return scalar first = `first'


	return scalar lags = `lags'
	return scalar maxlags = `maxlags'
	return local pre "`varlist'"
end	


program define Disp, eclass
	args level 


	#delimit ;
        di _n as txt "Arellano-Bond dynamic panel-data estimation"
                _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 abbrev("`e(ivar)'", 12) as txt
		_col(49) "Number of groups" _col(68) "="
                _col(70) as res %9.0g e(N_g) _n ;

	#delimit cr
	if "`e(prefix)'" != "" {
		if !missing(e(df_r)) {
         		di as txt _col(49) "F(" as res e(df_m) as txt ", " /* 
				*/ as res e(df_r) as txt ")" _col(68) "=" /* 
				*/ _col(70) as res %9.2f e(F)
		}
		else {
         		di as txt _col(49) "Wald chi2(" /*
				*/ as res e(df_m) as txt  ")" _col(68) "=" /*
				*/ _col(70) as res %9.2f e(chi2)
		}
	}
	else if "`e(small)'" != "" {
         	di as txt _col(49) "F(" as res e(F_df) as txt ", " /* 
			*/ as res e(df_r) as txt ")" _col(68) "=" /* 
			*/ _col(70) as res %9.2f e(F)
	}
	else {
         	di as txt _col(49) "Wald chi2(" as res e(chi2_df) as txt  ")" /*
			*/ _col(68) "=" _col(70) as res %9.2f e(chi2)
	}
	di

	#delimit ;
        di as txt "Time variable (t): " as res abbrev("`e(tvar)'", 12) 
		as txt _col(49) "Obs per group: min " _col(68) "="
                _col(70) as res %9.0g e(g_min)  ;
		di as txt _col(64) "avg" _col(68) "="
                _col(70) as res %9.0g e(g_avg)  ;
		di as txt _col(64) "max" _col(68) "="
                _col(70) as res %9.0g e(g_max) _n ;
		
	#delimit cr

	if "`e(twostep)'" != "" {
		di as txt "Two-step results"
	}		 
	else {
		di as txt "One-step results"
	}	
		
	est di, level(`level') 

	if "`e(twostep)'" != "" {
		di "Warning: Arellano and Bond recommend using " /*
			*/ "one-step results for "
		di "         inference on coefficients"
		di
       }

	if "`e(robust)'" == "" {
		#delimit ;
		di as txt "Sargan test of over-identifying restrictions:     "; 
		di as txt _col(10) "chi2(" as res e(zcols)-e(df_m) as txt ") = " 
			 as res %8.2f e(sargan) _col(35) as txt "Prob > chi2 = " 
			as res %6.4f chiprob(e(zcols)-e(df_m),e(sargan)) ;
			di ;
		#delimit cr
	}

	local i  1
	while (`i' <= e(artests) ) {
		di as txt "Arellano-Bond test that average " _c
		di as txt "autocovariance in residuals of order `i' is 0:"
		di _col(10) as txt "H0: no autocorrelation " /*
			*/ _col(35) "z = "as res %6.2f e(arm`i')/* 
			*/ _col(48) as txt "Pr > z = " /*
			*/ as res %6.4f 2*(normprob(-1*abs( (e(arm`i')) ) ))
		local i = `i'+1
	}	

end


exit



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -