# Transform odds ration (OR) in the context of multivariate meta-analysis in R (metafor package)

I would like to conduct a multivariate meta-analysis (multiple treatment arm meta analysis) comparing the effect of different drugs. My outcome measure is discrete and describes the number of occurrences of a specific side effect during the period of observation. The studies that i would like to include report the odds ratio (OR) and their 95%-CI of this side effect for every drug relative to a “baseline drug”. The problem is that studies defined different drugs to be the baseline.

• Is it valid to just transform my OR to bring them to a common baseline drug?
• Is it valid to transform the 95%-CI of the OR in the same way?
• There is typically no 95%-CI reported for the baseline drug. Thus
when I transform this baseline drug, I have no 95%-CI. Is there a way to derive a 95%-CI in this case?

Here is some dummy data:

structure(list(study = structure(c(2L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L), .Label = c("Liu", "Mark", "Smith"
), class = "factor"), drug = structure(c(1L, 2L, 3L, 4L, 5L,
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("A", "B",
"C", "D", "E"), class = "factor"), OR = c(1, 1.5, 1.7, 1.8, 2.5,
2.8, 1.1, 1, 2.3, 1.2, 1.8, 1.2, 2.5, 1, 1.8), ci_lb = structure(c(13L,
5L, 4L, 9L, 11L, 12L, 2L, 13L, 10L, 1L, 6L, 3L, 8L, 13L, 7L), .Label = c("0.5556",
"0.6225", "0.7619", "1.2628", "1.365", "1.4212", "1.5758", "1.6208",
"1.7048", "1.7435", "1.9497", "2.3531", "NA"), class = "factor"),
ci_ub = structure(c(13L, 2L, 7L, 5L, 10L, 11L, 1L, 13L, 9L,
4L, 8L, 3L, 12L, 13L, 6L), .Label = c("1.5775", "1.635",
"1.6381", "1.8444", "1.8952", "2.0242", "2.1372", "2.1788",
"2.8565", "3.0503", "3.2469", "3.3792", "NA"), class = "factor")), .Names = c("study",
"drug", "OR", "ci_lb", "ci_ub"), row.names = c(NA, -15L), class = "data.frame")

> my_data
study drug  OR  ci_lb  ci_ub
1   Mark    A 1.0     NA     NA
2   Mark    B 1.5  1.365  1.635
3   Mark    C 1.7 1.2628 2.1372
4   Mark    D 1.8 1.7048 1.8952
5   Mark    E 2.5 1.9497 3.0503
6  Smith    A 2.8 2.3531 3.2469
7  Smith    B 1.1 0.6225 1.5775
8  Smith    C 1.0     NA     NA
9  Smith    D 2.3 1.7435 2.8565
10 Smith    E 1.2 0.5556 1.8444
11   Liu    A 1.8 1.4212 2.1788
12   Liu    B 1.2 0.7619 1.6381
13   Liu    C 2.5 1.6208 3.3792
14   Liu    D 1.0     NA     NA
15   Liu    E 1.8 1.5758 2.0242

my_data_1 <- my_data[my_data$study=="Mark",] my_data_2 <- my_data[my_data$study=="Smith",]
my_data_3 <- my_data[my_data$study=="Liu",] my_data_2$OR <- my_data_2$OR * 1/my_data_2$OR[my_data_2$drug=="A"] my_data_3$OR <- my_data_3$OR * 1/my_data_3$OR[my_data_3$drug=="A"] my_data_2$ci_lb <- my_data_2$ci_lb * 1/my_data_2$OR[my_data_2$drug=="A"] my_data_3$ci_lb <- my_data_3$ci_lb * 1/my_data_3$OR[my_data_3$drug=="A"] my_data_2$ci_ub <- my_data_2$ci_ub * 1/my_data_2$OR[my_data_2$drug=="A"] my_data_3$ci_ub <- my_data_3$ci_ub * 1/my_data_3$OR[my_data_3$drug=="A"] my_data_new <- rbind(my_data_1, my_data_2, my_data_3) my_data_new my_data_new$OR <- round(my_data_new$OR, 2) my_data_new$ci_lb <- round(my_data_new$ci_lb, 2) my_data_new$ci_ub <- round(my_data_new$ci_ub, 2) > my_data_new study drug OR ci_lb ci_ub 1 Mark A 1.00 NA NA 2 Mark B 1.50 1.36 1.64 3 Mark C 1.70 1.26 2.14 4 Mark D 1.80 1.70 1.90 5 Mark E 2.50 1.95 3.05 6 Smith A 1.00 2.35 3.25 7 Smith B 0.39 0.62 1.58 8 Smith C 0.36 NA NA 9 Smith D 0.82 1.74 2.86 10 Smith E 0.43 0.56 1.84 11 Liu A 1.00 1.42 2.18 12 Liu B 0.67 0.76 1.64 13 Liu C 1.39 1.62 3.38 14 Liu D 0.56 NA NA 15 Liu E 1.00 1.58 2.02  • Good question. Small note: The OR of the baseline drug compared to itself is always 1, that's why it is typically not reported. May 5, 2014 at 15:41 ## 1 Answer Is it valid to just transform my OR to bring them to a common baseline drug? Yes, a little algebra will show you that this is ok. I.e. you simply divide by the OR of the drug you want to use as baseline. There is typically no 95%-CI reported for the baseline drug. Thus when I transform this baseline drug, I have no 95%-CI. Is there a way to derive a 95%-CI in this case? The baseline drug has$OR = 1$and$CI = (1,1)$by definition. As you benchmark all drugs against, say drug$A$, then the$OR$, lower, and upper confidence limits is$1$for drug$A$. Hence you can substitute 1 where you have NAin your dataset. Is it valid to transform the 95%-CI of the OR in the same way? If the studies give you no other information, then I guess, that this is the best you can do. You simple use the$CI = (1,1)$for the baseline drugs. I think your example is a bit weird as the CIs are symmetric around the OR on the scale given. If you have a decent number of observations CI limits should be approximated by$\exp(\log(OR) \pm 1.96 SE)$, i.e. the CIs should be symmetric around the$\log(OR)$on a logarithmic scale. This does not seem to be the case here. I guess you need to know how each study have computed their$OR$s and$CI$s, if you want something more sophisticated. Here is some simple code that does the above for you. First I clean your data a little bit: # Convert factors to numeric my_data$ci_lb <- as.numeric(as.character(my_data$ci_lb)) my_data$ci_ub <- as.numeric(as.character(my_data$ci_ub)) my_data$OR    <- as.numeric(as.character(my_data$OR)) # Substitute NAs with 1 my_data[is.na(my_data)] <- 1  Next, we choose our baseline drug, say$A$, and divide the$OR$s and$CI$s with this: ref <- my_data[my_data$drug == "A", 3:5]
tmp <- ref[rep(1:nrow(ref), table(my_data$study)), ] my_data[,6:8] <- round(my_data[, 3:5]/tmp, 4) print(my_data) # study drug OR ci_lb ci_ub OR.1 ci_lb.1 ci_ub.1 #1 Mark A 1.0 1.0000 1.0000 1.0000 1.0000 1.0000 #2 Mark B 1.5 1.3650 1.6350 1.5000 1.3650 1.6350 #3 Mark C 1.7 1.2628 2.1372 1.7000 1.2628 2.1372 #4 Mark D 1.8 1.7048 1.8952 1.8000 1.7048 1.8952 #5 Mark E 2.5 1.9497 3.0503 2.5000 1.9497 3.0503 #6 Smith A 2.8 2.3531 3.2469 1.0000 1.0000 1.0000 #7 Smith B 1.1 0.6225 1.5775 0.3929 0.2645 0.4858 #8 Smith C 1.0 1.0000 1.0000 0.3571 0.4250 0.3080 #9 Smith D 2.3 1.7435 2.8565 0.8214 0.7409 0.8798 #10 Smith E 1.2 0.5556 1.8444 0.4286 0.2361 0.5680 #11 Liu A 1.8 1.4212 2.1788 1.0000 1.0000 1.0000 #12 Liu B 1.2 0.7619 1.6381 0.6667 0.5361 0.7518 #13 Liu C 2.5 1.6208 3.3792 1.3889 1.1404 1.5509 #14 Liu D 1.0 1.0000 1.0000 0.5556 0.7036 0.4590 #15 Liu E 1.8 1.5758 2.0242 1.0000 1.1088 0.9290  The last three columns then show you the new$OR$s and$CI\$s w.r.t. the new baseline drug.