📄 asmprobit_estat.ado
字号:
*! version 1.0.2 01apr2005
program asmprobit_estat
version 9
if "`e(cmd2)'" != "asmprobit" {
di as err "{help asmprobit##|_new:asmprobit} estimation results not found"
exit 301
}
gettoken sub rest: 0, parse(" ,")
local lsub = length("`sub'")
if "`sub'" == substr("covariance",1,max(3,`lsub')) | ///
"`sub'" == substr("correlation",1,max(3,`lsub')) {
local which = substr("`sub'",1,3)
Covariance `which' `rest'
}
else if "`sub'" == substr("alternatives",1,max(3,`lsub')) {
if "`rest'" != "" {
di as error "invalid syntax"
exit 198
}
Alternatives
}
else estat_default `0'
end
program Covariance, rclass
syntax namelist(name=which id="matrix type" max=1), ///
[FORmat(string) BORder(string) left(numlist max=1 >=0)]
if `e(cholesky)' Cov1
else Cov2
tempname V L
matrix `V' = r(V)
if "`which'" == "cov" {
matrix `V' = (`V'+`V'')*.5
matrix `L' = `V'
return matrix cov = `V'
if ("`format'" == "") local format %9.0g
}
else if "`which'" == "cor" {
tempname D
matrix `D' = syminv(cholesky(diag(vecdiag(`V'))))
matrix `L' = `D'*`V'*`D'
matrix rownames `L' = `names'
matrix colnames `L' = `names'
matrix `L' = (`L' + `L'')*.5
matrix `V' = `L'
return matrix cor = `V'
if ("`format'" == "") local format %6.3f
}
if ("`border'" == "") local border all
if ("`left'" == "") local left 2
matlist `L', format(`format') border(`border') left(`left')
end
program Cov1, rclass
tempname L b
local nalt = e(k_alt)
matrix `L' = I(`nalt')
matrix `b' = e(b)
forvalues j=1/`nalt' {
local k = el(e(stdpattern),1,`j')
if `k' < . {
local k = colnumb(`b',"lnl`j'_`j':")
matrix `L'[`j',`j'] = exp(`b'[1,`k'])
}
else matrix `L'[`j',`j'] = el(e(stdfixed),1,`j')
local j1 = `j'+1
forvalues i=`j1'/`nalt' {
local k = el(e(corpattern),`i',`j')
if `k' < . {
local k = colnumb(`b',"l`i'_`j':")
matrix `L'[`i',`j'] = `b'[1,`k']
}
else matrix `L'[`i',`j'] = el(e(corfixed),`i',`j')
}
}
tempname V
matrix `L' = `L'*`L''
matrix `V' = J(`nalt',`nalt',0)
local order : rownames e(corpattern)
forvalues j=1/`nalt' {
/* cholesky pivots base and scale alternatives */
/* rownames identify the order */
local jj : word `j' of `order'
local aj : word `j' of `e(alteqs)'
local names `"`names' `aj'"'
matrix `V'[`jj',`jj'] = `L'[`j',`j']
local j1 = `j' + 1
forvalues i=`j1'/`nalt' {
local ii : word `i' of `order'
matrix `V'[`ii',`jj'] = `L'[`i',`j']
matrix `V'[`jj',`ii'] = `V'[`ii',`jj']
}
}
matrix rownames `V' = `names'
matrix colnames `V' = `names'
return matrix V = `V'
end
program Cov2, rclass
tempname rho sigma
local nrho = e(k_rho)
if (`nrho' > 0) {
matrix `rho' = J(1,`nrho',.)
}
else {
matrix `rho' = J(1,1,.)
}
local nsigma = e(k_sigma)
if (`nsigma' > 0) {
matrix `sigma' = J(1,`nsigma',.)
}
else {
matrix `sigma' = J(1,1,.)
}
tempname L b D
local nalt = e(k_alt)
matrix `L' = I(`nalt')
matrix `b' = e(b)
matrix `D' = I(`nalt')
forvalues j=1/`nalt' {
local aj : word `j' of `e(alteqs)'
local names `"`names' `aj'"'
local k = el(e(stdpattern),1,`j')
if `k' < . {
if `e(fullcov)' {
local k = colnumb(`b',"lnsigma`j':")
matrix `D'[`j',`j'] = exp(`b'[1,`k'])
}
else {
if `sigma'[1,`k'] >= . {
local i = colnumb(`b',"lnsigmaP`k':")
matrix `sigma'[1,`k'] = exp(`b'[1,`i'])
}
matrix `D'[`j',`j'] = `sigma'[1,`k']
}
}
else {
matrix `D'[`j',`j'] = el(e(stdfixed),1,`j')
}
local j1 = `j'+1
forvalues i=`j1'/`nalt' {
local k = el(e(corpattern),`i',`j')
if `k' < . {
if `e(fullcov)' {
local k = colnumb(`b',"atanhr`i'_`j':")
matrix `L'[`i',`j'] = tanh(`b'[1,`k'])
matrix `L'[`j',`i'] = `L'[`i',`j']
}
else {
if `rho'[1,`k'] >= . {
local k1 = colnumb(`b',"atanhrP`k':")
matrix `rho'[1,`k'] = tanh(`b'[1,`k1'])
}
matrix `L'[`i',`j'] = `rho'[1,`k']
matrix `L'[`j',`i'] = `rho'[1,`k']
}
}
else {
matrix `L'[`i',`j'] = el(e(corfixed),`i',`j')
matrix `L'[`j',`i'] = `L'[`i',`j']
}
}
}
matrix `L' = `D'*`L'*`D'
matrix rownames `L' = `names'
matrix colnames `L' = `names'
return matrix V = `L'
end
program Alternatives, rclass
tempname table
.`table' = ._tab.new, col(6)
.`table'.width |10 11 18|11 11 11|
.`table'.strcolor . . yellow . . .
.`table'.numcolor yellow yellow . yellow yellow yellow
.`table'.numfmt %5.0g %9.0g . %10.0g %10.0g %10.2f
di _n as text "{col 4}Alternatives summary"
.`table'.sep, top
.`table'.titles "Covariance" "Alt " "Alt " "Cases " "Frequency" "Percent"
.`table'.titles "index " "value" "label" "present" "selected" "selected"
.`table'.sep, mid
local nalt = rowsof(e(stats))
forvalues i=1/`nalt' {
local label = abbrev("`e(alt`i')'",17)
.`table'.row `i' el(e(stats),`i',1) "`label'" ///
el(e(stats),`i',2) el(e(stats),`i',3) ///
100*el(e(stats),`i',4)
}
.`table'.sep,bot
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -