guido-s / netmeta

Official Git repository of R package netmeta
http://cran.r-project.org/web/packages/netmeta/index.html
GNU General Public License v2.0
28 stars 12 forks source link

Multi-arm studies with inconsistent variances / standard errors #8

Closed zddzxxsmile closed 4 years ago

zddzxxsmile commented 4 years ago

minusADMtest.xlsx

Hello,

Thanks for your great contribution.

I worked with a network meta-analysis using HR as effect size. There is a 4-arm study in my dataset. When run the netmeta, error occur like the following:

data33 <- read.csv("minusADMtest.csv", sep=",", header=T) net1 <- netmeta(lnHR, selnHR, t1, t2, id, data = data33, sm = "HR", comb.fixed = FALSE, details.chkmultiarm = TRUE)

Multi-arm studies with inconsistent variances / standard errors:

studlab treat1 treat2 varTE resid.var seTE resid.se Frank1990 ADM IPT 0.2025 -0.01521667 0.45 -0.12335585 Frank1990 ADM IPT+ADM 0.3364 0.02173333 0.58 0.14742230 Frank1990 ADM placebo 0.2304 -0.00651667 0.48 -0.08072587 Frank1990 IPT IPT+ADM 0.2704 -0.00651667 0.52 -0.08072587 Frank1990 IPT placebo 0.2209 0.02173333 0.47 0.14742230 Frank1990 IPT+ADM placebo 0.2809 -0.01521667 0.53 -0.12335585

Legend: resid - residual deviation (observed minus expected) varTE - variance of treatment estimate seTE - standard error of treatment estimate

Error: Problem in multi-arm studies!

The data of 4-arm study is the following: study treat1 treat2 lnHR selnHR Frank1990 | IPT | ADM | 1.34 | 0.45 Frank1990 | IPT | IPT+ADM | 1.43 | 0.45 Frank1990 | IPT | placebo | -0.62 | 0.3 Frank1990 | IPT+ADM | ADM | -0.05 | 0.58 Frank1990 | placebo | ADM | 1.75 | 0.48 Frank1990 | placebo | IPT+ADM | 2.19 | 0.52

How to solve this problem?

In the study Frank1990, selnHR were not reported. We calculated se using the method proposed by Tierney2007 (Practical methods for incorporating summary time-to-event data into meta-analysis).

I am looking forward for your reply;

Really thanks.

guido-s commented 4 years ago

I seems that you are using an outdated version of netmeta. With the current version of netmeta on CRAN (or the GitHub development version) I get an additional error message that treatment estimates are inconsistent in Frank1990.

This is obvious, for example, for the following direct and indirect comparison of IPT+ADM vs IPT: direct lnHR: -1.43 indirect lnHR (IPT+ADM vs placebo - IPT vs placebo): -2.19 - -0.62 = -1.57

All pairwise comparisons in a multi-arm study are consistent by definition which is obviously not the case in Frank1990. Therefore, I would suggest that you check your hazard ratios first. Maybe your problems with inconsistent variances will disappear if you fix the treatment estimates.

zddzxxsmile commented 4 years ago

Hello, Thanks for your reply. Currently I use a [Package netmeta version 1.2-0 ]. Sorry I present the wrong dataset of Frank1990. The data of 4-arm study is the following: study treat1 treat2 lnHR selnHR Frank1990 IPT ADM 1.34 0.45 Frank1990 IPT+ADM ADM -0.05 0.58 Frank1990 placebo ADM 1.75 0.48 Frank1990 IPT IPT+ADM 1.39 0.45 Frank1990 IPT placebo -0.41 0.3 Frank1990 placebo IPT+ADM 1.8 0.52

net1 <- netmeta(lnHR, selnHR, t1, t2, id, data = data33, sm = "HR",

  • comb.fixed = FALSE, details.chkmultiarm = TRUE)

Multi-arm studies with inconsistent variances / standard errors:

