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

📄 xtreg_fe.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.4.4  29apr2005
program define xtreg_fe, eclass
	_vce_parserun xtreg, panel : `0'
	if "`s(exit)'" != "" {
		exit
	}
	version 6, missing
	local options "Level(cilevel)"
	if !replay() {
		syntax varlist(ts) [if] [, `options' FAST I(varname) FE	///
			Robust Cluster(varname) ]
		tsunab varlist : `varlist'
		tokenize `varlist'

		xt_iis `i'
		local ivar "`s(ivar)'"

		tempvar x w touse tmp XB U Ti
		tempname sst sse r2
		local dv `1'

		if "`fast'"!="" {
			local fast "*"
		}
		
		quietly {
			mark `touse' `if'
			markout `touse' `varlist' `ivar' `cluster'
			count if `touse'
			if r(N)<=1 { error 2001 }
			capture tsset
			if _rc == 0 {
				local ivar `r(panelvar)'
				local tvar `r(timevar)'
			}
			sort `ivar' `tvar' `touse'
			local origvars `varlist'
			tsrevar `varlist'
			local varlist `r(varlist)'
			preserve
			keep if `touse'
			keep `varlist' `ivar' `userwgt' `touse' `cluster'
			`fast' regress `varlist'
			`fast' local r2c = e(r2)

			if "`cluster'" != "" {
				_xtreg_chk_cl `cluster' `ivar'
				local clopt " cluster(`cluster') "
				local robust robust
			}

			tokenize `varlist'		
			local tmpdep `1'
			summ `1'
			scalar `sst' = (r(N)-1)*r(Var)

					/* lhs 		*/
			by `ivar': gen double `x' = sum(`1')/_n
			summ `1'
			by `ivar': replace `x' = (`1' - `x'[_N]) + r(mean)
			drop `1'
			rename `x' `1'
			mac shift

					/* rhs		*/
			while ("`1'"!="") {
				by `ivar': gen double `x' = sum(`1')/_n
				summ `1'
				by `ivar': replace `x' = /*
					*/ (`1' - `x'[_N]) + r(mean)
				drop `1'
				rename `x' `1'
				count if `1'!=`1'[1]
				if r(N)==0 {
					replace `1' = 0
				}
				mac shift
			}
			count if `ivar'!=`ivar'[_n-1]
			local dfa = r(N)-1

			est clear
			regress `varlist'
			local nobs = e(N)
			local dfb = e(df_m)
			scalar `sse' = e(rss)
			local dfr = e(df_r)
			local dfe = e(df_r) - `dfa'
			if `dfe'<=0 | `dfe'>=. { noi error 2001 } 

			if "`robust'" == "" & "`clopt'" == "" {
				local dofopt "dof(`dfe')"
			}

			* we could avoid this if only we knew dfe in advance
			regress `varlist', `dofopt' `robust' `clopt'
			if "`cluster'" != "" {
				local N_clust = e(N_clust)
				local df_cl = e(df_r)
			}

			if "`robust'" != "" | "`cluster'" != "" {
					/* backup e() results */
				local scalars : e(scalars)
				foreach i of local scalars {
					if "`i'" != "F" {
						tempname `i'	
						scalar ``i'' = e(`i')
					}
				}
				local macros : e(macros)
				foreach i of local macros {
					local `i' `e(`i')'
				}
				local cvar `e(clustvar)'

					/* adjust e(V) for d.f. */
				tempname b V 
				mat `V' = e(V)
				mat `b' = e(b)
				mat `V' = `V'*`dfr'/`dfe'
				est post `b' `V'

					/* restore e() results */
				foreach i of local scalars {
					if "`i'" != "F" {
						est scalar `i' = ``i''
					}
				}
				foreach i of local macros {
					est local `i' `"``i''"'
				}
				est local clustvar "`cvar'"

				gettoken yvar xvars : varlist
				test `xvars'
				est scalar F = r(F)
			}
			
			tempname er2 eF ermse emss er2a ell ell0 b V
			scalar `er2' = e(r2)
			scalar `eF' = e(F)
			scalar `ermse' = e(rmse)
			scalar `emss' = e(mss)
			scalar `er2a' = e(r2_a)
			scalar `ell' = e(ll)
			scalar `ell0' = e(ll_0)
			
			mat `b' = e(b)
			mat `V' = e(V)
			local xvars : subinstr local origvars "`dv'" ""
			mat colnames `b' = `xvars' _cons
			mat colnames `V' = `xvars' _cons
			mat rownames `V' = `xvars' _cons
			est post `b' `V', obs(`nobs') depname(`dv')
			
			if "`robust'" != "" | "`cluster'" != ""{ 
				est local vcetype  "Robust"
				est local vce robust
				est local clustvar "`cvar'"
			}
			est local cmd
			est scalar rss = `sse'
			est scalar df_m = `dfa' + `dfb' 
			local df_r = `nobs' -1 - e(df_m)
			if "`cluster'" == "" { 
				est scalar df_r = `df_r'
			}
			else {
				est scalar N_clust = `N_clust'
				est scalar df_r = min(`df_r', `df_cl')
			}
			
			est scalar r2 = `er2'
			est scalar rmse = `ermse'
			est scalar mss = `emss'
			est scalar r2_a = `er2a'
			est scalar ll = `ell'
			est scalar ll_0 = `ell0'
			
			scalar S_E_sse = e(rss)
			global S_E_mdf = e(df_m)
			global S_E_tdf = e(df_r)
			if "`fast'"!="" { 
				exit 
			}

			est scalar tss = `sst'
			est scalar N = `nobs'
			est scalar df_b = `dfb' 
			est scalar r2_w = `er2' 	
						
			est local ivar "`ivar'"
			est scalar df_a = `dfa'	/* # of coeffs absorbed */
			est scalar F = `eF'

			scalar S_E_sst = `sst'
			scalar S_E_nobs = `nobs'
			global S_E_dfb = `dfb'
			scalar S_E_r2w = e(r2_w)
			global S_E_ivar	"`ivar'"
			global S_E_dfa  `dfa' 	/* # of coefs absorbed */
			global S_E_f = e(F)

			
			scalar `r2'=1-`sse'/`sst'
			if "`robust'" == "" & "`cluster'" == "" { 
				est scalar F_f = ((`r2'-`r2c')/(e(df_a)))/ /*
					*/ ((1-`r2')/e(df_r))
			}		

			scalar S_E_f2 = e(F_f)

			sort `ivar'  /* sic, in case in varlist */
			by `ivar': gen long `Ti' = _N if _n==_N
			summ `Ti'
			scalar S_E_T = r(max)
			est scalar Tbar = r(mean)
			scalar S_E_Tbar = e(Tbar)
			est scalar Tcon = (r(min)==r(max))
			global S_E_Tcon = e(Tcon) 

			est scalar g_min = r(min)
			est scalar g_avg = r(mean)
			est scalar g_max = r(max)


			count if `Ti'<. 
			est scalar N_g = r(N)
			scalar S_E_n = r(N)

			restore
			est local depvar `dv'
			tempname mysamp
			qui gen byte `mysamp' = `touse'
			est repost, esample(`mysamp')

			_predict double `XB' if `touse', xb
			sort `ivar' `touse'
			by `ivar' `touse': gen double `U' = /*
				*/ cond(`touse' & _n==_N, /*
				*/ sum(`tmpdep')/_n-sum(`XB')/_n,.) /*
				*/ if `touse'
			summ `U'
			est scalar ui = sqrt(r(Var))
			est scalar sigma_u = sqrt(r(Var))
			scalar S_E_ui= e(sigma_u)
			by `ivar' `touse': replace `U' = `U'[_N]
			corr `XB' `U'
			est scalar corr = r(rho)
			scalar S_E_rho = e(corr)

			corr `tmpdep' `XB' if `touse'
			est scalar r2_o = r(rho)^2
			scalar S_E_r2o = e(r2_o)

			by `ivar' `touse': replace `XB' = /*
				*/ cond(_n==_N & `touse', /*
				*/ sum(`XB'/_N),.)
			by `ivar' `touse': replace `U' = /* 
				*/ cond(_n==_N & `touse', /*
				*/ sum(`tmpdep'/_N),.)
			corr `U' `XB'
			est scalar r2_b = r(rho)^2
			scalar S_E_r2b = e(r2_b)

			est scalar sigma_e = sqrt(e(rss)/`dfe') 
			est scalar sigma = sqrt(e(sigma_u)^2 + e(sigma_e)^2)
			est scalar rho   = e(sigma_u)^2 / e(sigma)^2
			
			est local model fe
			est local predict xtrefe_p
			est local cmd xtreg
		
			tokenize `varlist'
			mac shift
			global S_E_vl `*'
			global S_E_if `"`if'"'
			global S_E_depv "`dv'"
			global S_E_cmd2 "xtreg_fe"
			global S_E_cmd "xtreg"
		}
	}
	else {
		if ("`e(model)'" !="fe") { 
			error 301 
		}
		syntax [, `options']
	}

	if e(Tcon) {
		local Twrd "    T"
	}
	else	local Twrd "T-bar"

	local dft = e(N) - 1
	local dfe = `dft' - e(df_m)
	* local ssm = scalar(e(tss) - e(rss))
	* local msm = `ssm'/e(df_m)
	local ssm . 
	local msm .

	local mse = e(rss)/`dfe'			
	if !missing(e(chi2)) {
		local p = chi2tail(e(df_b),e(chi2))	
	}
	else	local p = fprob(e(df_b),`dfe',e(F))	

	#delimit ;
        di _n in gr "Fixed-effects (within) regression"
                _col(49) in gr "Number of obs" _col(68) "="
                _col(70) in ye %9.0f e(N) ;
        di in gr "Group variable (i): " in ye abbrev("`e(ivar)'",12) in gr
		_col(49) "Number of groups" _col(68) "="
                _col(70) in ye %9.0g e(N_g) _n ;
        di in gr "R-sq:  within  = " in ye %6.4f e(r2_w)
                _col(49) in gr "Obs per group: min" _col(68) "="
                _col(70) in ye %9.0g e(g_min) ;
        di in gr "       between = " in ye %6.4f e(r2_b)
                _col(64) in gr "avg" _col(68) "="
                _col(70) in ye %9.1f e(g_avg) ;
        di in gr "       overall = " in ye %6.4f e(r2_o)
                _col(64) in gr "max" _col(68) "="
                _col(70) in ye %9.0g e(g_max) _n ;

	if !missing(e(chi2)) { ;
		di in gr _col(49) "Wald chi2(" in ye e(df_b) 
			in gr ")" _col(68) "=" _col(70) in ye %9.2f e(chi2) ;
		di in gr "corr(u_i, Xb)" _col(16) "= " in ye %6.4f e(corr)
			in gr _col(49) "Prob > chi2" _col(68) "="
			_col(73) in ye %6.4f `p' _n ;
	} ;
	else { ;
		di in gr _col(49) "F(" in ye e(df_b) in gr "," in ye `dfe' 
			in gr ")" _col(68) "=" _col(70) in ye %9.2f e(F) ;
		di in gr "corr(u_i, Xb)" _col(16) "= " in ye %6.4f e(corr)
			in gr _col(49) "Prob > F" _col(68) "="
			_col(73) in ye %6.4f `p' _n ;
	} ;
	#delimit cr

	est di , level(`level') plus

       	di in smcl in gr "     sigma_u {c |} " in ye %10.0g e(sigma_u)
       	di in smcl in gr "     sigma_e {c |} " in ye %10.0g e(sigma_e)
       	di in smcl in gr "         rho {c |} " in ye %10.0g e(rho) /*
		*/ in gr "   (fraction of variance due to u_i)"
	di in smcl in gr "{hline 13}{c BT}{hline 64}"

	#delimit ;

	if "`robust'" == "" & "`cluster'" == "" ///
	 & "`e(prefix)'" != "bootstrap" { 
		di in gr "F test that all u_i=0:     " 
			"F(" in ye e(df_a) in gr ", " in ye e(df_r) in gr ") = "
			in ye %8.2f e(F_f) _col(62) in gr "Prob > F = " 
			in ye %6.4f fprob(e(df_a),e(df_r),e(F_f)) ;
		#delimit cr
	}

end

⌨️ 快捷键说明

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