/* Display Results */ program multivrs_display_results, rclass syntax , time_taken(real) [ more full sig_only intervals noinfluence saveas(string) listwise inf_means margins] local prefb `"`r(prefb)'"' local model_namelist `"`r(model)'"' local model_idlist `"`r(model_idlist)'"' local depvarlist `"`r(depvar)'"' local intvarlist `"`r(intvar)'"' local nmodeltypes `"`r(nmodeltypes)'"' local bs_type `"`r(bs_type)'"' tempname sigrates matrix `sigrates' = r(sigrates) local ncols = colsof(`sigrates') local nrows = rowsof(`sigrates') di _newline _continue if "`sig_only'" == "sig_only" { local results_col 29 if "`margins'" == "margins" di as text`"`r(title)'"' " (displaying marginal effects);" else di as text `"`r(title)'"' ";" if "`margins'" == "margins" di _continue " displaying marginal effects:" di as text "Variable of interest " _col(`results_col') as result r(intvar) di as text "Outcome variable " _col(`results_col') as result r(depvar) di as text "Possible control terms " _col(`results_col') as result r(nterms) di as text "Number of models" _col(`results_col') as result %-15.0fc r(nmodels) di as text "Number of observations" _col(`results_col') as result %-15.0fc r(N) di as text "{hline 35}" } if "`sig_only'" == "sig_only" | "`more'" == "more" { di as text "Significance Testing:" di _newline _continue local colstart 14 local colinterval 13 local line_length = round(`colstart' + (`ncols'+1) *`colinterval' ) if `ncols' > 1 { di _continue as text "Estimation Command: " local cnames : colfullnames `sigrates' local ic 0 foreach c of local cnames { local ++ic if "`c'" == "all_models" local c all models local display_colname `"`c'"' if `: list c in model_idlist' { MakeDisplayModelID `c' local display_colname `"`r(display_name)'"' } if `ic' == `ncols' local cont "" else local cont "_continue" local col_indent = `colstart' + `ic'*`colinterval' di `cont' as text _col(`col_indent') %12s abbrev("`display_colname'", 12) } di _continue as text "Number of Models: " local colstart 20 forvalues ic = 1/`ncols' { if `ic' == `ncols' local cont "" else local cont "_continue" local col_indent = `colstart' + `ic'*`colinterval' di `cont' as text _col(`col_indent') %5.0f `sigrates'[1,`ic'] } di as text "{hline `line_length'}" } local title2 "Sign Stability" local title3 "Significance Rate" local title4 "Positive" local title5 "Positive and Sig" local title6 "Negative" local title7 "Negative and Sig" forvalues ir = 2/`nrows' { local colstart 20 local pctsign "%" local asres "as result" if `ir' == 4 di as text "{hline `line_length'}" di _continue as text "`title`ir''" forvalues ic = 1/`ncols' { if `ic' == `ncols' local cont "" else local cont "_continue" local col_indent = `colstart' + `ic'*`colinterval' di `cont' as text _col(`col_indent') as result %5.0f `sigrates'[`ir',`ic'] "%" } } di as text "{hline `line_length'}" } /* Display all of the coefficient summary statistics */ else if "`full'" == "full" { if "`margins'" == "margins" di as text`"`r(title)'"' " (displaying marginal effects);" else di as text `"`r(title)'"' ";" di as text "Variable of interest " _col(29) as result r(intvar) if `r(Nmin)' != `r(Nmax)' { local nmin_9 : display %9.0fc `r(Nmin)' local nmax_9 : display %9.0fc `r(Nmax)' local nmin : subinstr local nmin_9 " " "", all local nmax : subinstr local nmax_9 " " "", all local num_obs_range `nmin'-`nmax' local len_range : length local num_obs_range local num_obs_range_colstart = 79-`len_range' di as text "Outcome variable " _col(29) as result abbrev(r(depvar), 15) _col(46) as text "Num. observations" _col(`num_obs_range_colstart') as result "`num_obs_range'" //as result %9.0f r(Nmin) as text "-" as result %9.0f r(Nmax) } else { di as text "Outcome variable " _col(29) as result abbrev(r(depvar), 15) _col(46) as text "Number of observations" _col(70) as result %9.0fc r(N) } di as text "Possible control terms " _col(29) as result r(nterms) _col(46) as text "Mean R-squared" _col(70) as result %9.2f r(meanr2) di as text "Number of models" _col(29) as result %-15.0fc r(nmodels) _col(46) as text "Multicollinearity" _col(70) as result %9.2f r(mc) di as text "{hline 79}" di "Multiverse Statistics:" _col(46) "Significance Testing:" di _newline as text "Mean(b)" _col(19) as result %9.4f r(meanb) _col(46) as text "Sign Stability" _col (70) as result %9.0f `sigrates'[2,1] "%" di as text "Sampling SE" _col(19) as result %9.4f r(samplingSE) _col(46) as text "Significance rate" _col (70) as result %9.0f `sigrates'[3,1] "%" di as text "Modeling SE" _col(19) as result %9.4f r(modelingSE) _col(46) as text "{hline 34}" di as text "Total SE" _col(19) as result %9.4f r(totalSE) _col(46) as text "Positive" _col (70) as result %9.0f `sigrates'[4,1] "%" di as text "{hline 30}" _col(46) "Positive and Sig" _col (70) as result %9.0f `sigrates'[5,1] "%" di as text "Robustness Ratio:" _col(19) as result %9.4f r(rratio) _col(46) as text "Negative" _col (70) as result %9.0f `sigrates'[6,1] "%" di as text _col(46) as text "Negative and Sig" _col (70) as result %9.0f `sigrates'[7,1] "%" di as text "{hline 79}" if "`prefb'" != "" { di as text "Statistics for Preferred Estimate:" di _continue as text "Pref. est." _col(19) as result %9.4f r(prefb) di _col(41) as text "Percentile of modeling dist." _col(19) as result %5.0f r(prefpctile) as text "%" di as text "Sampling SE" _col(19) as result %9.4f r(prefse) di as text "Modeling SE" _col(19) as result %9.4f r(modelingSE) di as text "Total SE" _col(19) as result %9.4f r(preftotalSE) /*if "`model'" != "logistic" & "`irr'" != "irr" { di as text "Robustness Int." _col(21) "[" as result %-8.4f r(prefLB) as text "," /// as result %8.4f r(prefUB) as text "]" } */ di as text "{hline 79}" } } if "`influence'" != "noinfluence" & "`more'" != "more" { tempname infstats if "`sig_only'" == "sig_only" { di as text "Model Influence" _col(25) "{ul:Significance Regression}" _col(55) "{ul:Sign Regression}" matrix `infstats' = r(infstats_sig_only) di as text _col(29) "Marginal Effect" _col(55) "Marginal Effect" di as text _col(22) "on Significance Probability" _col(51) "on Positive Probability" local fmt_col2 "%9.4f" } else { di as text "Model Influence" matrix `infstats' = r(infstats_default) local inf_titles1 _col(29) "Marginal Effect" _col(55) "Percent Change" local inf_titles2 _col(26) "of Variable Inclusion" _col(56) "From Mean(b)" if "`inf_means'" == "inf_means" { local inf_titles1 `inf_titles1' _col(75) "Mean Estimate When" local inf_titles2 `inf_titles2' _col(75) "Variable Included" } di as text `inf_titles1' di as text `inf_titles2' local fmt_col2 "%9.1f" } local col1 2 local col2 3 local col3 4 local infvars : rownames `infstats' local iv 0 foreach infvar of local infvars { local ++iv if regexm("`infvar'", "^__|^r_") mata: st_local("di`infvar'", asarray(multivrs_varnames, "`infvar'")) else if `: list infvar in model_idlist' { MakeDisplayModelID `infvar' local di`infvar' "model: `r(display_name)'" } else if `: list infvar in depvarlist' local di`infvar' "depvar: `infvar'" else if `: list infvar in intvarlist' local di`infvar' "intvar: `infvar'" else local di`infvar' "`infvar'" if "`sig_only'" == "sig_only" { di _continue as text abbrev("`di`infvar''", 20) _col(29) as result %9.2f `infstats'[`iv', `col1'] di _col(55) as result %9.2f `infstats'[`iv',`col2'] as text } else { di _continue as text abbrev("`di`infvar''", 20) _col(29) as result %9.4f `infstats'[`iv', `col1'] if "`inf_means'" == "inf_means" { di _continue _col(55) as result %9.1f `infstats'[`iv',`col2'] as text "%" di _col(75) as result %9.4f `infstats'[`iv',`col3'] } else { di _col(55) as result %9.1f `infstats'[`iv',`col2'] as text "%" } } local group_`infvar' `"`r(group_`infvar')'"' if "`group_`infvar''" != "" { foreach member of local group_`infvar' { mata: st_local("di`infvar'", asarray(multivrs_varnames, "`infvar'")) di as text abbrev("`member'", 20) _col(30) "(Grouped with " abbrev("`di`infvar''", 20) ")" } } } di _newline _continue local final_inf1 as text "Constant" _col(29) as result %9.4f local final_inf2 as text "R-squared" _col(29) as result %9.4f if "`sig_only'" == "sig_only" { di `final_inf1' r(infcons_sig) _col(55) as result %9.4f r(infcons_pos) di `final_inf2' r(infr2_sig) _col(55) as result %9.4f r(infr2_pos) } else if "`inf_means'" == "inf_means" { di `final_inf1' r(infcons_b) _col(75) as text "Overall Mean(b):" di `final_inf2' r(infr2_b) _col(75) as result %9.4f r(meanb) } else { di `final_inf1' r(infcons_b) di `final_inf2' r(infr2_b) } if "`sig_only'" == "sig_only" { if r(pos_rc) != 0 di as text "note: insufficient variation in sign for logistic regression" if r(sig_rc) != 0 di as text "note: insufficient variation in significance for logistic regression" } if `nmodeltypes' > 1 { local refmodel : word 1 of `model_idlist' MakeDisplayModelID `refmodel' local refmodel `"`r(display_name)'"' di as text "note: `refmodel' is the reference model." } if `: word count `intvarlist'' > 1 di as text "note: `: word 1 of `intvarlist'' is the reference interest variable." if `: word count `depvarlist'' > 1 di as text "note: `: word 1 of `depvarlist'' is the reference dependent variable." di as text "{hline 79}" } if "`more'" != "more" { if "`intervals'" != "" & "`sig_only'" == "sig_only" di "note: intervals option not allowed with sig_only." else if "`intervals'" != "" | "`bs_type'" != "" { di as text "Robustness Intervals:" di _newline as text "Modeling 95%" _col(29) "[" as result %-8.3f r(modeling95LB) as text "," /// as result %8.3f r(modeling95UB) as text "]" di as text "Modeling Extreme Bounds" _col(29) "[" as result %-8.3f r(extremeLB) as text "," /// as result %8.3f r(extremeUB) as text "]" di as text "Total Parametric" _col(29) "[" as result %-8.3f r(totalParLB) as text "," as result %8.3f r(totalParUB) as text "]" di as text "Total 95%" _col(29) "[" as result %-8.3f r(total95LB) as text "," as result %8.3f r(total95UB) as text "]" } if `time_taken' > 120 { local ndigits = ceil(log10(`time_taken'/60)) + 3 di _newline as text "This command took " as result %-`ndigits'.0fc round(`time_taken'/60, 1) as text " minutes (" as result round(`time_taken'/3600, .1) as text " hours) to complete." } else di _newline as text "This command took " as result round(`time_taken', .1) as text " seconds (" as result round(`time_taken'/60, .1) as text " minutes) to complete." return scalar time_taken = `time_taken' if `"`r(saveas)'"' != "" di as text "Model data saved in data file " r(saveas) "." if `"`r(savelist)'"' != "" di as text "Model list saved in file " r(savelist) "." local options_used `"`r(opts_command)' `r(opts_multivrs)'"' if `nmodeltypes' > 1 { local opts_printed 0 if `"`: list retok options_used'"' != "" { local opts_printed 1 di as text "Options used: `options_used'" } forvalues im = 1/`nmodeltypes' { if `"`r(opts`im')'"' != "" { if `opts_printed' == 0 { di as text "Options used:" local opts_printed 1 } MakeDisplayModelID `model`im'_id' di as text "`r(display_name)': " r(model`im'_opts) } } if "`sig_only'" != "sig_only" & "`more'" != "more" { di as text "Type " as result "multivrs, more" as text " to see sign and significance results for each model type." } } else { local options_used `"`options_used' `r(opts1)'"' if `"`: list retok options_used'"' != "" di as text "Options used: `options_used'" } } return add end // End program DisplayResults /* Translates model ids of the form "reg_1", "reg_2" etc. into "reg(1)", "reg(2)" etc. for display purposes. */ program MakeDisplayModelID, rclass return add syntax name (name = model_id) if regexm("`model_id'", "_[0-9]$") == 1 { local display_name : subinstr local model_id "_" "(", all return local display_name `"`display_name')"' } else return local display_name `"`model_id'"' end