Solved – How to estimate Relative Risks in Multivariate Binary Logistic Regression Models, instead of Odds Ratios

logisticmultivariate analysisodds-ratiorelative-risk

All software programs I have tried report only odds ratios (ORs) for binary logistic regression predictors (as exponential of the betas).

I am interested to know how can I compute the relative risk (RR) from a binary logistic regression model?

My reason is that RRs (besides ORs) would make my variables more understandable. Also I see many journals (even many of the top ones) confuse these two, and I want to hopefully have a good report with scientific merit, and not repeating previous mistakes.

I found some methods over the net (which I have not tried yet). Here and Here for example.

However in a forum, I saw some experts had opposed reporting RRs for logistic regressions. For example:

"It is incorrect to use the relative risk as a measure of association in a logistic regression. The measure of association in a logistic regression is the odds ratio. The odds ratio is an approximation of the relative risk. The approximation becomes progressively better as the disease becomes progressively rarer. Regardless of whether the disease is rare or not, inferences drawn from a logistic regression are valid. Please do not report a logistic regression using relative risk. It is not correct to do so." –John Sorkin

Or

"I am curious why one would want risk ratios. Unlike odds ratios, they are not interpretable without reference to the base risk. For example a risk ratio of 2 cannot possibly apply to anyone with a starting risk exceeding 1/2." –Frank Harrell

So my questions are:

  1. Is it a good way to estimate RR for binary logistic regression? Or do you agree with the above quotes, disagreeing with RR for logistic regressions?
  2. Could you please let me know why, if you agree or disagree?
  3. Do you know of any implemented algorithms (e.g., a macro or an R function) which can do it without needing to manually computing it?

Best Answer

Here is more or less the replication of the SAS example mentioned in the comments to the question.

library("sas7bdat")
eyestudy =read.sas7bdat("eyestudy.sas7bdat")
sapply(1:ncol(eyestudy),function(z)summary(eyestudy[,z]))
for(i in c(2:3))eyestudy[,i]<-as.factor(eyestudy[,i])

tabfq=with(eyestudy, table(carrot, lenses))
(tabfqm=addmargins(tabfq))
prop.table(tabfq, 1)
#OR =  (32/17)/(21/30)  = 2.69
#RR =   (32/49)/(21/51)  = 1.59
(OR=tabfqm[1,2]/tabfqm[1,1]/(tabfqm[2,2]/tabfqm[2,1]))
(RR=tabfqm[1,2]/tabfqm[1,3]/(tabfqm[2,2]/tabfqm[2,3]))

#logit
(ml1<-glm(lenses~carrot, data=eyestudy,family =binomial(link = "logit")))
summary(ml1)
exp(-coefficients(ml1)) #OR
exp(-cbind(coef(ml1), confint(ml1)))  
(ml10 <- glm(lenses~1, data=eyestudy,family =binomial(link = "logit")))
anova(ml10, ml1, test="Chisq")

#log
(ml2<-glm(lenses~carrot, data=eyestudy,family =binomial(link = "log")))
summary(ml2)
exp(-coefficients(ml2)) #RR
exp(-cbind(coef(ml2), confint(ml2)))  

#poisson
(ml3<-glm(lenses~carrot, data=eyestudy,family =poisson(link = "log")))
summary(ml3)
exp(-coefficients(ml3)) #RR
exp(-cbind(coef(ml3), confint(ml3)))  

#poisson 2
(ml4<-glm(lenses~carrot+gender+latitude, data=eyestudy,family =poisson(link = "log")))
summary(ml4)
exp(-coefficients(ml4)) #RR
exp(-cbind(coef(ml4), confint(ml4))) 
Related Question