{smcl}
{* 16 Jun 2014}{...}
{cmd:help qqplot3}
{hline}
{title:Title}
{p2colset 5 18 18 2}{...}
{p2col :{hi:qqplot3} {hline 2}}plot the unweighted and weighted quantiles of one variable against the corresponding quantiles of another variable (Q-Q plot){p_end}
{p2colreset}{...}
{title:Syntax}
{p 8 17 2}
{cmd:qqplot3} {it:{help varname:varname1} {help varname:varname2}} {ifin} [{it:{help qqplot3##weight:weight}}] {cmd:,}
[ {opt g:enerate(newvar1 newvar2)} ]
{p 8 17 2}
{cmd:qqplot3} {it:{help varname:varname}} {ifin} [{it:{help qqplot3##weight:weight}}] {cmd:,}
{opt by(groupvar)} [ {opt g:enerate(newvar1 newvar2)} ]
{synoptset 24 tabbed}{...}
{synopthdr}
{synoptline}
{syntab :Main}
{p2coldent :* {opt by:(groupvar)}}
specifies a group variable to specify precisely two
groups of {it:{help varname:varname}}. {opt by()} may be only be specified with a single variable name.
{p_end}
{syntab :Options}
{p2coldent :{opt g:enerate(newvar1 newvar2)}} specifies two new variable names to hold
the quantiles.{p_end}
{synoptline}
{p2colreset}{...}
{p 4 6 2}* {opt by(groupvar)} must be specified when only one {it:{help varname:varname}} is provided.{p_end}
{marker weight}{...}
{p 4 6 2}
{opt fweight}s, {opt aweight}s, and {opt pweight}s are allowed
(see {manhelp weight U:11.1.6 weight}).
{p_end}
{title:Description}
{pstd}
{cmd:qqplot3} generates a quantile-quantile plot (Q-Q plot), in which the quantiles of one variable are plotted
against the quantiles of another. {cmd:qqplot3} holds three advantages over {help qqplot}. First and most importantly,
{cmd:qqplot3} allows the user to specify weights. This enables visual inspection of unadjusted and weighted baseline
covariates to assess balance, a necessary condition for causal inference. This similarly makes Q-Q plots
accessible to investigators with complex survey designs using sampling weights. Second, unlike {help qqplot}, {cmd:qqplot3}
provides a "by" option for a grouping variable (such as treatment assignment) - a convenience factor for the user.
And third, {cmd:qqplot3} provides the option of saving the quantiles generated by the program, which may be useful for
conducting additional analyses.
{pstd}
{cmd:qqplot3} draws heavily on the code used in {help cquantile}, a user-written program by Nicholas J. Cox (downloadable from SSC).
However, {cmd:qqplot3} relies on {help pctile} for calculating the quantiles, using the default method, which inverts the empirical distribution
function by using averages, where the function is flat (this is the same method used by {cmd:summarize}; see {manhelp summarize R}). This method differs
somewhat from the interpolation method used in {help cquantile} and {help qqplot} (see {mansection D pctileMethodsandformulas:{it:Methods and formulas}}
in {bf:[D] pctile}). {cmd:qqplot3} uses the default method because weights cannot be specified in {help pctile} when the interpolation method
({opt altdef}) is used. That said, the quantiles generated between the two methods are quantitatively similar.
{pstd}
{help fixsort}, another program written by Nicholas J. Cox (downloadable from SSC), must be installed in order for {cmd:qqplot3} to
run (an error message will appear, otherwise).
{marker examples}{...}
{title:Examples}
{hline}
{pstd}
{opt Testing for covariate balance in reweighted data:}{p_end}
{pstd}Load example data{p_end}
{p 4 8 2}{stata "webuse cattaneo2, clear":. webuse cattaneo2, clear}{p_end}
{pstd}Estimate propensity score for the binary treatment {cmd:mbsmoke} and generate inverse probability of treatment weights (IPTW) {p_end}
{p 4 8 2}{stata "logit mbsmoke mmarried mage c.mage#c.mage fbaby medu":. logit mbsmoke mmarried c.mage##c.mage fbaby medu}{p_end}
{p 4 8 2}{stata "predict pscore, pr":. predict pscore, pr}{p_end}
{p 4 8 2}{stata "gen iptw = cond(mbsmoke, 1/pscore, 1/(1-pscore))":. gen iptw = cond(mbsmoke, 1/pscore, 1/(1-pscore))}{p_end}
{pstd}Inspect balance in the distributions of mother's age ({cmd:mage}) by smoking status ({cmd:mbsmoke}) - before and after IPTW adjustment{p_end}
{p 4 8 2}{stata "qqplot3 mage, by(mbsmoke)":. qqplot3 mage, by(mbsmoke)}{p_end}
{p 4 8 2}{stata "qqplot3 mage [pw=iptw], by(mbsmoke)":. qqplot3 mage [pw=iptw], by(mbsmoke)}{p_end}
{hline}
{pstd}
{opt Survey with sampling weights:}{p_end}
{pstd}Load example data{p_end}
{p 4 8 2}{stata "use http://www.stata-press.com/data/r13/nhanes2b.dta, clear":. use http://www.stata-press.com/data/r13/nhanes2b.dta, clear}{p_end}
{pstd}Inspect the distributions of systolic blood pressure ({cmd:bpsystol}) by ({cmd:female}) - without and with sampling weights, and save the quantiles{p_end}
{p 4 8 2}{stata "qqplot3 bpsystol, by(female) gen(bp0 bp1)":. qqplot3 bpsystol, by(female) gen(bp0 bp1)}{p_end}
{p 4 8 2}{stata "qqplot3 bpsystol [pw=finalwgt], by(female) gen(bpw0 bpw1)":. qqplot3 bpsystol [pw=finalwgt], by(female) gen(bpw0 bpw1)}{p_end}
{hline}
{title:Saved results}
{p 4 8 2}
{cmd:qqplot3} stores the following result in {cmd: r()}:
{synoptset 10 tabbed}{...}
{p2col 5 15 19 2: Scalar}{p_end}
{synopt:{cmd:r(nq)}}the number of quantiles used to compute percentiles. This value will always be equal to the variable with the smallest N, + 1 {p_end}
{marker citation}{title:Citation of {cmd:mmws}}
{p 4 8 2}{cmd:qqplot3} is not an official Stata command. It is a free contribution
to the research community, like a paper. Please cite it as such: {p_end}
{p 4 8 2}
Linden, Ariel. 2014.
qqplot3: Stata module for plotting unweighted and weighted Q-Q plots.
{p_end}
{title:Author}
{p 4 4 2}
Ariel Linden{break}
President, Linden Consulting Group, LLC{break}
Ann Arbor, MI, USA{break}
{browse "mailto:alinden@lindenconsulting.org":alinden@lindenconsulting.org}{break}
{browse "http://www.lindenconsulting.org"}{p_end}
{title:Acknowledgments}
{p 4 4 2}
I wish to thank Nicholas J. Cox for his support while developing {cmd:qqplot3} and to Kit Baum for suggesting the name {cmd:qqplot3},
and recommending the error capturing code. Finally, I would like to thank Chuck Huber at StataCorp for his insights that led me to
develop the program.{p_end}
{title:Also see}
{psee}
Online: {helpb qqplot}, {helpb pctile}, {helpb separate}, {helpb cquantile} (if installed), {helpb fixsort} (if installed)
{p_end}