2
$\begingroup$

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
$\endgroup$
1
  • $\begingroup$ Good question. Small note: The OR of the baseline drug compared to itself is always 1, that's why it is typically not reported. $\endgroup$
    – Michael M
    Commented May 5, 2014 at 15:41

1 Answer 1

2
+50
$\begingroup$

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.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.