// postestimation command of boost : make a barchart of influence of variables in boosting // command uses e(influence) from the preceeding boost command // creates variable "influence" program influence_barchart version 14.0 syntax , [ MIN_influence(real -1) CATegory(int 1) top(int 15) plotonly tidytext(str) counttext * ] if ("`plotonly'"=="") { matrix influence = e(influence) confirm matrix e(influence) local mynames : rownames influence // di "`mynames'" tempvar id qui gen `id'="" local k : word count `mynames' // if more variables than obs if `k'>_N { set obs `k' } forvalues i = 1(1)`k' { local aword : word `i' of `mynames' capture confirm variable `aword' if !_rc { local alabel : variable label `aword' } if ("`alabel'"!="") qui replace `id'= "`alabel'" in `i' else qui replace `id'= "`aword'" in `i' } // Stata bug in graph hbar: plotting problem when single quote ' in the label. // see http://www.statalist.org/forums/forum/general-stata-discussion/general/393872-make-room-for-labels-on-bar-or-hbar // remove all single quotes ' // when specifying the fourth argument, 10, this works. When omitting it, it does not work. qui gen influence_id= ustrtrim(subinstr(`id',"'","",10)) cap svmat influence if _rc!=0 di as err "Variables Influence1,...,Influence# could not be created; they may exist already" } if ("`tidytext'"!="") { qui replace influence_id= ustrregexrf(influence_id,"`tidytext'$"," ") // replace " in `tidytext'" } if ("`counttext'"=="") { qui replace influence_id= ustrregexrf(influence_id,"^# of "," ") // if binarizing, remove " # of " at beginning } local c = `category' confirm variable influence`c', exact confirm variable influence_id, exact qui count if influence_id != "" local nxvars = r(N) local mypctile = 100 - `top' * 100 / `nxvars' local influence_pc = `min_influence' if `influence_pc' < 0 { if `mypctile' > 0 { _pctile influence`c', percentiles(`mypctile') local influence_pc = r(r1) } else local influence_pc = 0 } graph hbar (asis) influence`c' if influence`c'>`influence_pc' & !missing(influence`c') , /// over(influence_id, sort(influence`c') descending) /// ytitle("Percentage Influence") `options' end