The goal of metawho is to provide simple R implementation of “Meta-analytical method to Identify Who Benefits Most from Treatments” (called ‘deft’ approach, see reference #2).

metawho is powered by R package metafor and does not support dataset contains individuals for now. Please use stata package ipdmetan if you are more familar with stata code.

Installation

You can install the development version of metawho from GitHub with:

remotes::install_github("ShixiangWang/metawho")

Example

This is a basic example which shows you how to solve a common problem.

If you have HR and confidence intervals, please run deft_prepare() firstly.

library(metawho)
#> 载入需要的程辑包:metafor
#> 载入需要的程辑包:Matrix
#> Loading 'metafor' package (version 2.1-0). For an overview 
#> and introduction to the package please type: help(metafor).

### specify hazard ratios (hr)
hr    <- c(0.30, 0.11, 1.25, 0.63, 0.90, 0.28)
### specify lower bound for hr confidence intervals
ci.lb <- c(0.09, 0.02, 0.82, 0.42, 0.41, 0.12)
### specify upper bound for hr confidence intervals
ci.ub <- c(1.00, 0.56, 1.90, 0.95, 1.99, 0.67)
### specify sample number
ni <- c(16L, 18L, 118L, 122L, 37L, 38L)
### trials
trial <- c("Rizvi 2015", "Rizvi 2015",
          "Rizvi 2018", "Rizvi 2018",
          "Hellmann 2018", "Hellmann 2018")
### subgroups
subgroup = rep(c("Male", "Female"), 3)

entry <- paste(trial, subgroup, sep = "-")
### combine as data.frame

wang2019 =
   data.frame(
        entry = entry,
        trial = trial,
        subgroup = subgroup,
        hr = hr,
        ci.lb = ci.lb,
        ci.ub = ci.ub,
        ni = ni,
        stringsAsFactors = FALSE
       )

deft_prepare(wang2019)
#>                  entry         trial subgroup   hr ci.lb ci.ub  ni
#> 1      Rizvi 2015-Male    Rizvi 2015     Male 0.30  0.09  1.00  16
#> 2    Rizvi 2015-Female    Rizvi 2015   Female 0.11  0.02  0.56  18
#> 3      Rizvi 2018-Male    Rizvi 2018     Male 1.25  0.82  1.90 118
#> 4    Rizvi 2018-Female    Rizvi 2018   Female 0.63  0.42  0.95 122
#> 5   Hellmann 2018-Male Hellmann 2018     Male 0.90  0.41  1.99  37
#> 6 Hellmann 2018-Female Hellmann 2018   Female 0.28  0.12  0.67  38
#>     conf_q         yi       sei
#> 1 1.959964 -1.2039728 0.6142831
#> 2 1.959964 -2.2072749 0.8500678
#> 3 1.959964  0.2231436 0.2143674
#> 4 1.959964 -0.4620355 0.2082200
#> 5 1.959964 -0.1053605 0.4030005
#> 6 1.959964 -1.2729657 0.4387290

Here we load example data.

Use deft_do() function to obtain model results.

# The 'Male' is the reference
(res = deft_do(wang2019, group_level = c("Male", "Female")))
#> $all
#> $all$data
#>                  entry         trial subgroup   hr ci.lb ci.ub  ni
#> 1      Rizvi 2015-Male    Rizvi 2015     Male 0.30  0.09  1.00  16
#> 2    Rizvi 2015-Female    Rizvi 2015   Female 0.11  0.02  0.56  18
#> 3      Rizvi 2018-Male    Rizvi 2018     Male 1.25  0.82  1.90 118
#> 4    Rizvi 2018-Female    Rizvi 2018   Female 0.63  0.42  0.95 122
#> 5   Hellmann 2018-Male Hellmann 2018     Male 0.90  0.41  1.99  37
#> 6 Hellmann 2018-Female Hellmann 2018   Female 0.28  0.12  0.67  38
#>     conf_q         yi       sei
#> 1 1.959964 -1.2039728 0.6142831
#> 2 1.959964 -2.2072749 0.8500678
#> 3 1.959964  0.2231436 0.2143674
#> 4 1.959964 -0.4620355 0.2082200
#> 5 1.959964 -0.1053605 0.4030005
#> 6 1.959964 -1.2729657 0.4387290
#> 
#> $all$model
#> 
#> Fixed-Effects Model (k = 6)
#> 
#> Test for Heterogeneity:
#> Q(df = 5) = 18.8865, p-val = 0.0020
#> 
#> Model Results:
#> 
#> estimate      se     zval    pval    ci.lb    ci.ub 
#>  -0.3207  0.1289  -2.4883  0.0128  -0.5733  -0.0681  * 
#> 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> 
#> 
#> $subgroup
#> $subgroup$data
#>           trial        hr     ci.lb     ci.ub  ni   conf_q        yi
#> 1    Rizvi 2015 0.3666667 0.0469397 2.8641945  34 1.959964 -1.003302
#> 2    Rizvi 2018 0.5040000 0.2805772 0.9053338 240 1.959964 -0.685179
#> 3 Hellmann 2018 0.3111111 0.0967900 1.0000013  75 1.959964 -1.167605
#>         sei
#> 1 1.0487893
#> 2 0.2988460
#> 3 0.5957285
#> 
#> $subgroup$model
#> 
#> Fixed-Effects Model (k = 3)
#> 
#> Test for Heterogeneity:
#> Q(df = 2) = 0.5657, p-val = 0.7536
#> 
#> Model Results:
#> 
#> estimate      se     zval    pval    ci.lb    ci.ub 
#>  -0.7956  0.2589  -3.0737  0.0021  -1.3030  -0.2883  ** 
#> 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> 
#> 
#> attr(,"class")
#> [1] "deft"

For visualization and more, see package vignette.

References

  • Wang, Shixiang, et al. “The predictive power of tumor mutational burden in lung cancer immunotherapy response is influenced by patients’ sex.” International journal of cancer (2019).
  • Fisher, David J., et al. “Meta-analytical methods to identify who benefits most from treatments: daft, deluded, or deft approach?.” bmj 356 (2017): j573.