📄 areg.ado
字号:
*! version 1.4.5 13jun2005
program areg, eclass byable(onecall) sort
if _by() {
local BY `"by `_byvars'`_byrc0':"'
}
`BY' _vce_parserun areg, noothervce jkopts(eclass) : `0'
if "`s(exit)'" != "" {
exit
}
version 6.0, missing
if replay() {
if `"`e(cmd)'"' != "areg" {
error 301
}
if _by() { error 190 }
syntax [, Level(cilevel) ]
Di_areg `level' /* display results */
exit
}
`BY' Estimate `0'
end
program Estimate, eclass byable(recall)
syntax varlist(ts) [aw fw pw] [if] [in], Absorb(varname) /*
*/ [Level(cilevel) Robust CLuster(varname) ]
tokenize `varlist'
local y `1'
tsunab y : `y'
macro shift
tsrevar `y'
local yuse `r(varlist)'
tsrevar `*'
local xuse `r(varlist)'
if `"`absorb'"'==`""' {
di in red `"absorb() required"'
exit 100
}
if `"`cluster'"'!=`""' {
local clopt `"cluster(`cluster')"'
local robust `"robust"'
}
local wt `"`weight'"'
if `"`weight'"'==`"pweight"' {
local weight `"aweight"'
local robust `"robust"'
}
if `"`robust'"'!=`""' {
local mse1 `"mse1"'
}
tempvar touse x c
tempname vadj b V
quietly {
/* Do mark/markout. */
mark `touse' [`weight'`exp'] `if' `in'
markout `touse' `yuse' `xuse'
markout `touse' `absorb' `cluster', strok
count if `touse'
if r(N) == 0 { noisily error 2000 }
else if r(N) == 1 { noisily error 2001 }
/* Preserve and keep. */
preserve
keep if `touse'
if `"`weight'"'!=`""' {
local wexp `"`exp'"'
tempvar w
gen double `w' `exp'
local exp `"=`w'"'
}
keep `yuse' `xuse' `absorb' `cluster' `w'
if `"`weight'"'==`""' { local w 1 }
/* Sort and count number of groups. */
sort `absorb'
count if `absorb'!=`absorb'[_n-1]
local dfa = r(N) - 1
/* If not robust, get R^2 from regression without fixed-effects.
This is used for test of fixed-effects.
*/
if `"`robust'"'==`""' {
_regress `yuse' `xuse' [`weight'`exp']
local r2c = e(r2)
local dfe = e(df_r) - `dfa'
if `dfe'<=0 | `dfe'>=. { noisily error 2001 }
/* Note: This check is done later, too. */
}
/* Remove means from varlist. */
summ `yuse' [`weight'`exp']
local sst = (r(N)-1)*r(Var)
by `absorb': gen double `x' = sum(`w'*`yuse')/sum(`w')
by `absorb': replace `x' = `yuse'-`x'[_N]+r(mean)
drop `yuse'
rename `x' `yuse'
if `"`xuse'"' != "" {
foreach i of varlist `xuse' {
summ `i' [`weight'`exp']
by `absorb': gen double `x' = ///
sum(`w'*`i')/sum(`w')
by `absorb': replace `x' = `i'-`x'[_N]+r(mean)
drop `i'
gen double `i' = `x'
drop `x'
}
}
/* Do regression. */
_regress `yuse' `xuse' [`weight'`exp'], `mse1'
local nobs = e(N)
local nvar = e(df_m) /* # ind. variables in model */
local mdf = e(df_m) + `dfa' /* true model df */
local sse = e(rss)
local ll = e(ll)
local ll_0 = e(ll_0)
local r2 = 1 - `sse'/`sst'
local dfe = `nobs' - 1 - `mdf'
if `dfe'<=0 | `dfe'>=. { noisily error 2001 }
local ar2 = 1 - (1-`r2')*(`nobs' - 1)/`dfe'
/* Adjust covariance matrix for correct dfe and post. */
matrix `b' = get(_b)
matrix `V' = get(VCE)
if `"`robust'"'==`""' {
scalar `vadj' = e(df_r)/`dfe'
matrix `V' = `vadj'*`V'
}
else { /* setup for robust variance */
local k = `mdf' + 1
tempvar res
predict double `res', res
}
if `"`robust'"'~=`""' {
_robust `res' [`weight'`exp'], minus(`k') /*
*/ `clopt' variance(`V')
local cn = r(N_clust)
if "`cluster'"~="" {
local dfe = r(N_clust) - 1
}
}
matrix colnames `b' = `*' _cons
matrix colnames `V' = `*' _cons
matrix rownames `V' = `*' _cons
est post `b' `V', dof(`dfe') obs(`nobs') depn(`y')
if `"`*'"'!=`""' {
test `*'
est scalar df_m = r(df)
if r(df)==`nvar' {
est scalar F = r(F)
}
else {
est scalar F = .
}
}
else {
est scalar df_m = 0
est scalar F = .
}
global S_E_mdf = e(df_m)
global S_E_f = e(F)
if `"`robust'"'==`""' {
est scalar F_absorb = ((`r2'-`r2c')/`dfa')/((1-`r2')/`dfe')
global S_E_f2 = e(F_absorb)
}
else {
est local vcetype `"Robust"'
global S_E_vce `"Robust"'
if `"`cluster'"' != "" {
est scalar N_clust = `cn'
est local clustvar `"`cluster'"'
global S_E_cn `"`cn'"'
global S_E_cvn `"`cluster'"'
}
}
est scalar N = `nobs'
est scalar rss = `sse'
est scalar ll = `ll'
est scalar ll_0 = `ll_0'
est scalar tss = `sst'
est scalar r2 = 1 - `sse'/`sst'
est scalar ar2 = `ar2'
est scalar df_r = `dfe'
est local absvar `"`absorb'"'
est scalar df_a = `dfa'
est scalar rmse = `=sqrt(e(rss)/(e(N)-e(df_a)-e(df_m)-1))'
est local wexp `"`wexp'"'
est local wtype `"`wt'"'
est local depvar `"`y'"'
global S_E_nobs `"`nobs'"'
global S_E_sse `"`sse'"'
global S_E_sst `"`sst'"'
global S_E_r2 `"`e(r2)'"'
global S_E_tdf `"`dfe'"'
global S_E_abs `"`absorb'"'
global S_E_dfa `"`dfa'"'
global S_E_depv `"`y'"'
est local predict areg_p
est local title "Linear regression, absorbing indicators"
est local cmd "areg"
global S_E_cmd "areg"
restore
est repost, esample(`touse')
}
/* Display results. */
Di_areg `level'
end
program Di_areg
if "`e(prefix)'" != "" & "`e(vce)'" != "" {
_coef_table_header
di
_coef_table, level(`1')
FooterR
exit
}
local level `"`1'"'
local rmse = sqrt(e(rss)/(e(N)-e(df_a)-e(df_m)-1))
if e(F)<. {
local p = fprob(e(df_m),e(df_r),e(F))
}
di _n in gr `"`e(title)'"' _col(56) /*
*/ `"Number of obs ="' in ye %8.0f e(N)
if e(F)<. {
di in gr _col(56) `"F("' in ye %3.0f e(df_m) in gr `","' /*
*/ in ye %6.0f e(df_r) in gr `") ="' in ye %8.2f e(F)
}
else {
local h "help j_robustsingular:"
local dfm = e(df_m)
local dfr = e(df_r)
di in smcl _col(56) `"{`h'F( `dfm', `dfr')}"' _col(70) /*
*/ `"{`h'= .}"'
}
di in gr _col(56) `"Prob > F ="' in ye %8.4f `p'
di in gr _col(56) `"R-squared ="' in ye %8.4f e(r2)
di in gr _col(56) `"Adj R-squared ="' in ye %8.4f e(ar2)
di in gr _col(56) `"Root MSE = "' in ye %7.0g `rmse' _n
est di, level(`level') plus
if `"`e(vcetype)'"'=="Robust" { FooterR }
else Footer
end
program Footer
local dfa1 = e(df_a) + 1
local skip2 = max(14-length(`"`dfa1'"')-2,0)
local todisp `"F(`e(df_a)', `e(df_r)') = "'
local skip3 = max(23-length(`"`todisp'"')-2,0)
di in smcl in gr %12s abbrev(`"`e(absvar)'"',12) " {c |}" /*
*/ _skip(`skip3') `"`todisp'"' /*
*/ in ye %10.3f e(F_absorb) %8.3f fprob(e(df_a),e(df_r),e(F_absorb)) /*
*/ in gr _skip(`skip2') `"(`dfa1' categories)"'
end
program FooterR
local skip = 8 - length(`"`e(absvar)'"')
local dfa1 = e(df_a) + 1
local skip2 = max(44 - length(`"`dfa1'"')-4, 0)
di in smcl in gr %12s abbrev(`"`e(absvar)'"',12) " {c |} absorbed" /*
*/ _skip(`skip2') `"(`dfa1' categories)"'
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -