[R] glm: getting the confidence interval for an Odds Ratio, when using predict()

Dominic Comtois dominic.comtois at gmail.com
Tue Mar 20 14:16:53 CET 2012


Case solved. Thanks a lot Peter!

Dominic C.


-----Message d'origine-----
De : peter dalgaard [mailto:pdalgd at gmail.com] 
Envoyé : 20 mars 2012 07:57
À : Dominic Comtois
Cc : r-help at r-project.org help
Objet : Re: [R] glm: getting the confidence interval for an Odds Ratio, when
using predict()

[Oops, forgot cc. to list]

On Mar 20, 2012, at 04:40 , Dominic Comtois wrote:

> I apologize for the errors in the previous code. Here is a reworked
example. It works, but I suspect problems in the se calculation. I changed,
from the 1st prediction to the 2nd only one covariate, so that the OR's CI
should be equal to the exponentiated variable's coefficient and ci. And we
get something different:

Yep. Classical rookie mistake: Forgot to take sqrt() in the se. I then get

> se <- sqrt(contr %*% V %*% t(contr))
> 
> # display the CI
> exp(contr %*% coef(model) + qnorm(c(.025,.50,.975))*se)
[1] 0.655531 1.686115 4.336918
> 
> # the point estimate is ok, as verified with
> exp(model$coefficients[3])
 x2cat2
1.686115 
> 
> # however I we'd expect to find upper and lower bound equal # to the 
> exponentiated x2cat coefficient CI exp(confint(model))[3,]
Waiting for profiling to be done...
   2.5 %    97.5 % 
0.6589485 4.4331058 

which is as close as you can expect since the confint method is a bit more
advanced than +/-2SE.

-pd


> x1 <- factor(rbinom(100,1,.5),levels=c(0,1))
> x2 <- 
> factor(round(runif(100,1,2)),levels=c(1,2),labels=c("cat1","cat2"))
> outcome <- rbinom(100,1,.2)
> 
> model <- glm(outcome~x1+x2,family=binomial(logit))
> newd <- data.frame(x1=factor(c(0,0),levels=c(0,1)),
>                   x2=factor(c("cat1","cat2"),levels=c("cat1","cat2")),
>                   outcome=c(1,1))
> 
> M <- model.matrix(formula(model), data=newd) V <- vcov(model) contr <- 
> c(-1,1) %*% M se <- sqrt(contr %*% V %*% t(contr))
> 
> # display the CI
> exp(contr %*% coef(model) + qnorm(c(.025,.50,.975))*se)
> 
> # the point estimate is ok, as verified with
> exp(model$coefficients[3])
> 
> # however I we'd expect to find upper and lower bound equal # to the 
> exponentiated x2cat coefficient CI exp(confint(model))[3,]
> 
> Many thanks,
> 
> Dominic C.

--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000
Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list