studlab treat1 treat2 varTE resid.var seTE resid.se Frank1990 ADM IPT 0.2025 0.01441667 0.45 0.12006942 Frank1990 ADM IPT+ADM 0.3364 -0.00883333 0.58 -0.09398581 Frank1990 ADM placebo 0.2304 -0.00558333 0.48 -0.07472171 Frank1990 IPT IPT+ADM 0.2025 -0.00558333 0.45 -0.07472171 Frank1990 IPT placebo 0.0900 -0.00883333 0.30 -0.09398581 Frank1990 IPT+ADM placebo 0.2704 0.01441667 0.52 0.12006942

Legend: resid - residual deviation (observed minus expected) varTE - variance of treatment estimate seTE - standard error of treatment estimate

Error: Problem in multi-arm studies!

I try to use the option tol.multiarm.se like following:

net1 <- netmeta(lnHR, selnHR, t1, t2, id, data = data33, sm = "HR",

  • comb.fixed = FALSE, details.chkmultiarm = TRUE, tol.multiarm.se = 0.121)

Multi-arm studies with zero treatment arm variance:

studlab treat var.treat Wang2017 ADM 0.0048 Wang2017 ADM+TMS 0.0628 Wang2017 TMS 0.0528

Legend: var.treat - treatment arm variance

Warning messages: 1: Note, treatments within a comparison have been re-sorted in increasing order. 2: Note, for the following multi-arm study a zero treatment arm variance has been calculated: 'Wang2017'

The first problem seems to be solved, but a zero treatment arm variance has been calculated for 'Wang2017'.

I try a tol.multiarm.se = 0.12 but remain get the first error report:

net1 <- netmeta(lnHR, selnHR, t1, t2, id, data = data33, sm = "HR",

  • comb.fixed = FALSE, details.chkmultiarm = TRUE, tol.multiarm.se = 0.12)

Multi-arm studies with inconsistent variances / standard errors:

studlab treat1 treat2 varTE resid.var seTE resid.se Frank1990 ADM IPT 0.2025 0.01441667 0.45 0.12006942 Frank1990 ADM IPT+ADM 0.3364 -0.00883333 0.58 -0.09398581 Frank1990 ADM placebo 0.2304 -0.00558333 0.48 -0.07472171 Frank1990 IPT IPT+ADM 0.2025 -0.00558333 0.45 -0.07472171 Frank1990 IPT placebo 0.0900 -0.00883333 0.30 -0.09398581 Frank1990 IPT+ADM placebo 0.2704 0.01441667 0.52 0.12006942

Multi-arm studies with zero treatment arm variance:

studlab treat var.treat Wang2017 ADM 0.0048 Wang2017 ADM+TMS 0.0628 Wang2017 TMS 0.0528

Legend: resid - residual deviation (observed minus expected) varTE - variance of treatment estimate seTE - standard error of treatment estimate var.treat - treatment arm variance

Error: Problems in multi-arm studies!

How I can resolve the first problem and not lead to a zero treatment arm variance to be calculated for other study? I attach the whole datasets with this comment. minusADMtest4.xlsx

I try to make the selnHR of all arms of Frank1990 be the same value, which can fix the problem. Can I just caculate the arithmetic mean of selnHR in Frank1990?

guido-s commented 4 years ago

You can calculate the arithmetic mean of variances to get identical standard errors for Frank1990. E.g.,

data33$selnHR.orig <- data33$selnHR
data33$selnHR[data33$id == "Frank1990"] <-
  sqrt(mean(data33$selnHR[data33$id == "Frank1990"]^2))
##
netmeta(lnHR, selnHR, t1, t2, id, data = data33, sm = "HR",
        comb.fixed = FALSE, reference.group = "plac")

P.S. I would be interested to have a closer look at the Tierney2007 method you used for Frank1990. I would expect that variances / standard errors are consistent for a multi-arm study. Maybe you could send me a personal email with further information.