Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Combining ROC curves in one graph

From   Charles Lindsey <>
Subject   Re: st: Combining ROC curves in one graph
Date   Fri, 19 Aug 2011 16:25:39 -0500

Kim Peters wrote:
> I have plotted three ROC curves using
> roctab x1 y1, graph name(rocgraph1) nodraw
> roctab x2 y2, graph name(rocgraph2) nodraw
> roctab x3 y3, graph name(rocgraph3) nodraw
> How can I combine these three roclines into one graph.
>  || or (...) do not seem to work.

All the receiver operating characteristic (ROC) commands in Stata use a
single status variable, with one or more classification variables. You can automatically draw ROC curves for different classifiers using the same status variable. A new command, -rocreg- can be used to draw ROC curves for different status variables in the same graph.

Kim can use the new command -rocreg- to draw the graph she desires.

Here is a short answer to Kim's question.

You can use -rocreg- to fit several models, create the new variables
containing the false-positive rate and ROC values, and then plot the ROC
curves using -twoway-.

Here is a more detailed answer to Kim's question.

Let's consider an example using the Hanley data, where an individual's
neurological disease status is classified on a single 5-scale rating.

In the code below, we load the data and create a fictional disease-status variable, -ndisease-, which zeroes the true status variable, -disease-, with probability 2/10.

. set seed 12345671
. webuse hanley, clear
. generate ndisease = disease
. replace ndisease = 0 if runiform() > .8

Now we use -rocreg- to estimate a nonparametric ROC curve of -disease- and classification variable -rating-. We use the -quietly- prefix to suppress output, and the -nobootstrap- option to prevent the bootstrap calculation of standard errors because we are only interested in the estimates of the false-positive rate and ROC value.

. quietly rocreg disease rating, nobootstrap

The ROC and false-positive rate values are saved as variables -_roc_rating- and -_fpr_rating-. We rename the -_roc_rating- and -_fpr_rating- variables before fitting the next ROC model, because we will need them for the graph.

. rename _roc_rating roc_disease
. rename _fpr_rating fpr_disease

Now we run -rocreg- on the -ndisease- status variable.

. quietly rocreg ndisease rating, nobootstrap

We rename the generated ROC and false-positive rate variables that this
execution of rocreg creates.

. rename _roc_rating roc_ndisease
. rename _fpr_rating fpr_ndisease

Now we will draw the ROC curves with -rating- as a classifier for -disease-, and with -rating- as a classifier for -ndisease-. -twoway scatter- is used with the || overlay operator. Since we are using the empirical estimate of the ROC curve, We use the -connect(J)- option rather than a simple line connector.

. twoway scatter roc_disease fpr_disease, connect(J) sort || ///
  scatter roc_ndisease fpr_ndisease, connect(J) sort         ///
  legend(label(1 disease) label(2 ndisease))

Kim Peters also wrote:
> Moreover, I would like to do the same thing after rocfit and rocplot:
> rocfit x1 y1
> rocplot, confband name(rocfit1) nodraw
> rocfit x2 y2
> rocplot, confband name(rocfit2) nodraw
> rocfit x3 y3
> rocplot, confband name(rocfit3) nodraw
> P.S. I don't want to array the separately drawn graphs into one using
> graph combine. I just need one graph that contains all three ROC
> lines.

Kim can use a similar method with -rocreg- and the -probit ml- options to get combined ROC curves for the parametric case.

Charles Lindsey,

*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index