*! 1.2.0 NJC 17 May 2002 * 1.1.0 NJC 12 Apr 2002 * 1.0.0 NJC 15 Oct 2001 program define qfrplot7 version 7.0 syntax [ , Symbol(str) BY(varname) Gap(int 5) L1title(str) /* */ super NORMal GAUSSian SAving(str asis) TItle(str asis) * ] * no by() if "`by'" != "" { di as err "by() not supported" exit 198 } * get model results tempvar fit residual quietly { predict `fit' if e(sample) su `fit' if e(sample), meanonly replace `fit' = `fit' - r(mean) predict `residual' if e(sample), res label var `fit' "Fitted - mean" label var `residual' "Residual" } * set up graph defaults if "`symbol'" == "" { if "`super'" == "" { local syf "oi" local syr "pi" } else local symbol "op" } else if "`super'" == "" { local symbol = trim("`symbol'") local len = length("`symbol'") local j = 1 local acc = 0 /* 1 => accumulate chars */ forval i = 1/`len' { local c = substr("`symbol'",`i',1) if "`c'" == "[" { /* start accumulating */ local t`j' "`c'" local acc = 1 } else if "`c'" == "]" { /* stop accumulating */ local t`j' "`t`j''`c'" local acc = 0 local j = `j' + 1 } else if `acc' { /* accumulating */ local t`j' "`t`j''`c'" } else { /* other chars */ local t`j' "`c'" local j = `j' + 1 } } if "`t1'" == "" | "`t2'" == "" { di as err "invalid symbol() option" exit 198 } else { local syf "`t1'i" local syr "`t2'i" } } if `"`l1title'"' != "" { local default 0 } else local default 1 local norm = cond("`normal'`gaussian'" != "", "norm", "") local gauss = cond("`gaussian'" != "", "gauss", "") * graph if "`super'" == "" { if `"`saving'`title'"' != "" { tempfile savefile local temp ", saving(`savefile')" } gph open `temp' if `default' { local l1title "Quantiles of fitted - mean" } Q `fit' `residual', `options' l1(`"`l1title'"') sy(`syf') /* */ gap(`gap') bbox(0,0,23063,15500,923,444,0) `norm' `gauss' if `default' { local l1title "Quantiles of residual" } Q `residual' `fit', `options' l1(`"`l1title'"') sy(`syr') /* */ gap(`gap') bbox(0,16500,23063,32000,923,444,0) `norm' `gauss' gph close if "`temp'" != "" { if `"`title'"' != "" { local Title `"ti(`title')"' } if `"`saving'"' != "" { local Saving `"sa(`saving')"' } graph using "`savefile'", `Title' `Saving' } } else { if `default' { local l1title "Quantiles of fitted - mean and residual" } if `"`saving'`title'"' != "" { if `"`saving'"' != "" { local Saving `"saving(`saving')"' } if `"`title'"' != "" { local Title `"ti(`title')"' } } Q `fit' `residual', `options' l1(`"`l1title'"') sy(`symbol') /* */ gap(`gap') `norm' `gauss' `Saving' `Title' } end * modified from -quantil2- STB-61 program def Q, sort version 7.0 syntax varlist [, A(real 0.5) noBOrder SOrt Reverse NORM GAUSS * ] tokenize `varlist' local nvars : word count `varlist' * compute (i - a)/(n - 2a + 1) or invnorm() of that marksample touse tempvar pp order quietly { if "`norm'" == "" { bysort `touse' (`1') : gen `pp' = /* */ (_n - `a') / (_N - 2 * `a' + 1) if `touse' label var `pp' "Fraction of the data" local defxla "0(0.25)1" } else { local desc = cond("`gauss'" != "", "Gaussian", "normal") bysort `touse' (`1') : gen `pp' = /* */ invnorm((_n - `a') / (_N - 2 * `a' + 1)) if `touse' label var `pp' "Quantiles of standard `desc'" local defxla "-2(1)2" } sort `pp' gen `order' = _n forval i = 1/`nvars' { tempvar y`i' sort ``i'' gen `y`i'' = ``i''[`order'] _crcslbl `y`i'' ``i'' local ylist "`ylist'`y`i'' " } } if "`border'" == "" { local border "border" } local options : subinstr local options "xla" "xla", count(local hasxla) if !`hasxla' { local options `"`options' xla(`defxla')"' } local options : subinstr local options "yla" "yla", count(local hasyla) if !`hasyla' { local options `"`options' yla"' } qui if "`reverse'" != "" { replace `pp' = 1 - `pp' } gra `ylist' `pp' , `border' sort `options' end