You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.9 KiB
Plaintext
167 lines
4.9 KiB
Plaintext
9 months ago
|
*! 1.0.2 TJS 29 Feb 2004 Saves jackknived estimates
|
||
|
* 1.0.1 TJS 20 Jul 2001
|
||
|
* 1.0.0 TJS 22 May 2001
|
||
|
*! based on: metainf 3.0.0 AT Mar 2000 (STB-56: sbe26.1)
|
||
|
|
||
|
program define metaninf
|
||
|
version 6.0
|
||
|
syntax varlist(min=2 max=6 numeric) [if] [in] [, id(varname) noGRAPH /*
|
||
|
*/ LABEL(string) SAVe(string) t1(str) t2(str) Format(str) noTABLE `options' *]
|
||
|
tokenize `varlist'
|
||
|
|
||
|
* preserve
|
||
|
|
||
|
local est = "`1'"
|
||
|
|
||
|
if "`label'" != "" {
|
||
|
parse "`label'", parse("=,")
|
||
|
while "`1'" != "" {
|
||
|
cap confirm var `3'
|
||
|
if _rc != 0 {
|
||
|
di in re "Variable `3' not defined"
|
||
|
exit _rc
|
||
|
}
|
||
|
local `1' "`3'"
|
||
|
mac shift 4
|
||
|
}
|
||
|
}
|
||
|
tempvar code
|
||
|
qui {
|
||
|
if "`namevar'" != "" {
|
||
|
local lbnvl : value label `namevar'
|
||
|
if "`lbnvl'" != "" { quietly decode `namevar', gen(`code') }
|
||
|
else {
|
||
|
gen str10 `code' = ""
|
||
|
cap confirm string variable `namevar'
|
||
|
if _rc == 0 { replace `code' = `namevar' }
|
||
|
else if _rc == 7 { replace `code' = string(`namevar') }
|
||
|
}
|
||
|
}
|
||
|
else { gen str3 `code' = string(_n) }
|
||
|
if "`yearvar'" != "" {
|
||
|
local yearvar "`yearvar'"
|
||
|
cap confirm string variable `yearvar'
|
||
|
if _rc == 7 { local str "string" }
|
||
|
if "`namevar'" == "" { replace `code' = `str'(`yearvar') }
|
||
|
else { replace `code' = `code' + " (" + `str'(`yearvar') + ")" }
|
||
|
}
|
||
|
}
|
||
|
local id "`code'"
|
||
|
|
||
|
preserve
|
||
|
|
||
|
|
||
|
* Dealing with if and in options
|
||
|
if ("`if'" != "") { qui keep `if' }
|
||
|
if ("`in'" != "") { qui keep `in' }
|
||
|
if _N <= 1 { error 2001 }
|
||
|
|
||
|
* Overall estimates
|
||
|
tempvar so
|
||
|
qui gen `so' = _n
|
||
|
qui metan `varlist', nograph `options'
|
||
|
local ove = $S_1
|
||
|
local ll = $S_3
|
||
|
local ul = $S_4
|
||
|
sort `so'
|
||
|
|
||
|
* Meta-analysis estimate omiting one study each step
|
||
|
tempvar theta setheta ulth llth
|
||
|
qui sum `1', detail
|
||
|
local n = _result(1)
|
||
|
qui {
|
||
|
gen `theta' = .
|
||
|
gen `setheta' = .
|
||
|
gen `ulth' = .
|
||
|
gen `llth' = .
|
||
|
label var `theta' "Estimate"
|
||
|
label var `llth' "Lower CI Limit"
|
||
|
label var `ulth' "Upper CI Limit"
|
||
|
}
|
||
|
|
||
|
local i = 1
|
||
|
tempvar s
|
||
|
qui gen `s' = _n
|
||
|
while (`i' <= `n') {
|
||
|
qui {
|
||
|
metan `varlist' if `s' != `i', `options' nograph
|
||
|
sort `so'
|
||
|
replace `theta' = $S_1 in `i'
|
||
|
replace `llth' = $S_3 in `i'
|
||
|
replace `ulth' = $S_4 in `i'
|
||
|
}
|
||
|
local i = `i' + 1
|
||
|
}
|
||
|
|
||
|
* Maximum and minimum CI values
|
||
|
qui sum `llth', detail
|
||
|
local mnx = r(min)
|
||
|
qui sum `ulth', detail
|
||
|
local mxx = r(max)
|
||
|
|
||
|
* Labeling plot
|
||
|
if "`t2'" == "" { local t2 `""' }
|
||
|
if "`t1'" == "" { local t1 "Meta-analysis estimates, given named study is omitted" }
|
||
|
|
||
|
* Numeric format
|
||
|
if "`format'" == "" { local format "%5.2f" }
|
||
|
|
||
|
* Print option
|
||
|
if "`table'" != "notable" {
|
||
|
di
|
||
|
di in gr "------------------------------------------------------------------------------"
|
||
|
di in gr _col(2) "Study omitted" _col(20) "|" _col(24) "Estimate" _col(39) "[95% Conf. Interval]"
|
||
|
di in gr "-------------------+----------------------------------------------------------"
|
||
|
local i = 1
|
||
|
while `i' <= `n' {
|
||
|
if "`id'" == "" { local a = `s' in `i' }
|
||
|
else { local a = `id' in `i' }
|
||
|
local b = `theta' in `i'
|
||
|
local c = `llth' in `i'
|
||
|
local d = `ulth' in `i'
|
||
|
di _col(2) "`a'" _col(20) in gr "|" in ye _col(24) `b' _col(39) `c' _col(52) `d'
|
||
|
local i=`i'+1
|
||
|
}
|
||
|
di in gr "-------------------+----------------------------------------------------------"
|
||
|
di _col(2) "Combined" _col(20) in gr "|" in ye _col(24) `ove' _col(39) `ll' _col(52) `ul'
|
||
|
di in gr "------------------------------------------------------------------------------"
|
||
|
}
|
||
|
|
||
|
* Display plot
|
||
|
if "`graph'" != "nograph" {
|
||
|
mhplot `llth' `theta' `ulth', r sy(|o|) l("`id'") t1(`t1') t2(`t2') /*
|
||
|
*/ f(`format') xline(`ove',`ll',`ul') xlab(`mnx',`ove',`ll',`ul',`mxx') /*
|
||
|
*/ xti(`ove',`ll',`ul') xscale(`mnx',`mxx')
|
||
|
}
|
||
|
|
||
|
if "`save'" != "" {
|
||
|
local c = index("`save'",",")
|
||
|
if `c' != 0 {
|
||
|
local save = substr("`save'",1,`c'-1) + " " + substr("`save'",`c'+1, .)
|
||
|
}
|
||
|
local save1 : word 1 of `save'
|
||
|
local replace : word 2 of `save'
|
||
|
if "`replace'" == "replace" {
|
||
|
capture drop `save1'
|
||
|
}
|
||
|
capture confirm new var `save1'
|
||
|
if _rc {
|
||
|
local rc = _rc
|
||
|
di in re "`save1' exists. Use 'replace' option: save(save_var, replace)."
|
||
|
exit `rc'
|
||
|
}
|
||
|
qui {
|
||
|
gen `save1' = `theta'
|
||
|
sort `id'
|
||
|
tempfile saved
|
||
|
save `saved'
|
||
|
restore
|
||
|
sort `id'
|
||
|
merge `id' using `saved', keep(`save1') update replace nokeep
|
||
|
drop if _merge==2
|
||
|
drop _merge
|
||
|
}
|
||
|
label var `save1' "jackknifed `est' (metaninf)"
|
||
|
|
||
|
end
|