Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: reporting odds for N categories


From   May Boggess <[email protected]>
To   [email protected]
Subject   Re: st: reporting odds for N categories
Date   Thu, 22 Sep 2005 13:50:16 -0500

On Thursday morning, Dan asked about odds and odds ratios:

I have a cross sectional dataset which reports the health outcomes and covariate information for patients belonging to Z clinics.

I am trying to compare the performance (ie. % of patients in a clinic that failed health outcome) for each of the Z clinics, but can not find a way that I can produce results suitable for graphing from either the logistic or tabodds commands, as the reference group is, by default, the clinic with the lowest numeric ID.

How can I set the reference category to the mean, so that I can graph the odds of failing, controlling for A and B, for each of the Z clinics in the dataset?

Dan has asked a few different things, but here I'll just concentrate on one aspect of his question: how to graph odds.

One can use the epitab command -tabodds- to calculate odds. For example:

clear
webuse bdesop
expand freq
tabodds case alc
di " p= " 40/(40+386)
di "odds= " (40/(40+386))/(1- 40/(40+386))

The last two lines remind us how odds are calculated: odds=p/(1-p).
We can use a logistic model to obtain the same results. The reason to do that is that we can get the probabilities, and thus odds, as variables in the dataset:

clear
webuse bdesop
expand freq
tabodds case alc
xi:logit case i.alc
predict p
gen odds=p/(1-p)
tabdisp alc, c(p odds)

Now -twoway- can be used to create a graph:

twoway scatter odds alc

In order to be able to compare odds, we need confidence intervals as well. I find the easiest way is to use -predictnl- instead of -predict-, since it can calculate the confidence intervals as well:

clear
webuse bdesop
expand freq
tabodds case alc
xi:logit case i.alc
predictnl odds=predict(p)/(1-predict(p)), ci(lb ub)
label var odds "odds"
tabdisp alc, c(odds lb ub)

Notice that in the intervals we produce this way are close to but not exactly the same as those that -tabodds- calculates (which are from Clayton and Hills "Statistical Models in Epidemiology" (1993) p. 169).

Again I can use -twoway- to get a graph:

twoway rcap lb ub alc || connected odds alc, legend(off) sort

This is essentially the same as the graph we can obtain from -tabodds- using the -ciplot- option. Why go to all this trouble then?

So we can go a little further. In Dan's case he needs to adjust for some covariates. In example dataset I have agegrp to adjust for:

clear
webuse bdesop
expand freq
tabodds case alc
xi:logit case i.alc agegrp
predictnl odds=predict(p)/(1-predict(p)), ci(lb ub)
label var odds "odds"
tabdisp alc agegrp, c(odds)

I can now choose what I would like to graph, but for one example I will
graph the odds for age group 45-54:

clear
webuse bdesop
expand freq
tabodds case alc
xi:logit case i.alc agegrp
predictnl odds=predict(p)/(1-predict(p)), ci(lb ub)
label var odds "odds"
tabdisp alc agegrp, c(odds)

keep if age==3
#d;
twoway rcap lb ub alc
|| connected odds alc,
legend(off) sort
title("Odds for age group 45-54");
#d cr


-- May
[email protected]




*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/




© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index