netmeta (version 1.2-1)

netposet: Partial order of treatments in network meta-analysis

Description

Partial order of treatments in network meta-analysis. The set of treatments in a network is called a partially ordered set (in short, a poset), if different outcomes provide different treatment ranking lists.

Usage

netposet(..., outcomes, treatments, small.values, comb.fixed, comb.random)

# S3 method for netposet print(x, pooled = ifelse(x$comb.random, "random", "fixed"), ...)

Arguments

See details.

outcomes

A character vector with outcome names.

treatments

A character vector with treatment names.

small.values

See details.

comb.fixed

A logical indicating whether to show results for the fixed effects (common effects) model.

comb.random

A logical indicating whether to show results for the random effects model.

x

An object of class netposet.

pooled

A character string indicating whether Hasse diagram should be drawn for fixed ("fixed") or random effects model ("random"). Can be abbreviated.

Value

An object of class netposet with corresponding print, plot, and hasse functions. The object is a list containing the following components:

P.fixed

Ranking matrix with rows corresponding to treatments and columns corresponding to outcomes (fixed effects model).

M0.fixed

Hasse matrix skipping unnecessary paths (fixed effects model).

M.fixed

"Full" Hasse matrix (fixed effects model).

O.fixed

Matrix with information about partial ordering (fixed effects model).

P.random

Ranking matrix with rows corresponding to treatments and columns corresponding to outcomes (random effects model).

M0.random

Hasse matrix skipping unnecessary paths (random effects model).

M.random

"Full" Hasse matrix (random effects model).

O.random

Matrix with information about partial ordering (random effects model).

small.values, comb.fixed, comb.random

As.defined above.

call

Function call.

version

Version of R package netmeta used to create object.

Details

In network meta-analysis, frequently different outcomes are considered which may each provide a different ordering of treatments. The concept of a partially ordered set (in short, a poset, Carlsen & Bruggemann, 2014) of treatments can be used to gain further insights in situations with apparently conflicting orderings. This implementation for rankings in network meta-analyis is described in R<U+00FC>cker & Schwarzer (2017).

In function netposet, argument …{} can be any of the following:

  • arbitrary number of netrank objects providing P-scores;

  • arbitrary number of netmeta objects;

  • single ranking matrix with each column providing P-scores (R<U+00FC>cker & Schwarzer 2015) or SUCRA values (Salanti et al. 2011) for an outcome and rows corresponding to treatments.

Note, albeit in general a ranking matrix is not constrained to have values between 0 and 1, netposet stops with an error in this case as this function expects a matrix with P-scores or SUCRA values.

Argument outcomes can be used to label outcomes. If argument outcomes is missing,

  • column names of the ranking matrix are used as outcome labels (if first argument is a ranking matrix and column names are available);

  • capital letters 'A', 'B', … are used as outcome labels and a corresponding warning is printed.

Argument treatments can be used to provide treatment labels if the first argument is a ranking matrix. If argument treatment is missing,

  • row names of the ranking matrix are used as treatment labels (if available);

  • letters 'a', 'b', … are used as treatment labels and a corresponding warning is printed.

If argument …{} consists of netmeta objects, netrank is called internally to calculate P-scores. In this case, argument small.values can be used to specify for each outcome whether small values are good or bad; see netrank. This argument is ignored for a ranking matrix and netrank objects.

Arguments comb.fixed and comb.random can be used to define whether results should be printed and plotted for fixed and / or random effects model. If netmeta and netrank objects are provided in argument …{}, values for comb.fixed and comb.random within these objects are considered; if these values are not unique, argument comb.fixed and / or comb.random are set to TRUE.

In function print.netposet, argument …{} is passed on to the printing function.

References

Carlsen L, Bruggemann R (2014): Partial order methodology: a valuable tool in chemometrics. Journal of Chemometrics, 28, 226--34

R<U+00FC>cker G, Schwarzer G (2015): Ranking treatments in frequentist network meta-analysis works without resampling methods. BMC Medical Research Methodology, 15, 58

R<U+00FC>cker G, Schwarzer G (2017): Resolve conflicting rankings of outcomes in network meta-analysis: Partial ordering of treatments. Research Synthesis Methods, 8, 526--36

Salanti G, Ades AE, Ioannidis JP (2011): Graphical methods and numerical summaries for presenting results from multiple-treatment meta-analysis: an overview and tutorial. Journal of Clinical Epidemiology, 64, 163--71

See Also

netmeta, netrank, plot.netrank, hasse, plot.netposet

Examples

Run this code
# NOT RUN {
# Use depression dataset
#
data(Linde2015)

# Define order of treatments
#
trts <- c("TCA", "SSRI", "SNRI", "NRI",
          "Low-dose SARI", "NaSSa", "rMAO-A", "Hypericum",
          "Placebo")

# Outcome labels
#
outcomes <- c("Early response", "Early remission")

