📄 varirf_cgraph.ado
字号:
local stats2
foreach var of local stats {
HayObs `var', irfname(`irfname') ///
impulse(`impulse') response(`response')
if r(N) > 0 {
local stats2 `stats2' `var'
}
else {
MissErr `var', irfname(`irfname')
}
}
local stats `stats2'
if `"`subtitle'"' != "" {
local tmac `"subtitle("`subtitle'")"'
local tmacs `"`subtitle'"'
}
else {
local tmac `"subtitle("`irfname': `impulse' -> `response'""'
local tmac `"`tmac', size(scheme heading) box bexpand blstyle(none))"'
local tmacs "`irfname': `impulse' -> `response'"
}
local adj_level = `level'/100 + (100-`level')/200
local legon " legend(on) "
local uniqs : list uniq stats
local uniq : list uniqs == stats
if `uniq' != 1 {
di as err "duplicate elements found in `stats'"
exit 198
}
local nstats : word count `stats'
if "`cim'" == "" {
if `nstats' > 2 {
di as err "only two statistics may " /*
*/"be included with CI's in one graph"
exit 198
}
}
else {
if `nstats' > 4 {
di as err "only four statistics may " /*
*/"be included in one graph"
exit 198
}
}
if `nstats' > 1 {
local mys s
}
else {
local mys
}
local nstatsp1 = `nstats' + 1
forvalues nsp = `nstatsp1'/4 {
if `"`plot`nsp'opts'"' != "" {
di as txt "only `nstats' plot`mys' specified, plot`nsp'opts() option ignored"
}
}
local i 1
local slist
local lopt "xlabel(#4) ylabel(#4 , grid angle(horizontal))"
local nstatsp1 = `nstats' + 1
if "`cim'" == "" {
if `nstats' == 1 {
if "`ciopts2'`ci2opts'" != "" {
di as txt "only one statistics specified, ci2opts() ignored"
}
local var : word 1 of `stats'
tempvar `var'l `var'u
capture noi confirm variable std`var'
HayObs std`var', irfname(`irfname') impulse(`impulse') response(`response')
if r(N) > 0 {
tempvar `var'l `var'u
qui gen double ``var'l' = `var' - std`var'*invnorm(`adj_level')
qui gen double ``var'u' = `var' + std`var'*invnorm(`adj_level')
local cilab `"`=strsubdp("`level'")'% CI for `var'"'
local ylab `"yvarlabel("`cilab'" "`cilab'")"'
local plt1 `"( `ciplot' ``var'l' ``var'u' step, sort(step) "'
local plt1 `"`plt1' pstyle(ci) `ylab' `lopt' `ciopts1m' `ci1optsm')"'
local ylab `"yvarlabel("`var'")"'
local plt2 `"(line `var' step, sort(step) pstyle(p1) `ylab' "'
local plt2 `"`plt2' `lopt' `itw_opts' `plot1optsm' )"'
local allplots `" `plt1' `plt2' "'
}
else {
StdMissErr `var', irfname(`irfname') model(`ckvec')
local ylab `"yvarlabel("`var'")"'
local plt1 `"(line `var' step, sort(step) pstyle(p1) `ylab' "'
local plt1 `"`plt1' `legon' `lopt' `itw_opts' `plot1optsm' )"'
local allplots `" `plt1' "'
}
}
if `nstats' == 2 {
local var1 : word 1 of `stats'
local var2 : word 2 of `stats'
tempvar `var1'l `var1'u
capture noi confirm variable std`var1'
HayObs std`var1', irfname(`irfname') impulse(`impulse') response(`response')
if r(N) > 0 {
tempvar `var1'l `var1'u
qui gen double ``var1'l' = `var1' - std`var1'*invnorm(`adj_level')
qui gen double ``var1'u' = `var1' + std`var1'*invnorm(`adj_level')
local cilab `"`=strsubdp("`level'")'% CI for `var1'"'
local ylab `"yvarlabel("`cilab'" "`cilab'")"'
local plt1 `"( `ciplot' ``var1'l' ``var1'u' step, sort(step) "'
local plt1 `"`plt1' pstyle(ci) `ylab' `lopt' `ciopts1m' `ci1optsm')"'
}
else {
StdMissErr `var1', irfname(`irfname') model(`ckvec')
local plt1
}
tempvar `var2'l `var2'u
capture noi confirm variable std`var2'
HayObs std`var2', irfname(`irfname') impulse(`impulse') response(`response')
if r(N) > 0 {
tempvar `var2'l `var2'u
qui gen double ``var2'l' = `var2' - std`var2'*invnorm(`adj_level')
qui gen double ``var2'u' = `var2' + std`var2'*invnorm(`adj_level')
local cilab `"`=strsubdp("`level'")'% CI for `var2'"'
local ylab `"yvarlabel("`cilab'" "`cilab'")"'
local plt2 `"( `ciplot' ``var2'l' ``var2'u' step, sort(step) "'
local plt2 `"`plt2' pstyle(ci2) `ylab' `lopt' `ciopts2m' `ci2optsm')"'
}
else {
StdMissErr `var2', irfname(`irfname') model(`ckvec')
local plt2
}
local ylab `"yvarlabel("`var1'")"'
local plt3 `"(line `var1' step, sort(step) pstyle(p1line) `ylab' "'
local plt3 `"`plt3' `lopt' `itw_opts' `plot1optsm' )"'
local ylab `"yvarlabel("`var2'")"'
local plt4 `"(line `var2' step, sort(step) pstyle(p2line) `ylab' "'
local plt4 `"`plt4' `lopt' `itw_opts' `plot2optsm' )"'
local allplots `" `plt1' `plt2' `plt3' `plt4' "'
}
if `nstats' > 2 {
di as err "only two statistics may " /*
*/"be included with CI's in one graph"
exit 198
}
if `nstats' < 1 {
di as txt "all variables contain all " ///
"missing values for irf " ///
"results `irfname'"
di as txt `"{p 0 4 4}cannot make a "' ///
`"graph for {cmd:(`0copy')}{p_end}"'
local allplots
}
}
else {
if `nstats' == 1 {
local legon " legend(on) "
}
else {
local legon
}
local labvar
local allplots
local nsp 0
foreach var of local stats {
local ++nsp
local plt`nsp' `"(line `var' step , yvarlab("`var'") `lopt' "'
local plt`nsp' `"`plt`nsp'' `legon' `itw_opts' `plot`nsp'optsm')"'
local allplots `" `allplots' `plt`nsp'' "'
}
if `nsp' < 1 {
di as txt "all variables contain all missing values " ///
"for irf results `irfname'"
di as txt `"{p 0 4 4}cannot make a graph for "' ///
`"{cmd:(`0copy')}{p_end}"'
local allplots
}
}
if "`individual'" == "" {
local nodraw nodraw
}
if `"`allplots'"' != "" {
if "`individual'" == "" {
if `"`name'"' == "" {
tempname tname`j'
local snames `"`snames' `tname`j'' "'
local dropnames "`dropnames' `tname`j'' "
local name "name(`tname`j'')"
}
else {
local snames `"`snames' `sn_name' "'
}
}
graph twoway `allplots' ///
if irfname == "`irfname'" ///
& impulse == "`impulse'" ///
& response == "`response'" ///
`ifstep' , ///
`nodraw' ///
ytitle("") ///
`name' ///
`tmac' `s_save' ///
`twg_opts' `scheme' `graphopts'
ret local stats`j' `stats'
ret local irfname`j' `irfname'
ret local impulse`j' `impulse'
ret local response`j' `response'
ret local title`j' `"`tmacs'"'
ret local save`j' `"`s_saves'"'
ret local name`j' `"`name_s'"'
if "`cim'" == "" {
ret local ci`j' `level'
}
else {
ret local ci`j' `cim'
}
if "`individual'" != "" & `"`gcmds'"' != "" {
more
}
}
}
if "`individual'" == "" {
local rows = ceil(sqrt(`j'))
if `"`iscale'"' == "" {
if `rows' == 1 {
local iscale "*1"
}
if `rows' == 2 {
local iscale "*.75"
}
if `rows' >2 {
local iscale "*.6"
}
}
if `"`imargin'"' == "" {
if `rows' == 1 {
local imargin small
}
if `rows' == 2 {
local imargin vsmall
}
if `rows' >2 {
local imargin tiny
}
}
local tgraphs : word count `snames'
if `tgraphs' > 0 {
graph combine `snames', `c_save' `cn_save' ///
`c_tmac' iscale(`iscale') ///
imargin(`imargin') `scheme' `comb_opts'
ret local title `"`c_tmacs'"'
ret local save `"`c_saves'"'
ret local name `"`cn_saves'"'
}
}
else {
ret local individual individual
}
ret scalar k = `j'
if "`dropnames'" != "" {
capture graph drop `dropnames'
if _rc > 0 {
di as err "could not drop temporary " /*
*/ "graphs `dropnames'"
}
}
restore
end
program define SAVEPARSE, rclass
syntax anything(id="filename" name=fname) [, replace]
local fname `fname'
ret local fname `"`fname'"'
ret local replace `replace'
end
program define NAMEPARSE, rclass
syntax name(id="filename" name=name) [, replace]
local name `name'
ret local name `"`name'"'
ret local replace `replace'
end
program define MissErr
syntax varname, irfname(string)
di as txt "{p 0 4}`varlist' contains all missing values " ///
"for irf results `irfname'{p_end}"
di as txt "statistic dropped from specification"
di
end
program define StdMissErr
syntax varname, irfname(string) model(string)
if "`model'" != "vec" {
di as txt "{p 0 4}standard errors not computed for " ///
"`varlist' in irf results `irfname'{p_end}"
di as txt "cannot compute confidence interval"
}
end
program define HayObs, rclass
syntax varname, irfname(string) impulse(string) response(string)
qui count if `varlist' < . & irfname == "`irfname'" ///
& impulse == "`impulse'" ///
& response == "`response'"
ret scalar N = r(N)
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -