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/