pscale Construct annotations for a probability scale pscale

Visualizing Categorical Data: pscale

$Version: 1.0 (4 Dec 1997)
Michael Friendly
York University

The pscale macro ( [download] get

Construct annotations for a probability scale

The PSCALE macro constructs an annotate data set to draw an unequally- spaced scale of probability values on the vertical axis of a plot (at either the left or right). The probabilities are assumed to correspond to equally-spaced values on a scale corresponding to Normal quantiles (using the probit transformation) or Logistic quantiles (using the logit transformation).


The PSCALE macro is called with keyword parameters. The arguments may be listed within parentheses in any order, separated by commas. For example:

  proc gplot;
     plot logit * X / anno=pscale;


Name of annotate data set [Default: ANNO=PSCALE]
Synonym for ANNO=
Linear scale: logit or probit [Default: SCALE=LOGIT]
Low scale value [Default: LO=-3]
High scale value [Default: HI=3]
List of probability values to be displayed on the axis, in the form of a list acceptable in a DO statement. [Default: PROB=%str(.05, .1 to .9 by .1, .95)]
X-axis percent for the axis. AT=100 plots the axis at the right; AT=0 plots the axis at the left. [Default: AT=100]
Length of tick marks [Default: TICKLEN=1.3]
Size of value labels
Font for value labels


This example analyses improvement in arthritis in a logistic regression as a function of treatment, sex and age, with a binary outcome, 'better'. It produces plots of predicted log odds, with a scale of probabilities at the right (AT=100).
%include vcd(pscale);        *-- or include in an autocall library;
%include data(arthrit);

proc logistic data=arthrit;
   format better outcome.;
   model  better = _sex_  _treat_  age;
   output out=results p=predict l=lower u=upper
                      xbeta=logit stdxbeta=selogit / alpha=.33;
proc sort data=results;
   by sex treat age;

data pscale;
   set pscale;
   sex = 'Female'; output;
   sex = 'Male  '; output;
proc sort;
   by sex;
%bars(data=results, var=logit, cvar=treat, class=age, by=sex, barlen=selogit);

proc gplot data=results;
   plot logit   * age = treat / vaxis=axis1 haxis=axis2
                                nolegend anno=bars frame;
   by sex;
   axis1 label=(h=1.3 a=90 f=duplex 'Log Odds Improved (+/- 1 SE)')
         value=(h=1.2) order=(-3 to 3);
   axis2 label=(h=1.3 f=duplex)
         value=(h=1.2) order=(20 to 80 by 10) offset=(2,5);
   symbol1 v=+ h=1.4 i=join l=3 c=black;
   symbol2 v=$ h=1.4 i=join l=1 c=red;

See also

bars Create an annotate data set to draw error bars
catplot Plot observed and predicted logits for logit models
label Create an Annotate dataset to label observations
logodds Plot empirical log-odds for logistic regression
points Create an Annotate dataset to draw points in a plot