📄 eivreg.ado
字号:
*! version 1.1.11 09feb2005
program define eivreg, eclass byable(recall)
version 6, missing
local options "Level(cilevel)"
if !replay() {
syntax varlist [if] [in] [aw fw] [, `options' Reliab(string)]
tokenize `varlist'
local dv `1'
mac shift
local ivars "`*'"
marksample touse
tempname xpx xx xy xxi b bp ev mm vv ym2 rr i origxx
qui mat accum `xpx' = `dv' `ivars' if `touse' [`weight'`exp']
local nobs = r(N)
if `nobs'<=0 | `nobs'>=. { error 2001 }
local dim = rowsof(`xpx')
local NN = `xpx'[`dim',`dim']
mat `xx' = `xpx'[2..`dim',2..`dim']
mat `xxi' = syminv(`xx')
if diag0cnt(`xxi') {
di in red /*
*/ "too few observations or collinear variables"
exit 2001
}
mat drop `xxi'
mat `origxx' = `xx'
tokenize `"`reliab'"', parse(" ")
while ("`*'"!="") {
confirm variable `1'
unabbrev `1'
local 1 "`s(varlist)'"
confirm number `2'
local rlist "`rlist' `1' `2'"
local rn = rownumb(`xx',"`1'")
if `rn'>=. {
di in red "`1' not independent variable"
exit 111
}
if `2'<=0 | `2'>1 {
di in red "0 < r <= 1 required"
exit 399
}
local vvxx = `xx'[`rn',`rn']
local vm = `xpx'[`dim',`rn'+1]
mat `xx'[`rn',`rn'] = /*
*/ `vvxx' - (1-`2')*(`vvxx'-`vm'*`vm'/`NN')
mac shift 2
}
local rlist "`rlist' * 1"
mat `xy' = `xpx'[1,2..`dim']
mat `xxi' = syminv(`xx')
mat `b' = `xy' * `xxi'
mat `ev' = (`b' * `xx') * `b''
local Nmk = `NN' - `dim'+ 1
scalar `ym2' = (`xpx'[1,`dim'])^2/`NN'
scalar `rr' = (`xpx'[1,1] - `ev'[1,1]) /(`Nmk')
/* could be improved: */
local r2 = (`ev'[1,1]-`ym2')/(`xpx'[1,1]-`ym2')
mat `vv' = ((`xxi' * `rr') * `origxx') * `xxi'
scalar `i'=1
while `i' <= rowsof(`vv') {
if `vv'[`i',`i']<=0 {
di in red "reliability r() too small"
exit 399
}
scalar `i' = `i' + 1
}
est post `b' `vv', depname(`dv') dof(`Nmk') esample(`touse')
quietly test `ivars'
/* double save in S_E_<stuff> and e() */
est scalar rmse = sqrt(`rr')
est scalar df_m = r(df)
est scalar df_r = r(df_r)
est scalar F = r(F)
est scalar N = `NN'
est scalar r2 = `r2'
est local rellist "`rlist'"
global S_E_rmse `e(rmse)'
global S_E_mdf `e(df_m)'
global S_E_tdf `e(df_r)'
global S_E_f `e(F)'
global S_E_nobs `NN'
global S_E_r2 `r2'
global S_E_rvn "`rlist'"
if "`weight'`exp'" != "" {
est local wtype `"`weight'"'
est local wexp `"`exp'"'
}
est local depvar "`dv'"
est local predict "tobit_p"
est local cmd "eivreg"
global S_E_cmd "eivreg"
}
else {
if ("`e(cmd)'"!="eivreg") { error 301 }
if _by() { error 190 }
syntax [, `options']
}
di in gr _n _col(16) "assumed" /*
*/ _col(49) "Errors-in-variables regression" _n /*
*/ "variable" _col(14) "reliability"
di in smcl in gr "{hline 24}" /*
*/ _col(56) "Number of obs =" in ye %8.0f e(N)
tokenize "`e(rellist)'", parse(" ")
local k 1
while "`1'"!="" {
di in gr %8s abbrev("`1'",8) _col(12) %10.4f `2' _col(56) _c
mac shift 2
if `k'==1 {
di in gr "F(" %3.0f e(df_m) "," %6.0f e(df_r) ") =" /*
*/ in ye %8.2f e(F)
}
else if `k'==2 {
di in gr "Prob > F =" /*
*/ in ye %8.4f fprob(e(df_m),e(df_r),e(F))
}
else if `k'==3 {
di in gr "R-squared =" in ye %8.4f e(r2)
}
else if `k'==4 {
di in gr "Root MSE =" in ye %8.0g e(rmse)
}
else di
local k=`k'+1
}
while `k'<=4 {
di _col(56) _c
if `k'==2 {
di in gr "Prob > F =" /*
*/ in ye %8.4f fprob(e(df_m),e(df_r),e(F))
}
else if `k'==3 {
di in gr "R-squared =" in ye %8.4f e(r2)
}
else if `k'==4 {
di in gr "Root MSE =" in ye %8.0g e(rmse)
}
local k=`k'+1
}
di
est di, level(`level')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -