I am interested in when it is best to exponentiate a difference in log-odds
Here is a sample problem in the stan language, three groups of forty binary observations, group 1 with hit probability = 0.2, group 2 with hit probability of 0.5, group 3 with hit probability of 0.8. I want to calculate the odds ratio for the comparison of group 1's hit rate to group 2's, but I am not sure when to exponentiate the difference in log odds.
# create data
df <- data.frame(group = factor(rep(letters[1:3],times=40)), hit = rbinom(120, 1, prob = c(.2,.5,.8)))
# put data into list
dList <- list(N = nrow(df),
nG = nlevels(df$group),
gIndex = as.integer(df$group),
hit = df$hit)
# model string
ms <- "
data{
int<lower=1> N;
int<lower=1> nG;
int<lower=1,upper=nG> gIndex[N];
int<lower=0,upper=1> hit[N];
}
parameters{
vector [nG] a;
}
model{
vector [N] mod;
a ~ normal(0,10);
hit ~ binomial_logit(1, a[gIndex]);
}
"
# generate chains
fit <- stan(model_code = ms, data = dList, warmup = 1e3, iter = 2e3, chains = 1)
# logistic regression output (in log odds)
print(fit, pars = "a", probs = c(0.025, 0.975))
# mean se_mean sd 2.5% 97.5% n_eff Rhat
# a[1] -2.29 0.02 0.55 -3.48 -1.32 892 1.01
# a[2] -0.12 0.01 0.31 -0.68 0.51 1047 1.00
# a[3] 1.81 0.02 0.47 0.98 2.82 889 1.00
# extract posterior parameter estimates
df <- data.frame(rstan::extract(fit, pars = "a"))
So now in the df
object we have three chains of estimated log-odds for each group. I want to calculate the odds ratio for the comparison of group 1 (a[1]
) to group 2 (a[2]
)
Method 1
Using the first method, we can calculate the difference in log odds by subtracting the estimated log odds in the second group from the estimated log odds in the first group for every row of the data.frame
library(dplyr)
df <- df %>% mutate(diff12 = a.1 - a.2)
Now we can take the mean of that chain of difference scores, and then exponentiate that value
exp(mean(df$diff12))
# [1] 0.1131707
Method 2
The other way to do it is to once again subtract the log odds estimates for group 2 from the log odds estimates from group 1, but to then exponentiate each of those difference scores and take the mean of those exponentiated scores, like so:
df <- df %>% mutate(e_diff12 = exp(a.1 - a.2))
mean(df$e_diff12)
# [1] 0.1372593
As you can see the odds ratios are different using the two different methods, so which is the more correct way to do it?