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

📄 xtrc.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.6.7  20apr2005
program define xtrc, eclass byable(onecall)
	if _by() {
		local BY `"by `_byvars'`_byrc0':"'
	}
	`BY' _vce_parserun xtrc, panel jkopts(eclass) : `0'
	if "`s(exit)'" != "" {
		exit
	}

        version 6.0, missing
        if "`1'" == "" | substr("`1'",1,1) == "," {
                if "`e(cmd)'" != "xtrc" { error 301 }
		if _by() { error 190 }
                Display `0'
                exit
        }
        `BY' Estimate `0'
end

program define Estimate, eclass byable(recall) sort

        #delimit ;
        syntax [varlist] [if] [in] 
                        [, I(varname) T(varname) noCONstant OFFset(varname) 
                        Level(cilevel) BETAs] ;
        #delimit cr

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

	if "`t'" != "" {	/* t() not really needed for anything */
	        xt_tis `t'
        	local tvar "`s(timevar)'"
	}
	
        if "`offset'" != "" {
                tempvar ovar
                confirm var `offset'
		local ostr "`offset'"
                gen double `ovar' = `offset'
                local oarg "offset(`ovar')"
        }
        
        local level "level(`level')"

	/* Parsing complete, mark sample now */

	marksample touse
	markout `touse' `offset' `t' 
	markout `touse' `ivar', strok

        quietly {
		tokenize `varlist'
                local dep "`1'"
		local depname "`1'"
                mac shift
                local ind "`*'"
                noi _rmcoll `ind' if `touse', `constan'
                local ind "`r(varlist)'"
                local p : word count `ind'

		local rhs = `p'
		if "`constan'" == "" { local rhs = `rhs'+1 }

                tempvar t T
                sort `touse' `ivar' 
                by `touse' `ivar': gen int `t' = _n if `touse'
                by `touse' `ivar': gen int `T' = _N if `touse'

		count if `touse' 
		local nobso = r(N)

		by `touse' `ivar' : replace `touse' = 0 if `T'[_N] <= `rhs'
		replace `T' = . if `touse'==0

		count if `touse' 
		local nobs = r(N)

		if `nobs' < `nobso' {
			noi di as text "Note: " as res  `nobso'-`nobs' /*
				*/ as text " obs. dropped (panels too small)"
		}

		tempvar g  
		egen `g' = group(`ivar') if `touse'
		summ `g' if `touse'
		local ng = r(max)     

                summarize `T' if `touse' & `ivar'~=`ivar'[_n-1], meanonly
                local ng = r(N)
                local g1 = r(min)
                local g2 = r(mean)
                local g3 = r(max)

		if "`oarg'" != "" {
			replace `ovar' = `dep'-`ovar'
			local dep "`ovar'"
		}
		
		if `c(matsize)' < `ng' {
	noi di in smcl "{help matsize##|_new:matsize} " /*
*/ as error "must be at least as large as the number" _n /*
*/ as error "of panels in the current estimation sample (`ng')."
			exit 908
		}
		
/* Going to use individual temp matrices for the variances
   because otherwise I would need to vec and then unvec
   each one every time I need to use it.  Matrix returned
   to user, though, is Ng * (k^2)
*/
		tempname xtx v1 bbar sig1 tmp vs bt bols
		mat `bols' = J(`ng', `rhs', 0)
		reg `dep' `ind' if `touse' & `g'==1, `constan'
		mat `tmp' = get(_b)
		local colstr : colnames `tmp'
		mat `bols'[1, 1] = `tmp'
		mat colnames `bols' = `colstr'
		mat `v1' = get(VCE)
		mat `vs' = syminv(`v1')
		mat `bt' = `vs' * `bols'[1, 1...]'
		mat `sig1' = `bols'[1, 1...]' * `bols'[1, 1...]
		mat `bbar' = `bols'[1, 1...]
		local i = 2
		while `i' <= `ng' {
			tempname v`i' 
			reg `dep' `ind' if `touse' & `g'==`i', `constan'
			mat `bols'[`i', 1] = get(_b)
			mat `bbar' = `bbar' + `bols'[`i', 1...]
			mat `tmp' = `bols'[`i', 1...]' * `bols'[`i', 1...]
			mat `sig1' = `sig1' + `tmp'
			mat `v`i'' = get(VCE)
			mat `tmp' = syminv(`v`i'')
			mat `vs' = `vs' + `tmp'
			mat `tmp' = `tmp' * `bols'[`i', 1...]'
			mat `bt' = `bt' + `tmp'
			local i = `i' + 1
		}
		mat `vs' = syminv(`vs')
		mat `bt' = `vs' * `bt'
		local ngg = 1/`ng'
		mat `bbar' = `bbar' * `ngg'
		tempname sig sig2 
		mat `sig2' = `bbar' ' * `bbar'
		mat `sig2' = `sig2' * `ng'
		mat `sig' = `sig1' - `sig2'
		local ngg = 1/(`ng'-1)
		mat `sig' = `sig' * `ngg'

		tempname den w1 bm tmp2
		mat `w1' = `sig' + `v1'
		mat `w1' = syminv(`w1')
		mat `den' = `w1'
		mat `bt' = `bt' '
		mat `tmp' = `bols'[1, 1...] - `bt'
		mat `tmp2' = syminv(`v1')
		mat `bm' = `tmp' * `tmp2'
		mat `bm' = `bm' * `tmp''
		local i 2
		while `i' <= `ng' {
			tempname w`i'
			mat `w`i'' = `sig' + `v`i''
			mat `w`i'' = syminv(`w`i'')
			mat `den' = `den' + `w`i'' 
			mat `tmp' = `bols'[`i', 1...] - `bt'
			mat `tmp2' = syminv(`v`i'')
			mat `tmp2' = `tmp' * `tmp2'
			mat `tmp2' = `tmp2' * `tmp''
			mat `bm' = `bm' + `tmp2'
			local i = `i'+1
		}
		local k = colsof(`bols')
		local chival = `bm'[1,1]
		local df = `k'*(`ng'-1)
		local chiprob = chiprob(`df',`chival')

		tempname vce
		mat `den' = syminv(`den')
		mat `vce' = `den'

		local i 1
		while `i' <= `ng' {
			mat `w`i'' = `den' * `w`i''
			local i = `i'+1
		}

		mat drop `den'
		tempname beta
		mat `beta' = `w1' * `bols'[1, 1...]'
		local i 2
		while `i' <= `ng' {
			mat `den' = `w`i'' * `bols'[`i', 1...]'
			mat `beta' = `beta' + `den'
			local i = `i'+1
		}

		/* Now get the panel-specific betas */

		tempname bps sigi
		mat `bps' = J(`ng', `rhs', 0)
		mat colnames `bps' = `colstr'
		mat `sigi' = inv(`sig')
		loc i = 1
		while `i' <= `ng' {
			tempname v_`i'_i
			capture mat `v_`i'_i' = inv(`v`i'')
			if _rc { // Rare singular matrix problem
				mat `v_`i'_i' = J(`rhs', `rhs', .)
				mat `bps'[`i', 1] = J(1, `rhs', .)
			}
			else {
				mat `bps'[`i', 1] = ///
					(inv(`sigi' + `v_`i'_i'')* ///
					(`sigi'*`beta' + `v_`i'_i'* ///
					  `bols'[`i', 1...]'))'
			}
			loc i = `i' + 1
		}
		/* Assemble var[b_i] */
		tempname amat imina vps
		mat `vps' = J(`ng', `rhs'^2, 0)
		loc i = 1
		while `i' <= `ng' {
			if `bps'[`i', 1] < . {
				mat `amat' = inv(`sigi' + `v_`i'_i')*`sigi'
				mat `imina' = I(`k') - `amat'
				mat `vps'[`i', 1] = vec(`vce' + ///
					`imina'*(`v`i'' - `vce')*`imina'')'
			}
			else {
				mat `vps'[`i', 1] = J(1, `rhs'^2, .)
			}
			loc i = `i' + 1
		}
		
		mat `beta' = `beta' '
		est post `beta' `vce', obs(`nobs') depname(`depname') /*
			*/ esample(`touse')
		est mat Sigma `sig'
		capture test `ind', min `constan'
		if _rc == 0 {
			est scalar chi2 = r(chi2)
			est scalar df_m = r(df)
		}
		else    est scalar df_m = 0
		est scalar g_min  = `g1'
		est scalar g_avg  = `g2'
		est scalar g_max  = `g3'
		est scalar N_g = `ng'
		est scalar chi2_c = `chival'
		est scalar df_chi2c = `df'
		est local title "Random-coefficients regression"
		est local chi2type "Wald"
		est local offset "`ostr'"
		est local depvar "`depname'"
		est local ivar "`ivar'"
		est local tvar "`tvar'"
		est local predict "xtrc_p"
		est local cmd "xtrc"
		est matrix beta_ps `bps'
		est matrix V_ps `vps'
	}
	Display, `level' `betas'
