Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Odds ratio and confidence intervals from glmer output

I have made a model that looks at a number of variables and the effect that has on pregnancy outcome. The outcome is a grouped binary. A mob of animals will have 34 pregnant and 3 empty, the next will have 20 pregnant and 4 empty and so on.

I have modelled this data using the glmer function where y is the pregnancy outcome (pregnant or empty).

mclus5 <- glmer(y~adg + breed + bw_start + year + (1|farm),
                data=dat, family=binomial)

I get all the usual output with coefficients etc. but for interpretation I would like to transform this into odds ratios and confidence intervals for each of the coefficients.

In past logistic regression models I have used the following code

round(exp(cbind(OR=coef(mclus5),confint(mclus5))),3)

This would very nicely provide what I want, but it does not seem to work with the model I have run.

Does anyone know a way that I can get this output for my model through R?

like image 512
EmmaC Avatar asked Oct 17 '14 02:10

EmmaC


People also ask

How do you calculate odds ratio confidence interval?

This calculator uses the following formulae to calculate the odds ratio (or) and its confidence interval (ci). or = a*d / b*c, where: a is the number of times both A and B are present, b is the number of times A is present, but B is absent, c is the number of times A is absent, but B is present, and.

What is the 95% confidence interval for the odds ratio?

In order to calculate the confidence interval, the alpha, or our level of significance, is specified. An alpha of 0.05 means the confidence interval is 95% (1 – alpha) the true odds ratio of the overall population is within range.

How do you calculate odds ratio from parameter estimate?

So the odds ratio is obtained by simply exponentiating the value of the parameter associated with the risk factor. The odds ratio indicates how the odds of the event change as you change X from 0 to 1. For instance, means that the odds of an event when X = 1 are twice the odds of an event when X = 0.


2 Answers

The only real difference is that you have to use fixef() rather than coef() to extract the fixed-effect coefficients (coef() gives you the estimated coefficients for each group).

I'll illustrate with a built-in example from the lme4 package.

library("lme4")
gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
               data = cbpp, family = binomial)

Fixed-effect coefficients and confidence intervals, log-odds scale:

cc <- confint(gm1,parm="beta_")  ## slow (~ 11 seconds)
ctab <- cbind(est=fixef(gm1),cc)

(If you want faster-but-less-accurate Wald confidence intervals you can use confint(gm1,parm="beta_",method="Wald") instead; this will be equivalent to @Gorka's answer but marginally more convenient.)

Exponentiate to get odds ratios:

rtab <- exp(ctab)
print(rtab,digits=3)
##               est 2.5 % 97.5 %
## (Intercept) 0.247 0.149  0.388
## period2     0.371 0.199  0.665
## period3     0.324 0.165  0.600
## period4     0.206 0.082  0.449

A marginally simpler/more general solution:

library(broom.mixed)
tidy(gm1,conf.int=TRUE,exponentiate=TRUE,effects="fixed")

for Wald intervals, or add conf.method="profile" for profile confidence intervals.

like image 170
Ben Bolker Avatar answered Oct 11 '22 09:10

Ben Bolker


I believe there is another, much faster way (if you are OK with a less accurate result).

From: http://www.ats.ucla.edu/stat/r/dae/melogit.htm

First we get the confidence intervals for the Estimates

se <- sqrt(diag(vcov(mclus5)))
# table of estimates with 95% CI
tab <- cbind(Est = fixef(mclus5), LL = fixef(mclus5) - 1.96 * se, UL = fixef(mclus5) + 1.96 * se)

Then the odds ratios with 95% CI

print(exp(tab), digits=3)
like image 30
Gorka Avatar answered Oct 11 '22 11:10

Gorka