# (1) Early response
#
p1 <- pairwise(treat = list(treatment1, treatment2, treatment3),
               event = list(resp1, resp2, resp3),
               n = list(n1, n2, n3),
               studlab = id, data = Linde2015, sm = "OR")
#
net1 <- netmeta(p1, comb.fixed = FALSE,
                seq = trts, ref = "Placebo")

# (2) Early remission
#
p2 <- pairwise(treat = list(treatment1, treatment2, treatment3),
               event = list(remi1, remi2, remi3),
               n = list(n1, n2, n3),
               studlab = id, data = Linde2015, sm = "OR")
#
net2 <- netmeta(p2, comb.fixed = FALSE,
                seq = trts, ref = "Placebo")

# Partial order of treatment rankings (two outcomes)
#
po <- netposet(netrank(net1, small.values = "bad"),
               netrank(net2, small.values = "bad"),
               outcomes = outcomes)

# Hasse diagram
#
hasse(po)


#
# Outcome labels
#
outcomes <- c("Early response", "Early remission",
              "Lost to follow-up", "Lost to follow-up due to AEs",
              "Adverse events (AEs)")

# (3) Loss to follow-up
#
p3 <- pairwise(treat = list(treatment1, treatment2, treatment3),
               event = list(loss1, loss2, loss3),
               n = list(n1, n2, n3),
               studlab = id, data = Linde2015, sm = "OR")
#
net3 <- netmeta(p3, comb.fixed = FALSE,
                seq = trts, ref = "Placebo")

# (4) Loss to follow-up due to adverse events
#
p4 <- pairwise(treat = list(treatment1, treatment2, treatment3),
               event = list(loss.ae1, loss.ae2, loss.ae3),
               n = list(n1, n2, n3),
               studlab = id, data = subset(Linde2015, id != 55),
               sm = "OR")
#
net4 <- netmeta(p4, comb.fixed = FALSE,
                seq = trts, ref = "Placebo")

# (5) Adverse events
#
p5 <- pairwise(treat = list(treatment1, treatment2, treatment3),
               event = list(ae1, ae2, ae3),
               n = list(n1, n2, n3),
               studlab = id, data = Linde2015, sm = "OR")
#
net5 <- netmeta(p5, comb.fixed = FALSE,
                seq = trts, ref = "Placebo")

# Partial order of treatment rankings (all five outcomes)
#
po.ranks <- netposet(netrank(net1, small.values = "bad"),
                     netrank(net2, small.values = "bad"),
                     netrank(net3, small.values = "good"),
                     netrank(net4, small.values = "good"),
                     netrank(net5, small.values = "good"),
                     outcomes = outcomes)

# Same result
#
po.nets <- netposet(net1, net2, net3, net4, net5,
                    small.values = c("bad", "bad", "good", "good", "good"),
                    outcomes = outcomes)
#
all.equal(po.ranks, po.nets)

# Print matrix with P-scores (random effects model)
#
po.nets$P.random

# Hasse diagram for all outcomes (random effects model)
#
hasse(po.ranks)

# Hasse diagram for outcomes early response and early remission
#
po12 <- netposet(netrank(net1, small.values = "bad"),
                 netrank(net2, small.values = "bad"),
                 outcomes = outcomes[1:2])
hasse(po12)

# Scatter plot
#
oldpar <- par(pty = "s")
plot(po12)
par(oldpar)
# }
# NOT RUN {
# Example using ranking matrix with P-scores
#
# Ribassin-Majed L, Marguet S, Lee A.W., et al. (2017):
# What is the best treatment of locally advanced nasopharyngeal
# carcinoma? An individual patient data network meta-analysis.
# Journal of Clinical Oncology, 35, 498-505
#
outcomes <- c("OS", "PFS", "LC", "DC")
treatments <- c("RT", "IC-RT", "IC-CRT", "CRT",
                "CRT-AC", "RT-AC", "IC-RT-AC")
#
# P-scores (from Table 1)
#
pscore.os  <- c(15, 33, 63, 70, 96, 28, 45) / 100
pscore.pfs <- c( 4, 46, 79, 52, 94, 36, 39) / 100
pscore.lc  <- c( 9, 27, 47, 37, 82, 58, 90) / 100
pscore.dc  <- c(16, 76, 95, 48, 72, 32, 10) / 100
#
pscore.matrix <- data.frame(pscore.os, pscore.pfs, pscore.lc, pscore.dc)
rownames(pscore.matrix) <- treatments
colnames(pscore.matrix) <- outcomes
pscore.matrix
#
po <- netposet(pscore.matrix)
po12 <- netposet(pscore.matrix[, 1:2])
po
po12
#
hasse(po)
hasse(po12)
#
oldpar <- par(pty = "s")
plot(po12)
par(oldpar)

# }

Run the code above in your browser using DataCamp Workspace