end

program define Display
	syntax [, Level(cilevel) BETAs ]

	_crcphdr
	est di, level(`level')
	di in gr "Test of parameter constancy:    " /*
		*/ "chi2(" in ye e(df_chi2c) in gr ") = " /*
		*/ in ye %8.2f e(chi2_c) /*
		*/ in gr _col(59) "Prob > chi2 = " /*
		*/ in ye %6.4f chiprob(e(df_chi2c),e(chi2_c))
	local cil `=string(`level')'
	local cil `=length("`cil'")'
	if `cil' == 2 {
		local spaces "     "
	}
	else if `cil' == 4 {
		local spaces "   "
	}
	else {
		local spaces "  "
	}
	version 8, missing
        if ("`betas'" != "") {
                di
                di _col(25) "Group-specific coefficients"
                di as text "{hline 78}"
                di as text _col(21) ///
`"Coef.   Std. Err.      z    P>|z|`spaces'[`=strsubdp("`level'")'% Conf. Interval]"'
                di as text "{hline 13}{c TT}{hline 64}"
                tempname se b v pval cv junkb junkv junkvec
                mat `b' = e(beta_ps)
                mat `v' = e(V_ps)
                sca `cv' = invnorm(1 - ((100-`level')/100)/2)
                loc names : colnames `b'
                loc coefs : word count `names'
		loc numgrps = e(N_g)
                forvalues i = 1/`numgrps' {
                        di as text %12s "Group `i'" " {c |} "
                        di as text "{hline 13}{c +}{hline 64}"
                        mat `junkb' = `b'[`i', 1...]
			mat `junkvec' = `v'[`i', 1...]
			mat `junkv' = J(`coefs', `coefs', 0)
			forvalues m = 1/`coefs' {
				forvalues n = 1/`coefs' {
					mat `junkv'[`m', `n'] = ///
					   `junkvec'[1,`m'+(`n'-1)*`coefs']
				}
			}
                        forvalues j = 1/`coefs' {
                                loc col = 17
                                loc name : word `j' of `names'
                                di as text ///
%12s abbrev("`name'",12) " {c |}" as result _col(`col') %9.7g `junkb'[1,`j'] _c
                                loc col = `col' + 11
                                sca `se' = sqrt(`junkv'[`j', `j'])
                                if (`se' > 0 & `se' < .) {
                                        di as res _col(`col') %9.7g `se' ///
                                                "   " _c
                                        di as result %6.2f ///
                                                `junkb'[1, `j']/`se' ///
                                                "   " _continue
                                        sca `pval' = ///
                                        2*(1 - norm(abs(`junkb'[1, `j']/`se')))
                                        di as result %5.3f `pval' "    " _c
                                        di as result ///
%9.7g (`junkb'[1,`j'] - `cv'*`se') "   " _continue
                                        di as result ///
%9.7g (`junkb'[1,`j'] + `cv'*`se') _continue
                                        di   
                                }
                                else {
                                        di as text _col(36) ///
".        .       .            .           ."
                                }
                        }
                        if (`i' < `numgrps') {
                                di as text "{hline 13}{c +}{hline 64}"
                        }
                        else {
                                di as text "{hline 13}{c BT}{hline 64}"
                        }
                }
        }



end

exit

⌨️ 快捷键说明

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