📄 jackknife.ado
字号:
// load/save file with jknife results
preserve
capture use `"`saving'"', clear
if c(rc) {
if inrange(c(rc),900,903) {
di as err ///
"insufficient memory to load file with jackknife results"
}
error c(rc)
}
capture confirm var `clid'
if !c(rc) {
quietly drop `clid'
}
capture confirm var `jkstrvar'
if c(rc) {
local jkstrvar
}
else {
char _dta[jk_strata] `"`jkstrvar'"'
}
if `"`jk_wtype'"' != "" {
char _dta[jk_wtype] `jk_wtype'
char _dta[jk_multiplier] `"`jkmultvar'"'
}
else {
capture drop `jkmultvar'
local jkmultvar
}
capture confirm var `jkfpcvar'
if ! c(rc) {
char _dta[jk_fpc] `"`jkfpcvar'"'
}
label data `"jackknife: `cmdname'"'
char _dta[jk_command] `"`command'"'
char _dta[jk_cmdname] `"`cmdname'"'
char _dta[jk_names] `"`names'"'
char _dta[jk_nfunction] `"`nfunc'"'
if "`svy'" != "" {
char _dta[jk_svy] `"`svy'"'
char _dta[jk_su1] `"`cluster'"'
char _dta[jk_N_psu] `"`nclust'"'
char _dta[jk_N_pop] `"`=`npop''"'
char _dta[jk_N_strata] `"`=`nstrata''"'
char _dta[jk_N_psu] `"`=`npsu''"'
if `"`subpop'"' != "" {
char _dta[jk_N_sub] `"`=`nsub''"'
char _dta[jk_N_subpop] `"`=`nsubpop''"'
char _dta[jk_subpop] `"`subpop'"'
}
}
else if "`cluster'" != "" {
char _dta[jk_cluster] `"`cluster'"'
char _dta[jk_N_cluster] `"`nclust'"'
}
char _dta[jk_wtype] `"`wtype'"'
char _dta[jk_wexp] `"`wexp'"'
char _dta[jk_rweights] `"`jkrw'"'
char _dta[jk_N] `=`nobs''
// fix the column stripes
if "`eexpress'" == "(_b)" ///
& inlist("`cmdname'", "ologit", "oprobit") ///
& missing(e(version)) {
_prefix_relabel_eqns `b'
local k_eq = s(k_eq)
local k_aux = `k_eq' - 1
}
local colna : colna `b'
local coleq : coleq `b', quote
local coleq : list clean coleq
if `"`: list uniq coleq'"' == "_" {
local coleq
}
forvalues i = 1/`K' {
local name : word `i' of `names'
char `name'[observed] `= `b'[1,`i'] '
local label = substr(`"`exp`i''"',1,80)
label variable `name' `"`label'"'
char `name'[expression] `"`exp`i''"'
local na : word `i' of `colna'
local eq : word `i' of `coleq'
char `name'[coleq] `eq'
char `name'[colname] `na'
if `i' <= `k_eexp' {
char `name'[is_eexp] 1
}
}
char _dta[jk_version] 1
if `"`filetmp'"' == "" {
quietly save `"`saving'"', replace
}
// saved results
tempname jk_v
capture noisily _jk_sum, `mse'
if c(rc) {
ereturn clear
exit c(rc)
}
matrix `jk_v' = r(V)
local single = r(singleton)
_copy_mat_stripes `jk_v' : `b'
restore
if "`eexpress'" == "(_b)" {
if "`svy'" != "" {
local xsca chi2_c p p_c ll ll_c ll0 ll_0 ///
r2_p r2_a rmse rss mss singleton
}
// make a copy of what is in -e()-, with some eXclusions
local xmac cmd _estimates_name chi2type novariance
if "`noecluster'" == "" {
local xmac `xmac' clustvar
}
local xsca `xsca' F chi2 df_r df_m
local xmat b V
if "`e(cmd)'" != "`cmdname'" {
local ecmd `e(cmd)'
}
if "`cmdname'" == "heckman" {
local xsca `xsca' selambda
}
if "`cmdname'" == "intreg" {
local xsca `xsca' se_sigma
}
_e2r, xmac(`xmac') xsca(`xsca') xmat(`xmat') add
if "`e(depvar)'" != "" {
local depvar `e(depvar)'
if `:word count `depvar'' == 1 {
local depname depname(`depvar')
}
}
}
if "`:word 1 of `eexpress''" == "(_b)" {
tempname Cns
capture mat `Cns' = get(Cns)
if (c(rc)) local Cns
else {
// get constraints matrix for post
local cols = colsof(`Cns')
// note: if no other expressions were added, then the
// constraint matrix has 1 more column than the
// coefficient vector
if `cols' <= colsof(`b') {
// add columns of zeros for other statistics
local colsm1 = `cols'-1
local rows = rowsof(`Cns')
local fill = colsof(`b')-`colsm1'
tempname cns1 cns2
mat `cns1' = `Cns'[1...,1..`colsm1']
mat `cns2' = `Cns'[1...,`cols']
mat `Cns' = `cns1',J(`rows',`fill',0),`cns2'
matrix drop `cns1' `cns2'
}
}
}
if inlist("`cmdname'", "binreg", "glm") {
if !missing(r(vf)) & r(vf) != 1 {
matrix `jk_v' = r(vf)*`jk_v'
}
}
quietly replace `touse' = (`touse'==1)
ereturn post `b' `jk_v' `Cns', esample(`touse') `depname'
// restore the copied elements back to -e()-
_r2e, xmat(b V)
ereturn local wtype `wtype'
ereturn local wexp `"`wexp'"'
ereturn scalar k_eq = `k_eq'
ereturn scalar k_exp = `k_exp'
ereturn scalar k_eexp = `k_eexp'
ereturn scalar k_extra = `k_extra'
if "`k_aux'" != "" {
ereturn scalar k_aux = `k_aux'
}
if "`eexpress'`k_exp'" != "(_b)0" {
ereturn local predict _no_predict
}
if "`svy'" != "" {
ereturn scalar N_pop = `npop'
ereturn local N_sub
ereturn local N_subpop
ereturn local subpop
ereturn local srssubpop
if `"`subpop'"' != "" {
ereturn scalar N_sub = `nsub'
ereturn scalar N_subpop = `nsubpop'
ereturn local subpop `"`subpop'"'
if "`vsrs'" != "" {
ereturn local srssubpop `srssub'
}
}
ereturn scalar N_strata = `nstrata'
ereturn scalar N_strata_omit = `omit'
if missing(`npsu') {
ereturn local N_psu
}
else ereturn scalar N_psu = `npsu'
if "`jkrw'" == "" {
ereturn local strata1 `strata'
ereturn local fpc1 `fpc'
}
else {
ereturn local strata1
ereturn local fpc1
ereturn local jkrweight `jkrw'
}
ereturn local su1 `cluster'
if !missing(e(stages)) {
forval i = 2/`e(stages)' {
ereturn local strata`i'
ereturn local su`i'
ereturn local fpc`i'
}
}
if "`posts'" != "" {
ereturn local poststrata `posts'
ereturn local postweight `postw'
ereturn scalar N_poststrata = `npost'
}
ereturn local adjust `adjust'
ereturn local estat_cmd svy_estat
if `is_sum' & "`nsubp'" != "" {
ereturn matrix _N_subp = `nsubp'
}
if "`vsrswr'" != "" {
ereturn matrix V_srswr = `vsrswr'
}
if "`vsrs'" != "" {
ereturn matrix V_srs = `vsrs'
// NOTE: V_srswr must be posted before the next line
_svy_mkdeff
}
}
else if `"`cluster'"' != "" {
ereturn scalar N_clust = `nclust'
ereturn local cluster `cluster'
}
if "`subpop'" == "" {
ereturn scalar N = `N'
}
else ereturn scalar N = `touseN'
if `"`title'"' != "" {
ereturn local title `"`title'"'
}
else {
_prefix_title `cmdname' "Jackknife results"
ereturn local title `"`r(title)'"'
}
forval i = 1/`K' {
ereturn local exp`i' `"`exp`i''"'
}
ereturn local command `"`:list retok command'"'
ereturn local nfunction `"`nfunc'"'
ereturn local keep `keep'
if "`keep'" != "" {
ereturn local pseudo `names'
}
// NOTE: this must be the last thing posted to -e()-
ereturn local cmdname `cmdname'
if "`svy'" != "" {
ereturn local prefix svy
}
else ereturn local prefix jackknife
if "`eexpress'`k_exp'" != "(_b)0" {
ereturn local predict _no_predict
ereturn local cmd jackknife
}
else {
if !inlist("`e(predict)'", "_no_predict") {
// compute e(F) or e(chi2), and e(df_m)
_prefix_model_test `cmdname', `svy' `adjust'
}
if "`svy'" != "" {
_svy_check_predict `cmdname'
}
if "`ecmd'" == "" {
ereturn local cmd `cmdname'
}
else ereturn local cmd `ecmd'
}
// Display output
if "`replay'" != "" & "`svy'`table'`header'`legend'`verbose'" == "" {
`replay', level(`level') `efopt'
}
else {
if "`e(cmd)'`first'" == "ivregfirst" {
_svy_ivreg_first, `diopts'
}
Display, `diopts'
}
end
program Display
local extra = `"`e(cmd)'"' != `"`e(cmdname)'"'
if `"`e(cmd)'"' != "" {
is_svysum `e(cmd)'
local is_svysum = r(is_svysum)
local svylist svyb svyj svyr
local proplist : properties `e(cmd)'
local svyable = `"`: list proplist & svylist'"' != ""
}
else {
local is_svysum 0
local svyable 0
}
if `extra' | `is_svysum' | `svyable' {
_prefix_display `0'
exit
}
syntax [, ///
notable ///
TItle(passthru) ///
noHeader ///
noLegend ///
Verbose ///
* ///
]
if ("`table'" != "" & "`header'" != "") exit
`e(cmd)', `options'
end
program RWeights, sortpreserve sclass
// NOTE: this routine assumes the number of replicate weight variables
// is less or equal to the number of observations in the dataset.
_on_colon_parse `0'
// replicate weight variables
local varlist `s(after)'
local nvars : word count `varlist'
// output variables
tokenize `s(before)'
args jkrm strata fpc // typically tempvar names
tempvar id
quietly {
// default values for output variables
gen double `jkrm' = (`nvars'-1)/`nvars' in 1/`nvars'
gen str `strata' = "" in 1/`nvars'
gen double `fpc' = 0 in 1/`nvars'
gen long `id' = _n
local calldefault noisily ///
RW_defaults `jkrm' `strata' `fpc' `id' `nvars'
forval i = 1/`nvars' {
local var : word `i' of `varlist'
// get stratum id
replace `strata' = `"`: char `var'[jk_stratum]'"' in `i'
// get FPC value
local fpcval : char `var'[jk_fpc]
if `"`fpcval'"' != "" {
capture {
confirm number `fpcval'
assert `fpcval' >= 0
}
if c(rc) {
`calldefault'
exit
}
replace `fpc' = `fpcval' in `i'
}
// get multiplier
local multiplier : char `var'[jk_multiplier]
if `"`multiplier'"' != "" {
capture {
confirm number `multiplier'
assert `multiplier' > 0
}
if c(rc) {
`calldefault'
exit
}
replace `jkrm' = `multiplier' in `i'
}
}
local goodstrid 1
sreturn clear
capture assert `strata' == "" in 1/`nvars'
if !c(rc) {
replace `strata' = "one" in 1/`nvars'
local goodstrid 0
}
else {
capture assert `strata' != "" in 1/`nvars'
if c(rc) {
`calldefault'
local goodstrid 0
}
}
capture bysort `strata': assert `fpc' == `fpc'[1]
if c(rc) {
`calldefault'
local goodstrid 0
}
capture by `strata': assert reldif(`jkrm', `jkrm'[1]) < 1e-7
if c(rc) {
`calldefault'
local goodstrid 0
}
sreturn local goodstrid `goodstrid'
} // quietly
end
program RW_defaults
args jkrm strata fpc id nvars
di as txt "{p 0 0 2}" ///
"(note: some replicate weight variables have inconsistent " ///
"characteristics; ignoring these characteristics){p_end}"
sort `id'
replace `jkrm' = (`nvars'-1)/`nvars' in 1/`nvars'
replace `strata' = "one" in 1/`nvars'
replace `fpc' = 0 in 1/`nvars'
end
program Check4Over, sclass
syntax [, over(passthru) * ]
if `"`over'"' != "" {
sreturn local hasover hasover
}
else sreturn local hasover
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -