Author: Gabriel Odom, Laura Brandt, Sean Luo, and Ray Balise
Date: 2022-10-01

# CTNote Library: Reduction Outcomes

#### Gabriel Odom, Laura Brandt, Sean Luo, and Ray Balise

#### 2022-10-01

# Introduction

This document contains the algorithms necessary to code all the outcomes which measure “substance use reduction”. We only include outcomes which result in a single value per subject. These outcomes are:

Group | Endpoint | Class | Reference | Definition | Missing is
--- | --- | --- | --- | --- | ---
Reduction | Rate of negative UOS | ratio | Comer et al., 2006 | Percentage of negative UOS during 8 weeks of treatment | Positive
Reduction | Opioid use rate | ratio | Eissenberg et al., 1997 | subject retained in study at least 17 weeks AND subject showed 4 consecutive negative UDS between weeks 1-17 | Imputed
Reduction | Rate of negative UOS | ratio | Fiellin et al., 2006 | Percentage of negative UOS | Positive
Reduction | Rate of negative UOS | ratio | Fudala et al., 2003 | Percentage of negative UOS | Missing
Reduction | Rate of negative UOS | ratio | Haight et al., 2019 | Percentage of negative UOS from week 5 to week 24 | Positive
Reduction | Rate of negative UOS | ratio | Jaffe et al., 1972 | Percentage of treatment weeks characterized by negative UOS for patients who completed ≥8 weeks of the study | Imputed
Reduction | Rate of negative UOS | ratio | Johnson et al., 1992 | Average percentage of negative UOS | Positive
Reduction | Rate of negative UOS | logical | Kosten et al., 1993 | ≥70% negative UOS during the 24-week trial period | Missing/not imputed
Reduction | Rate of negative UOS | ratio | Ling et al., 1998 | Mean percentage negative UOS | Missing/not imputed
Reduction | Rate of negative UOS | integer | Ling et al., 1998 | no. of negative UOS (“treatment effectiveness score”) | Missing/not imputed
Reduction | Rate of negative UOS | ratio | Ling et al., 2010 | Percentage of negative UOS during weeks 1-16 of the trial | Positive
Reduction | Opioid use rate | ratio | Ling, Charuvastra, Kaim, & Klett, 1976 | Index of illicit morphine use ([0, 120]) | Positive
Reduction | Rate of negative UOS | ratio | Lofwall et al., 2018 | Mean percentage of negative UOS for weeks 1 to 24 | Positive
Reduction | Rate of negative UOS | ratio | Mattick et al., 2003 | “Percentage of clean urines (PCU)”: Rate of negative UOS for the time that the patient remained in the study | Missing/not imputed
Reduction | Rate of negative UOS | ratio | Mattick et al., 2003 | “treatment effectiveness percentage (TEP)”: Rate of negative UOS for the full 13‐week study (ITT) | Missing/not imputed
Reduction | Rate of negative UOS | ratio | Pani, Maremmani, Pirastu, Tagliamonte, & Gessa, 2000 | PCC: Percentage ratio of negative UOS and the total number of UOS carried out for each patient during the period of treatment | Positive
Reduction | Rate of negative UOS | ratio | Pani, Maremmani, Pirastu, Tagliamonte, & Gessa, 2000 | TEC: Percentage ratio between the number of negative UOS and the number of UOS as per protocol | Positive
Reduction | Opioid use rate | ratio | Petitjean et al., 2001 | Weekly proportion of positive UOS (intent-to-treat and completer analysis) | Positive
Reduction | Rate of negative UOS | ratio | Preston, Umbricht, & Epstein, 2000 | “Mean intervention percent negative”: Percentage of negative UOS in the treatment phase | Positive
Reduction | Rate of negative UOS | ratio | Schottenfeld et al., 2005 | Proportion of negative UOS | Missing
Reduction | Opioid use rate | integer | Schwartz et al., 2006 | Number of positive UOS at 120-day follow-up | Missing/not imputed
Reduction | Opioid use rate | ratio | Shufman et al., 1994 | Percentage of positive UOS | Missing
Reduction | Opioid use rate | ratio | Soyka, Zingg, Koller, & Kuefner, 2008 | Monthly rates of positive UOS | Missing/not imputed
Reduction | Opioid use rate | ratio | Strain, Bigelow, Liebson, & Stitzer, 1999 | Percentage of positive UOS | Missing/not imputed
Reduction | Opioid use rate | ratio | Strain, Stitzer, Liebson, & Bigelow, 1993 | Rate of positive UOS through the end of the stable dosing period | Not defined
Reduction | Opioid use rate | ratio | Strain, Stitzer, Liebson, & Bigelow, 1994 | Overall rate of positive UOS | Missing/not imputed
Reduction | Opioid use rate | ratio | Strain, Stitzer, Liebson, & Bigelow, 1996 | Percentage of positive UOS – Overall AND summarized in consecutive 2-week blocks | Missing/not imputed
Reduction | Rate of negative UOS | logical | Strang et al., 2010 | ≥50% negative UOS during weeks 14-26 | Positive
Reduction | Rate of negative UOS | ratio | Strang et al., 2019 | Proportion of negative UOS at the end of the 12‐week post-randomization time point | Positive
Reduction | Rate of negative UOS | NA | Tanum et al., 2017 | Rate of negative UOS: Number of negative UOS divided by the total number of attended tests (group proportion) | Positive
Reduction | Rate of negative UOS | ratio | Wolstein et al., 2009 | Number of negative UOS per number of weeks of study participation | Unknown
Reduction | Opioid use rate | ratio | Woody et al., 2008 | Percentage of positive UOS at weeks 4, 8, and 12 | Imputed
Reduction | Opioid use rate | integer | Zaks, Fink, & Freedman, 1972 | Number of positive UOS | Not defined

We will use the table of participant opioid use patterns from the `ctn0094DataExtra` package to calculate these endpoints (we have a copy of the endpoints in the dataset `outcomesCTN0094`). Importantly, if you wish to apply these algorithms to calculate endpoints for your data, the participants’ substance use patterns must be stored in the “substance use pattern word” format shown here. We also show a subset of the data to visualize a variety of different real substance use patterns.

We first define the following five-value legend:

- +: positive for the substance(s) in a specified window of time (a day, week, month, etc.) by urine screen (or participant self report, if such data are of interest)
- –: negative for the substance(s)
- o: subject failed to provide a urine sample
- *: inconclusive results or mixed results (e.g. subject provided more than one urine sample in the time interval and they did not agree)
- _: no specimens required (weekends, holidays, pre-randomization period, alternating visit days/weeks)

Code

    ###  Full Data  ###
    udsOutcomes_df <-
        CTNote::outcomesCTN0094 %>%
      select(who, usePatternUDS)

    # Make a copy
    outcomesRed_df <- udsOutcomes_df

    ###  Examples  ###
    examplePeople_int <- c(1, 163, 210, 242, 4, 17, 13, 1103, 233, 2089)
    outcomesRed_df %>%
      filter(who %in% examplePeople_int)

    ## # A tibble: 10 × 2
    ##      who usePatternUDS
    ##    <dbl> <chr>
    ##  1     1 ooooooooooooooo
    ##  2     4 -------------------o-o-o
    ##  3    13 ------------o-oooooooooo
    ##  4    17 --++*++++++-++++++-+++-
    ##  5   163 -o---o---o--o+----------
    ##  6   210 -++++++++-+++-----------
    ##  7   233 *+++++++++++o++++++++++o
    ##  8   242 -----------------------
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o
    ## 10  2089 ++++---+--------------o-

For example, participant 1 has a use pattern `ooooooooooooooo` (all missing UDS), which means that they dropped out of the study. In contrast, participant 233 has a use pattern `*+++++++++++o++++++++++o` (nearly all positive UDS): they did not drop out of the study, but the treatment was completely ineffective for them. Participant 2089 started the study in a rough patch, but greatly improved in treatment over time (`++++---+--------------o-`).

# Substance Use Reduction Endpoints

## Comer et al. (2006)

Definition: Percentage of negative UOS during 8 weeks of treatment

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
        mutate(
            comer2006_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # first 8 weeks of treatment
                start = 1, end = 8,
                proportion = TRUE
            )
        ) %>%
        select(who, comer2006_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, comer2006_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       comer2006_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   1
    ##  3    13 ------------o-oooooooooo                   1
    ##  4    17 --++*++++++-++++++-+++-                    0.312
    ##  5   163 -o---o---o--o+----------                   0.75
    ##  6   210 -++++++++-+++-----------                   0.125
    ##  7   233 *+++++++++++o++++++++++o                   0.0625
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.5
    ## 10  2089 ++++---+--------------o-                   0.375

## Eissenberg et al. (1997)

Definition: subject retained in study at least 17 weeks AND subject showed 4 consecutive negative UDS between weeks 1-17

From their paper, we read “Where urinalysis data were missing for an entire week (5 of 1836 data points; 0.3%) the average of that patient’s results from the 2 weeks surrounding the missing week was substituted for the missing value.” Also, because some of our trials only retained subjects for 15-16 weeks, we changed the cutoff to 15 weeks in order to apply this definition to our data.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Check for 15 weeks of participation
      mutate(
            completedProtocol = measure_retention(usePatternUDS) >= 15
        ) %>%
        # Impute local missings
        mutate(
            useImputed = impute_missing_visits(
                use_pattern = usePatternUDS,
                method = "kNV",
                knvWeights_num = c(`o` = NA, `+` = 1, `*` = 0.5, `-` = 0),
                quietly = TRUE
            )
        ) %>%
        # detect 4 consecutive negative UDS
        mutate(
            consecNeg = detect_subpattern(
                use_pattern = useImputed,
                subpattern = "----",
                # we use 15 weeks of study (instead of 17)
                start = 1, end = 15
            )
        ) %>%
        # non-participation penalty: if the participant didn't stay in the study the
      #   whole time, then the treatment was a failure
        mutate(
            eissenberg1997_isAbs = case_when(
                completedProtocol  ~ consecNeg,
                !completedProtocol ~ FALSE
            )
        ) %>%
        select(who, eissenberg1997_isAbs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, eissenberg1997_isAbs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       eissenberg1997_isAbs
    ##    <dbl> <chr>                               <lgl>
    ##  1     1 ooooooooooooooo                     FALSE
    ##  2     4 -------------------o-o-o            TRUE
    ##  3    13 ------------o-oooooooooo            FALSE
    ##  4    17 --++*++++++-++++++-+++-             FALSE
    ##  5   163 -o---o---o--o+----------            TRUE
    ##  6   210 -++++++++-+++-----------            FALSE
    ##  7   233 *+++++++++++o++++++++++o            FALSE
    ##  8   242 -----------------------             TRUE
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o TRUE
    ## 10  2089 ++++---+--------------o-            TRUE

## Fiellin et al. (2006)

Definition: Percentage of negative UOS

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            fiellin2006_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, fiellin2006_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, fiellin2006_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       fiellin2006_red
    ##    <dbl> <chr>                                         <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                     0.875
    ##  3    13 ------------o-oooooooooo                     0.542
    ##  4    17 --++*++++++-++++++-+++-                      0.239
    ##  5   163 -o---o---o--o+----------                     0.792
    ##  6   210 -++++++++-+++-----------                     0.542
    ##  7   233 *+++++++++++o++++++++++o                     0.0208
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.571
    ## 10  2089 ++++---+--------------o-                     0.75

## Fudala et al. (2003)

Definition: Percentage of negative UOS; they exclude missing values.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Drop weeks with missing UDS
      mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        mutate(
            fudala2003_red = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, fudala2003_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, fudala2003_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       fudala2003_red
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                             0
    ##  2     4 -------------------o-o-o                    1
    ##  3    13 ------------o-oooooooooo                    1
    ##  4    17 --++*++++++-++++++-+++-                     0.239
    ##  5   163 -o---o---o--o+----------                    0.95
    ##  6   210 -++++++++-+++-----------                    0.542
    ##  7   233 *+++++++++++o++++++++++o                    0.0227
    ##  8   242 -----------------------                     1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o         0.769
    ## 10  2089 ++++---+--------------o-                    0.783

## Haight et al. (2019)

Definition: Percentage of negative UOS from week 5 to week 24

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            haight2019_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # The end-of-protocol for our trials is 15-16 weeks
                start = 5, end = 15,
                proportion = TRUE
            )
        ) %>%
        select(who, haight2019_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, haight2019_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       haight2019_red
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                     1
    ##  3    13 ------------o-oooooooooo                     0.818
    ##  4    17 --++*++++++-++++++-+++-                      0.136
    ##  5   163 -o---o---o--o+----------                     0.636
    ##  6   210 -++++++++-+++-----------                     0.273
    ##  7   233 *+++++++++++o++++++++++o                     0
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.545
    ## 10  2089 ++++---+--------------o-                     0.909

## Jaffe et al. (1972)

Definition: Percentage of treatment weeks characterized by negative UOS for patients who completed ≥8 weeks of the study; and missing values were imputed to the mode for each participant.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Mark if participants completed 8 weeks of treatment; remove those who do not
      #   (but we will add them back in at the end)
      mutate(lastWeek_idx = measure_retention(use_pattern = usePatternUDS)) %>%
        filter(lastWeek_idx >= 8) %>%
        # For participants who stayed in the trials at least 8 weeks, impute their
      #   missing weeks to their personal most common UDS result; in the event of a
      #   tie between a negative and a positive result for the mode, the tiebreaker
      #   is a positive result.
        mutate(
            usePatternImputed = impute_missing_visits(
                use_pattern = usePatternUDS,
                method = "mode"
            )
        ) %>%
        mutate(
            jaffe1972_red = count_matches(
                usePatternImputed,
                match_is = "-",
                mixed_results_are = "*",
                mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, jaffe1972_red) %>%
        left_join(outcomesRed_df, ., by = "who") %>%
        # Lots of NAs from the participants who did not make it to week 8; replace
        #   these NAs with 0
        replace_na(list(jaffe1972_red = 0))

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, jaffe1972_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       jaffe1972_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   1
    ##  3    13 ------------o-oooooooooo                   1
    ##  4    17 --++*++++++-++++++-+++-                    0.239
    ##  5   163 -o---o---o--o+----------                   0.958
    ##  6   210 -++++++++-+++-----------                   0.542
    ##  7   233 *+++++++++++o++++++++++o                   0.0208
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.829
    ## 10  2089 ++++---+--------------o-                   0.792

## Johnson, Jaffe, and Fudala (1992)

Definitions: Average percentage of negative UOS

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            johnson1992_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, johnson1992_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, johnson1992_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       johnson1992_red
    ##    <dbl> <chr>                                         <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                     0.875
    ##  3    13 ------------o-oooooooooo                     0.542
    ##  4    17 --++*++++++-++++++-+++-                      0.239
    ##  5   163 -o---o---o--o+----------                     0.792
    ##  6   210 -++++++++-+++-----------                     0.542
    ##  7   233 *+++++++++++o++++++++++o                     0.0208
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.571
    ## 10  2089 ++++---+--------------o-                     0.75

## Kosten et al. (1993)

Definition: ≥70% negative UOS during the 24-week trial period; missing UDS are excluded

Note: there are multiple definitions of treatment failure in this paper; we provide an algorithm for the definition which results in a single value for each participant.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Exclude missing visits
      mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        mutate(
            kosten1993B_prop = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                start = 1,
                end = 15,
                proportion = TRUE
            )
        ) %>%
        mutate(kosten1993B_red = kosten1993B_prop >= 0.7) %>%
        select(who, kosten1993B_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, kosten1993B_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       kosten1993B_red
    ##    <dbl> <chr>                               <lgl>
    ##  1     1 ooooooooooooooo                     FALSE
    ##  2     4 -------------------o-o-o            TRUE
    ##  3    13 ------------o-oooooooooo            TRUE
    ##  4    17 --++*++++++-++++++-+++-             FALSE
    ##  5   163 -o---o---o--o+----------            TRUE
    ##  6   210 -++++++++-+++-----------            FALSE
    ##  7   233 *+++++++++++o++++++++++o            FALSE
    ##  8   242 -----------------------             TRUE
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o TRUE
    ## 10  2089 ++++---+--------------o-            FALSE

## Ling et al. (1998) (A) and (C)

There are two definitions from this paper which we include in the reduction section our library: Mean percentage negative UOS and no. of negative UOS (“treatment effectiveness score”). Both of these outcome definitions exclude missing UDS. We also include an abstinence endpoint from this paper in our “abstinence and relapse endpoints” section.

### Ling et al., 1998 (A)

Definition: Mean percentage negative UOS

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Exclude missing UDS
      mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        mutate(
            ling1998A_red = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                start = 1, end = 15,
                proportion = TRUE
            )
        ) %>%
        select(who, ling1998A_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, ling1998A_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       ling1998A_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   1
    ##  3    13 ------------o-oooooooooo                   1
    ##  4    17 --++*++++++-++++++-+++-                    0.233
    ##  5   163 -o---o---o--o+----------                   0.933
    ##  6   210 -++++++++-+++-----------                   0.267
    ##  7   233 *+++++++++++o++++++++++o                   0.0333
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.733
    ## 10  2089 ++++---+--------------o-                   0.667

### Ling et al., 1998 (C)

Definition: no. of negative UOS (“treatment effectiveness score”)

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            ling1998C_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                end = 15,
                mixed_results_are = "*",
                mixed_weight = 0.5
            )
        ) %>%
        select(who, ling1998C_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, ling1998C_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       ling1998C_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                               0
    ##  2     4 -------------------o-o-o                     15
    ##  3    13 ------------o-oooooooooo                     13
    ##  4    17 --++*++++++-++++++-+++-                       3.5
    ##  5   163 -o---o---o--o+----------                     10
    ##  6   210 -++++++++-+++-----------                      4
    ##  7   233 *+++++++++++o++++++++++o                      0.5
    ##  8   242 -----------------------                      15
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o           8
    ## 10  2089 ++++---+--------------o-                     10

## Ling et al. (2010)

Definition: Percentage of negative UOS during weeks 1-16 of the trial

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            ling2010_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # We only have 15 weeks of data from some arms
                start = 1, end = 15,
                proportion = TRUE
            )
        ) %>%
        select(who, ling2010_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, ling2010_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       ling2010_red
    ##    <dbl> <chr>                                      <dbl>
    ##  1     1 ooooooooooooooo                           0
    ##  2     4 -------------------o-o-o                  1
    ##  3    13 ------------o-oooooooooo                  0.867
    ##  4    17 --++*++++++-++++++-+++-                   0.233
    ##  5   163 -o---o---o--o+----------                  0.667
    ##  6   210 -++++++++-+++-----------                  0.267
    ##  7   233 *+++++++++++o++++++++++o                  0.0333
    ##  8   242 -----------------------                   1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o       0.533
    ## 10  2089 ++++---+--------------o-                  0.667

## Ling et al. (1976)

Definition: Index of illicit morphine use ([0, 120])

### Original

The definition in this paper is quite complex, but very well thought out. It is one of our favorite MOUD treatment endpoints because of its flexibility.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Rule 1: mark induction failures
      # The Ling et al. protocol lasted 40 weeks while requiring 7 weeks of data for
      #   the subjects to be counted as "estimable participants"; our 3 studies each
        #   lasted at least 15 weeks. Therefore, we should require at least
      #   (7/40) * 15) ~= 3 weeks of data to consider a participant "estimable"
        mutate(
            inductFail = measure_retention(usePatternUDS) <= 3
        ) %>%
        mutate(
            usePatternTrunc = str_sub(usePatternUDS, end = 15)
        ) %>%
        # Rules 2-4: weighting and scaling visits. The flexibility here is amazing.
        #   If we think that dropout is worse than positive, then we can reflect that
        #   in the weights. Ling et al. counted a missing visit as 0.22 of a positive;
      #   and they use a step function to increase the penalty of a positive UDS
      #   over time.
        mutate(
            ling1976o22_use = weight_positive_visits(
                use_pattern = usePatternTrunc,
                weights_num = c(`+` = 1.0, `*` = 0.5, `o` = 0.22, `-` = 0),
                posPenalty_num = rep(1:5, each = 3) # step function for 15 weeks
            )
        ) %>%
        mutate(
            ling1976o22_use = case_when(
                inductFail  ~ 120,
                !inductFail ~ ling1976o22_use
            ),
            ling1976o22_abs = 120 - ling1976o22_use
        ) %>%
        select(who, ling1976o22_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, ling1976o22_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       ling1976o22_abs
    ##    <dbl> <chr>                                         <dbl>
    ##  1     1 ooooooooooooooo                                 0
    ##  2     4 -------------------o-o-o                      120
    ##  3    13 ------------o-oooooooooo                      119.
    ##  4    17 --++*++++++-++++++-+++-                        18.7
    ##  5   163 -o---o---o--o+----------                      104.
    ##  6   210 -++++++++-+++-----------                       40
    ##  7   233 *+++++++++++o++++++++++o                       14.1
    ##  8   242 -----------------------                       120
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o            88.9
    ## 10  2089 ++++---+--------------o-                       98.7

### A Variant

We also include a variant of this definition which includes a greater penalty for missing values and a smooth function to increase weights of positive UDS.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
        mutate(
            inductFail = measure_retention(usePatternUDS) <= 3
        ) %>%
        mutate(
            usePatternTrunc = str_sub(usePatternUDS, end = 15)
        ) %>%
        mutate(
            ling1976o100_use = weight_positive_visits(
                use_pattern = usePatternTrunc,
                # Higher weight for missing values
                weights_num = c(`+` = 0.8, `*` = 0.4, `o` = 1.0, `-` = 0),
                # Smooth penalty function for increasing positive UDS
                posPenalty_num = seq(
                    from = 1, to = 5, length.out = str_length(usePatternTrunc)
                )
            )
        ) %>%
        mutate(
          ling1976o100_use = case_when(
                inductFail  ~ 120,
                !inductFail ~ ling1976o100_use
            ),
            ling1976o100_abs = 120 - ling1976o100_use
        ) %>%
        select(who, ling1976o100_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, ling1976o100_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       ling1976o100_abs
    ##    <dbl> <chr>                                          <dbl>
    ##  1     1 ooooooooooooooo                                  0
    ##  2     4 -------------------o-o-o                       120
    ##  3    13 ------------o-oooooooooo                       113.
    ##  4    17 --++*++++++-++++++-+++-                         20.6
    ##  5   163 -o---o---o--o+----------                        94.2
    ##  6   210 -++++++++-+++-----------                        38.5
    ##  7   233 *+++++++++++o++++++++++o                        10.4
    ##  8   242 -----------------------                        120
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o             82.0
    ## 10  2089 ++++---+--------------o-                        96.9

## Lofwall et al. (2018)

Definition: Mean percentage of negative UOS for weeks 1 to 24; but urine screens are collected each week for the first 12 weeks, then every other week for weeks 13-24. We project this onto a 15-16 week protocol by requiring UDS each week for the first 7 weeks, then every other week for the next 8. Then, we impute the skipped weeks to be whatever the value of the UDS was from the last visit.

Code

    ###  Define a Visit Pattern (Lattice)  ###
    lofwallLattice_char <- collapse_lattice(
        lattice_patterns = c("o", "_o"),
        # For the lattice as defined over 24 weeks, you need 12 weeks of weekly visits
        #   and 6 sets of alternating "no visit" and "visit" week pairs, or c(12, 6).
        #   For us, we want 7 weeks straight of weekly visits followed by 4 pairs of
        #   alternating visits (8 weeks) for a total of 15 weeks.
        times = c(7, 4)
    )
    lofwallLattice_char

    ## [1] "ooooooo_o_o_o_o"

Code

    ###  Calculate the Endpoint  ###
    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Mark all missing UDS as positive
        mutate(
            udsPattern = recode_missing_visits(usePatternUDS)
        ) %>%
      # View the current use pattern "through" the Lofwall protocol
        mutate(
            udsLattice = view_by_lattice(
                use_pattern = udsPattern,
                lattice_pattern = str_sub(lofwallLattice_char, end = 15) # first 15 weeks
            )
        ) %>%
      # Impute the visits from the "unobserved" weeks to the last observed week
        mutate(
            udsLatticeLOCF = impute_missing_visits(
                use_pattern = udsLattice,
                method = "locf",
                # This is only imputing values that we wouldn't have seen because of the
                #   protocol ("_" means missing by design; "o" means missing)
                missing_is = "_",
                quietly = TRUE
            )
        ) %>%
        mutate(
            lofwall2018_red = count_matches(
                use_pattern = udsLatticeLOCF,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                start = 1, end = 15, # first 15 weeks
                proportion = TRUE
            )
        ) %>%
        select(who, lofwall2018_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, lofwall2018_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       lofwall2018_red
    ##    <dbl> <chr>                                         <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                     1
    ##  3    13 ------------o-oooooooooo                     0.8
    ##  4    17 --++*++++++-++++++-+++-                      0.167
    ##  5   163 -o---o---o--o+----------                     0.733
    ##  6   210 -++++++++-+++-----------                     0.133
    ##  7   233 *+++++++++++o++++++++++o                     0.0333
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.333
    ## 10  2089 ++++---+--------------o-                     0.733

## Mattick et al. (2003) (A) and (B)

There are also two definitions from this paper included in our library.

### Mattick et al., 2003 (A)

Definition: “Percentage of clean urines (PCU)”: Rate of negative UOS for the time that the patient remained in the study

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Find out how long the participant stayed in the study
      mutate(lastWeek_idx = measure_retention(use_pattern = usePatternUDS)) %>%
        mutate(
            mattick2003A_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # Measure proportion of negative UDS only during study participation
                start = 1, end = lastWeek_idx,
                proportion = TRUE
            )
        ) %>%
        select(who, mattick2003A_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, mattick2003A_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       mattick2003A_red
    ##    <dbl> <chr>                                          <dbl>
    ##  1     1 ooooooooooooooo                               0
    ##  2     4 -------------------o-o-o                      0.913
    ##  3    13 ------------o-oooooooooo                      0.929
    ##  4    17 --++*++++++-++++++-+++-                       0.239
    ##  5   163 -o---o---o--o+----------                      0.792
    ##  6   210 -++++++++-+++-----------                      0.542
    ##  7   233 *+++++++++++o++++++++++o                      0.0217
    ##  8   242 -----------------------                       1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o           0.588
    ## 10  2089 ++++---+--------------o-                      0.75

### Mattick et al., 2003 (B)

Definition: “treatment effectiveness percentage (TEP)”: Rate of negative UOS for the full 13‐week study (ITT)

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            mattick2003B_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # They used a 13-week protocol
                start = 1, end = 13,
                proportion = TRUE
            )
        ) %>%
        select(who, mattick2003B_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, mattick2003B_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       mattick2003B_red
    ##    <dbl> <chr>                                          <dbl>
    ##  1     1 ooooooooooooooo                               0
    ##  2     4 -------------------o-o-o                      1
    ##  3    13 ------------o-oooooooooo                      0.923
    ##  4    17 --++*++++++-++++++-+++-                       0.269
    ##  5   163 -o---o---o--o+----------                      0.692
    ##  6   210 -++++++++-+++-----------                      0.154
    ##  7   233 *+++++++++++o++++++++++o                      0.0385
    ##  8   242 -----------------------                       1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o           0.462
    ## 10  2089 ++++---+--------------o-                      0.615

## Pani et al. (2000) (A) and (B)

There are also two definitions from this paper included in our library.

### Pani et al., 2000 (A)

Definition: PCC: Percentage ratio of negative UOS and the total number of UOS carried out for each patient during the period of treatment

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Remove weeks where participant failed to provide UDS
      mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        mutate(
            pani2000A_red = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, pani2000A_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, pani2000A_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       pani2000A_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   1
    ##  3    13 ------------o-oooooooooo                   1
    ##  4    17 --++*++++++-++++++-+++-                    0.239
    ##  5   163 -o---o---o--o+----------                   0.95
    ##  6   210 -++++++++-+++-----------                   0.542
    ##  7   233 *+++++++++++o++++++++++o                   0.0227
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.769
    ## 10  2089 ++++---+--------------o-                   0.783

### Pani et al., 2000 (B)

Definition: TEC: Percentage ratio between the number of negative UOS and the number of UOS as per protocol

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            pani2000B_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, pani2000B_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, pani2000B_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       pani2000B_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   0.875
    ##  3    13 ------------o-oooooooooo                   0.542
    ##  4    17 --++*++++++-++++++-+++-                    0.239
    ##  5   163 -o---o---o--o+----------                   0.792
    ##  6   210 -++++++++-+++-----------                   0.542
    ##  7   233 *+++++++++++o++++++++++o                   0.0208
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.571
    ## 10  2089 ++++---+--------------o-                   0.75

## Petitjean et al. (2001)

Definition: Weekly proportion of positive UOS (intent-to-treat and completer analysis)

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            udsPattern = recode_missing_visits(usePatternUDS)
        ) %>%
        mutate(
            petitjean2001_use = count_matches(
                use_pattern = udsPattern,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(
            petitjean2001_abs = 1 - petitjean2001_use
        ) %>%
        select(who, petitjean2001_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, petitjean2001_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       petitjean2001_abs
    ##    <dbl> <chr>                                           <dbl>
    ##  1     1 ooooooooooooooo                                0
    ##  2     4 -------------------o-o-o                       0.875
    ##  3    13 ------------o-oooooooooo                       0.542
    ##  4    17 --++*++++++-++++++-+++-                        0.239
    ##  5   163 -o---o---o--o+----------                       0.792
    ##  6   210 -++++++++-+++-----------                       0.542
    ##  7   233 *+++++++++++o++++++++++o                       0.0208
    ##  8   242 -----------------------                        1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o            0.571
    ## 10  2089 ++++---+--------------o-                       0.75

## Preston, Umbricht, and Epstein (2000)

Definition: “Mean intervention percent negative”: Percentage of negative UOS in the treatment phase

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            preston2000_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # 13-week protocol used
                end = 13,
                proportion = TRUE
            )
        ) %>%
        select(who, preston2000_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, preston2000_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       preston2000_red
    ##    <dbl> <chr>                                         <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                     1
    ##  3    13 ------------o-oooooooooo                     0.923
    ##  4    17 --++*++++++-++++++-+++-                      0.269
    ##  5   163 -o---o---o--o+----------                     0.692
    ##  6   210 -++++++++-+++-----------                     0.154
    ##  7   233 *+++++++++++o++++++++++o                     0.0385
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.462
    ## 10  2089 ++++---+--------------o-                     0.615

## Schottenfeld et al. (2005)

Definition: Proportion of negative UOS; exclude missing UDS

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Exclude missing
      mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
      # Count negative
        mutate(
            schottenfeld2005_red = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, schottenfeld2005_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, schottenfeld2005_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       schottenfeld2005_red
    ##    <dbl> <chr>                                              <dbl>
    ##  1     1 ooooooooooooooo                                   0
    ##  2     4 -------------------o-o-o                          1
    ##  3    13 ------------o-oooooooooo                          1
    ##  4    17 --++*++++++-++++++-+++-                           0.239
    ##  5   163 -o---o---o--o+----------                          0.95
    ##  6   210 -++++++++-+++-----------                          0.542
    ##  7   233 *+++++++++++o++++++++++o                          0.0227
    ##  8   242 -----------------------                           1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o               0.769
    ## 10  2089 ++++---+--------------o-                          0.783

## Schwartz et al. (2006)

Definition: Number of positive UOS at 120-day follow-up

This definition is a cohort-level definition, not an individual definition. The individual endpoint would be “was this participant abstinent from the substance of interest at the 120-day follow-up? (17 weeks from randomization). Our participants do not uniformly have 17 weeks of data, so we will assess them at week 15 instead.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
        schwartz2006_abs = count_matches(
            use_pattern = usePatternUDS,
            match_is = "-",
            start = 15, end = 15,
            mixed_results_are = "*"
        )
      ) %>%
        ungroup() %>%
        mutate(
            schwartz2006_isAbs = schwartz2006_abs == 1
        ) %>%
        select(who, schwartz2006_isAbs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, schwartz2006_isAbs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       schwartz2006_isAbs
    ##    <dbl> <chr>                               <lgl>
    ##  1     1 ooooooooooooooo                     FALSE
    ##  2     4 -------------------o-o-o            TRUE
    ##  3    13 ------------o-oooooooooo            FALSE
    ##  4    17 --++*++++++-++++++-+++-             FALSE
    ##  5   163 -o---o---o--o+----------            TRUE
    ##  6   210 -++++++++-+++-----------            TRUE
    ##  7   233 *+++++++++++o++++++++++o            FALSE
    ##  8   242 -----------------------             TRUE
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o TRUE
    ## 10  2089 ++++---+--------------o-            TRUE

## Shufman et al. (1994)

Definition: Percentage of positive UOS; missing is ignored

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            shufman1994_useP = count_matches(
                use_pattern = usePatternUDS,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(shufman1994_absP = 1 - shufman1994_useP) %>%
        select(who, shufman1994_absP) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, schwartz2006_isAbs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       schwartz2006_isAbs
    ##    <dbl> <chr>                               <lgl>
    ##  1     1 ooooooooooooooo                     FALSE
    ##  2     4 -------------------o-o-o            TRUE
    ##  3    13 ------------o-oooooooooo            FALSE
    ##  4    17 --++*++++++-++++++-+++-             FALSE
    ##  5   163 -o---o---o--o+----------            TRUE
    ##  6   210 -++++++++-+++-----------            TRUE
    ##  7   233 *+++++++++++o++++++++++o            FALSE
    ##  8   242 -----------------------             TRUE
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o TRUE
    ## 10  2089 ++++---+--------------o-            TRUE

## Soyka et al. (2008)

Definition: Monthly rates of positive UOS; missing is ignored

The paper is here.

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Ignore missing UDS
        mutate(
            udsPattern = recode_missing_visits(
                use_pattern = usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            soyka2008_use = count_matches(
                use_pattern = udsPattern,
                match_is = "+",
                mixed_results_are = "*",
                mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        mutate(soyka2008_abs = 1 - soyka2008_use) %>%
        ungroup() %>%
        select(who, soyka2008_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, soyka2008_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       soyka2008_abs
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            1
    ##  2     4 -------------------o-o-o                   1
    ##  3    13 ------------o-oooooooooo                   1
    ##  4    17 --++*++++++-++++++-+++-                    0.239
    ##  5   163 -o---o---o--o+----------                   0.95
    ##  6   210 -++++++++-+++-----------                   0.542
    ##  7   233 *+++++++++++o++++++++++o                   0.0227
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.769
    ## 10  2089 ++++---+--------------o-                   0.783

## Strain et al. (1993)

Definition: Rate of positive UOS through the end of the stable dosing period; missing is not defined

Paper here

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            strain1993_use = count_matches(
                use_pattern = usePatternUDS,
                match_is = "+",
                # The stable dosing period began in week 6
                start = 6, end = 15,
                mixed_results_are = "*"
            )
        ) %>%
        mutate(strain1993_abs = 1 - strain1993_use) %>%
        select(who, strain1993_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strain1993_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strain1993_abs
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                                  1
    ##  2     4 -------------------o-o-o                         1
    ##  3    13 ------------o-oooooooooo                         1
    ##  4    17 --++*++++++-++++++-+++-                         -8
    ##  5   163 -o---o---o--o+----------                         0
    ##  6   210 -++++++++-+++-----------                        -6
    ##  7   233 *+++++++++++o++++++++++o                        -8
    ##  8   242 -----------------------                          1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o             -1
    ## 10  2089 ++++---+--------------o-                         0

## Strain et al. (1994)

Definition: Overall rate of positive UOS; missing is ignored

Paper here

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
        # Ignore missing
        mutate(
            udsPattern = recode_missing_visits(
                use_pattern = usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
      # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            strain1994_use = count_matches(
                use_pattern = usePatternUDS,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(strain1994_abs = 1 - strain1994_use) %>%
        select(who, strain1994_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strain1994_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strain1994_abs
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                              1
    ##  2     4 -------------------o-o-o                     1
    ##  3    13 ------------o-oooooooooo                     1
    ##  4    17 --++*++++++-++++++-+++-                      0.239
    ##  5   163 -o---o---o--o+----------                     0.958
    ##  6   210 -++++++++-+++-----------                     0.542
    ##  7   233 *+++++++++++o++++++++++o                     0.104
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.829
    ## 10  2089 ++++---+--------------o-                     0.792

## Strain et al. (1996)

Definition: Percentage of positive UOS – Overall AND summarized in consecutive 2-week blocks; missing is ignored

Because the “two-weeks blocks” definition results in more than one value per participant, we do not provide it in our library. This definition is now identical to that of Strain, Stitzer, Liebson, & Bigelow (1994).

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
        # Ignore missing
        mutate(
            udsPattern = recode_missing_visits(
                use_pattern = usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            strain1996_use = count_matches(
                use_pattern = udsPattern,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(strain1996_abs = 1 - strain1996_use) %>%
        select(who, strain1996_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strain1996_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strain1996_abs
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                             1
    ##  2     4 -------------------o-o-o                    1
    ##  3    13 ------------o-oooooooooo                    1
    ##  4    17 --++*++++++-++++++-+++-                     0.239
    ##  5   163 -o---o---o--o+----------                    0.95
    ##  6   210 -++++++++-+++-----------                    0.542
    ##  7   233 *+++++++++++o++++++++++o                    0.0227
    ##  8   242 -----------------------                     1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o         0.769
    ## 10  2089 ++++---+--------------o-                    0.783

## Strain et al. (1999)

Definition: Percentage of positive UOS

This paper gave no commentary on how the missing values would be processed, only that the statistical software SAS was capable of handling missing values. SAS, by default, excludes missing values from analyses. Therefore, this definition will also be identical to that of Strain, Stitzer, Liebson, & Bigelow (1994).

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
        # Ignore missing
        mutate(
            udsPattern = recode_missing_visits(
                use_pattern = usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
      # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            strain1999_use = count_matches(
                use_pattern = usePatternUDS,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(strain1999_abs = 1 - strain1999_use) %>%
        select(who, strain1999_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strain1999_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strain1999_abs
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                              1
    ##  2     4 -------------------o-o-o                     1
    ##  3    13 ------------o-oooooooooo                     1
    ##  4    17 --++*++++++-++++++-+++-                      0.239
    ##  5   163 -o---o---o--o+----------                     0.958
    ##  6   210 -++++++++-+++-----------                     0.542
    ##  7   233 *+++++++++++o++++++++++o                     0.104
    ##  8   242 -----------------------                      1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o          0.829
    ## 10  2089 ++++---+--------------o-                     0.792

## Strang et al. (2010)

Definitions: ≥50% negative UOS during weeks 14-26

Our protocols do not uniformly contain 26 weeks of data, so we apply this definition as “the last 12 weeks of the protocol.”

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            cleanProp = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # Syntax to select the LAST visits uses a negative sign; this means "12
                #   weeks before the end of the data" to "the last week of the data"
                start = -12, end = -1,
                proportion = TRUE
            )
        ) %>%
        mutate(strang2010_hasRed = cleanProp >= 0.5) %>%
        ungroup() %>%
        select(who, strang2010_hasRed) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strang2010_hasRed)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strang2010_hasRed
    ##    <dbl> <chr>                               <lgl>
    ##  1     1 ooooooooooooooo                     FALSE
    ##  2     4 -------------------o-o-o            TRUE
    ##  3    13 ------------o-oooooooooo            FALSE
    ##  4    17 --++*++++++-++++++-+++-             FALSE
    ##  5   163 -o---o---o--o+----------            TRUE
    ##  6   210 -++++++++-+++-----------            TRUE
    ##  7   233 *+++++++++++o++++++++++o            FALSE
    ##  8   242 -----------------------             TRUE
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o FALSE
    ## 10  2089 ++++---+--------------o-            TRUE

## Strang et al. (2019)

Definition: Proportion of negative UOS at the end of the 12‐week post-randomization time point

Paper here

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      mutate(
            strang2019_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                # Only look at the first 12 weeks after randomization
                start = 1, end = 12,
                proportion = TRUE
            )
        ) %>%
        select(who, strang2019_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, strang2019_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       strang2019_red
    ##    <dbl> <chr>                                        <dbl>
    ##  1     1 ooooooooooooooo                             0
    ##  2     4 -------------------o-o-o                    1
    ##  3    13 ------------o-oooooooooo                    1
    ##  4    17 --++*++++++-++++++-+++-                     0.292
    ##  5   163 -o---o---o--o+----------                    0.75
    ##  6   210 -++++++++-+++-----------                    0.167
    ##  7   233 *+++++++++++o++++++++++o                    0.0417
    ##  8   242 -----------------------                     1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o         0.5
    ## 10  2089 ++++---+--------------o-                    0.583

## Tanum et al. (2017)

Definition: Rate of negative UOS: Number of negative UOS divided by the total number of attended tests (group proportion)

Note that this definition as written is a group outcome, not a participant outcome. Therefore, we calculate this for each subject as the “rate of negative UOS for the time that the patient remained in the study.”

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # How long was each subject retained?
      mutate(lastWeek_idx = measure_retention(use_pattern = usePatternUDS)) %>%
        mutate(
            tanum2017_red = count_matches(
                use_pattern = usePatternUDS,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                start = 1, end = lastWeek_idx,
                proportion = TRUE
            )
        ) %>%
        select(who, tanum2017_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, tanum2017_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       tanum2017_red
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                            0
    ##  2     4 -------------------o-o-o                   0.913
    ##  3    13 ------------o-oooooooooo                   0.929
    ##  4    17 --++*++++++-++++++-+++-                    0.239
    ##  5   163 -o---o---o--o+----------                   0.792
    ##  6   210 -++++++++-+++-----------                   0.542
    ##  7   233 *+++++++++++o++++++++++o                   0.0217
    ##  8   242 -----------------------                    1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o        0.588
    ## 10  2089 ++++---+--------------o-                   0.75

## Wolstein et al. (2009)

Definition: Number of negative UOS per number of weeks of study participation

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Because we are measuring outcomes only while "participating", remove missing
        #   weeks from the use pattern
        mutate(
            usePatternPresent = recode_missing_visits(
                usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        mutate(
            wolstein2009_red = count_matches(
                use_pattern = usePatternPresent,
                match_is = "-",
                # Mixed results weeks count as half of a negative week
                mixed_results_are = "*", mixed_weight = 0.5,
                proportion = TRUE
            )
        ) %>%
        select(who, wolstein2009_red) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, wolstein2009_red)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       wolstein2009_red
    ##    <dbl> <chr>                                          <dbl>
    ##  1     1 ooooooooooooooo                               0
    ##  2     4 -------------------o-o-o                      1
    ##  3    13 ------------o-oooooooooo                      1
    ##  4    17 --++*++++++-++++++-+++-                       0.239
    ##  5   163 -o---o---o--o+----------                      0.95
    ##  6   210 -++++++++-+++-----------                      0.542
    ##  7   233 *+++++++++++o++++++++++o                      0.0227
    ##  8   242 -----------------------                       1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o           0.769
    ## 10  2089 ++++---+--------------o-                      0.783

## Woody et al. (2008)

Definition: Percentage of positive UOS at weeks 4, 8, and 12

This paper contains rather exotic methods for missing value imputation, but the authors remark that setting “missing is positive” did not change their final results. We may include their imputation method in future versions of this code library.

Code

    ###  Define a Visit Pattern (Lattice)  ###
    woodyLattice_char <- collapse_lattice(lattice_patterns = "___o", times = 3)
    woodyLattice_char

    ## [1] "___o___o___o"

Code

    ###  Calculate the Endpoint  ###
    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Only observe scheduled UDS
      mutate(
            udsLattice = view_by_lattice(
                use_pattern = usePatternUDS,
                lattice_pattern = woodyLattice_char
            )
        ) %>%
        # Remove the non-protocol weeks
        mutate(
            udsLattice2 = recode_missing_visits(
                use_pattern = udsLattice,
                missing_is = "_",
                missing_becomes = ""
            )
        ) %>%
        # Mark missing UDS as "+"
        mutate(
            udsLattice3 = recode_missing_visits(use_pattern = udsLattice2)
        ) %>%
        # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            woody2008_use = count_matches(
                use_pattern = udsLattice3,
                match_is = "+",
                mixed_results_are = "*",
                proportion = TRUE
            )
        ) %>%
        mutate(woody2008_abs = 1 - woody2008_use) %>%
        select(who, woody2008_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, woody2008_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       woody2008_abs
    ##    <dbl> <chr>                                       <dbl>
    ##  1     1 ooooooooooooooo                             0
    ##  2     4 -------------------o-o-o                    1
    ##  3    13 ------------o-oooooooooo                    1
    ##  4    17 --++*++++++-++++++-+++-                     0.333
    ##  5   163 -o---o---o--o+----------                    1
    ##  6   210 -++++++++-+++-----------                    0
    ##  7   233 *+++++++++++o++++++++++o                    0
    ##  8   242 -----------------------                     1
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o         1
    ## 10  2089 ++++---+--------------o-                    0.333

## Zaks, Fink, and Freedman (1972)

Definition: Number of positive UOS; missing is ignored

Code

    outcomesRed_df <-
        outcomesRed_df %>%
      rowwise() %>%
      # Ignore missing
        mutate(
            udsPattern = recode_missing_visits(
                use_pattern = usePatternUDS,
                missing_becomes = ""
            )
        ) %>%
        # Count "+" UDS; 0 could be complete dropout or all negative
        mutate(
            zaks1972_use = count_matches(
                use_pattern = udsPattern,
                match_is = "+",
                mixed_results_are = "*"
            )
        ) %>%
        ungroup() %>%
      # For each participant, the "abstinent" metric is the number of total weeks
      #   of study participation - the number of positive weeks
        mutate(zaks1972_abs = str_length(udsPattern) - zaks1972_use) %>%
        select(who, zaks1972_abs) %>%
        left_join(outcomesRed_df, ., by = "who")

    outcomesRed_df %>%
      filter(who %in% examplePeople_int) %>%
      select(who, usePatternUDS, zaks1972_abs)

    ## # A tibble: 10 × 3
    ##      who usePatternUDS                       zaks1972_abs
    ##    <dbl> <chr>                                      <dbl>
    ##  1     1 ooooooooooooooo                              0
    ##  2     4 -------------------o-o-o                    21
    ##  3    13 ------------o-oooooooooo                    13
    ##  4    17 --++*++++++-++++++-+++-                      5.5
    ##  5   163 -o---o---o--o+----------                    19
    ##  6   210 -++++++++-+++-----------                    13
    ##  7   233 *+++++++++++o++++++++++o                     0.5
    ##  8   242 -----------------------                     23
    ##  9  1103 ++--oo--o-+-+--o----------o-o-oo++o         20
    ## 10  2089 ++++---+--------------o-                    18

# Computing Environment

Here is the information concerning the system configuration, packages, and their versions used in this computation:

Code

    sessionInfo()

    ## R version 4.2.0 (2022-04-22)
    ## Platform: x86_64-apple-darwin17.0 (64-bit)
    ## Running under: macOS Big Sur/Monterey 10.16
    ##
    ## Matrix products: default
    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
    ##
    ## locale:
    ## [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ##  [1] forcats_0.5.1    stringr_1.4.0    dplyr_1.0.9      purrr_0.3.4
    ##  [5] readr_2.1.2      tidyr_1.2.0      tibble_3.1.8     ggplot2_3.3.6
    ##  [9] tidyverse_1.3.2  kableExtra_1.3.4 readxl_1.4.0     CTNote_0.1.0
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] lattice_0.20-45     svglite_2.1.0       lubridate_1.8.0
    ##  [4] assertthat_0.2.1    digest_0.6.29       utf8_1.2.2
    ##  [7] R6_2.5.1            cellranger_1.1.0    backports_1.4.1
    ## [10] reprex_2.0.1        evaluate_0.16       highr_0.9
    ## [13] httr_1.4.3          pillar_1.8.0        rlang_1.0.4
    ## [16] googlesheets4_1.0.0 rstudioapi_0.13     jquerylib_0.1.4
    ## [19] Matrix_1.4-1        rmarkdown_2.14      splines_4.2.0
    ## [22] webshot_0.5.3       googledrive_2.0.0   munsell_0.5.0
    ## [25] broom_1.0.0         compiler_4.2.0      modelr_0.1.8
    ## [28] xfun_0.32           pkgconfig_2.0.3     systemfonts_1.0.4
    ## [31] htmltools_0.5.3     tidyselect_1.1.2    fansi_1.0.3
    ## [34] viridisLite_0.4.0   crayon_1.5.1        withr_2.5.0
    ## [37] tzdb_0.3.0          dbplyr_2.2.1        grid_4.2.0
    ## [40] jsonlite_1.8.0      gtable_0.3.0        lifecycle_1.0.1
    ## [43] DBI_1.1.3           magrittr_2.0.3      scales_1.2.0
    ## [46] cli_3.3.0           stringi_1.7.8       cachem_1.0.6
    ## [49] fs_1.5.2            xml2_1.3.3          bslib_0.4.0
    ## [52] ellipsis_0.3.2      generics_0.1.3      vctrs_0.4.1
    ## [55] tools_4.2.0         glue_1.6.2          hms_1.1.1
    ## [58] survival_3.3-1      fastmap_1.1.0       yaml_2.3.5
    ## [61] colorspace_2.0-3    gargle_1.2.0        rvest_1.0.2
    ## [64] knitr_1.39          haven_2.5.0         sass_0.4.2

# References

Comer, Sandra D., Maria A. Sullivan, Elmer Yu, Jami L. Rothenberg, Herbert D. Kleber, Kyle Kampman, Charles Dackis, and Charles P. O’Brien. 2006. “Injectable, Sustained-Release Naltrexone for the Treatment of Opioid Dependence: A Randomized, Placebo-Controlled Trial.” Archives of General Psychiatry 63 (2): 210–18. https://doi.org/10.1001/archpsyc.63.2.210.
Eissenberg, Thomas, George E. Bigelow, Eric C. Strain, Sharon L. Walsh, Robert K. Brooner, Maxine L. Stitzer, and Rolley E. Johnson. 1997. “Dose-Related Efficacy of Levomethadyl Acetate for Treatment of Opioid Dependence: A Randomized Clinical Trial.” Journal of the American Medical Association 277 (24): 1945–51. https://doi.org/10.1001/jama.1997.03540480045037.
Fiellin, David A., Michael V. Pantalon, Marek C. Chawarski, Brent A. Moore, Lynn E. Sullivan, Patrick G. O’Connor, and Richard S. Schottenfeld. 2006. “Counseling Plus Buprenorphine–Naloxone Maintenance Therapy for Opioid Dependence.” New England Journal of Medicine 355 (4): 365–74. https://doi.org/10.1056/NEJMoa055255.
Fudala, Paul J., T. Peter Bridge, Susan Herbert, William O. Williford, C. Nora Chiang, Karen Jones, Joseph Collins, et al. 2003. “Office-Based Treatment of Opiate Addiction with a Sublingual-Tablet Formulation of Buprenorphine and Naloxone.” New England Journal of Medicine 349 (10): 949–58. https://doi.org/10.1056/NEJMoa022164.
Haight, Barbara R, Susan M Learned, Celine M Laffont, Paul J Fudala, Yue Zhao, Amanda S Garofalo, Mark K Greenwald, et al. 2019. “Efficacy and Safety of a Monthly Buprenorphine Depot Injection for Opioid Use Disorder: A Multicentre, Randomised, Double-Blind, Placebo-Controlled, Phase 3 Trial.” The Lancet 393 (10173): 778–90. https://doi.org/10.1016/S0140-6736(18)32259-1.
Jaffe, Jerome H., Edward C. Senay, Charles R. Schuster, Pierre R. Renault, Beth Smith, and Salvatore DiMenza. 1972. “Methadyl Acetate Vs Methadone: A Double-Blind Study in Heroin Users.” Journal of the American Medical Association 222 (4): 437–42. https://doi.org/10.1001/jama.1972.03210040013004.
Johnson, Rolley E., Jerome H. Jaffe, and Paul J. Fudala. 1992. “A Controlled Trial of Buprenorphine Treatment for Opioid Dependence.” Journal of the American Medical Association 267 (20): 2750–55. https://doi.org/10.1001/jama.1992.03480200058024.
Kosten, Thomas R., Richard Schottenfeld, Douglas Ziedonis, and Jean Falcioni. 1993. “Buprenorphine Versus Methadone Maintenance for Opioid Dependence.” The Journal of Nervous and Mental Disease 181 (6): 358–64. https://doi.org/10.1097/00005053-199306000-00004.
Ling, Walter, Paul Casadonte, George Bigelow, Kyle M. Kampman, Ashwin Patkar, Genie L. Bailey, Richard N. Rosenthal, and Katherine L. Beebe. 2010. “Buprenorphine Implants for Treatment of Opioid Dependence: A Randomized Controlled Trial.” Journal of the American Medical Association 304 (14): 1576–83. https://doi.org/10.1001/jama.2010.1427.
Ling, Walter, Charles Charuvastra, Joseph F. Collins, Steve Batki, Lawrence S. Brown Jr, Prudencia Kintaudi, Donald R. Wesson, et al. 1998. “Buprenorphine Maintenance Treatment of Opiate Dependence: A Multicenter, Randomized Clinical Trial.” Addiction 93 (4): 475–86. https://doi.org/10.1046/j.1360-0443.1998.9344753.x.
Ling, Walter, V. Charles Charuvastra, Samuel C. Kaim, and C. James Klett. 1976. “Methadyl Acetate and Methadone as Maintenance Treatments for Heroin Addicts: A Veterans Administration Cooperative Study.” Archives of General Psychiatry 33 (6): 709–20. https://doi.org/10.1001/archpsyc.1976.01770060043007.
Lofwall, Michelle R., Sharon L. Walsh, Edward V. Nunes, Genie L. Bailey, Stacey C. Sigmon, Kyle M. Kampman, Michael Frost, et al. 2018. “Weekly and Monthly Subcutaneous Buprenorphine Depot Formulations Vs Daily Sublingual Buprenorphine With Naloxone for Treatment of Opioid Use Disorder: A Randomized Clinical Trial.” Journal of the American Medical Association: Internal Medicine 178 (6): 764–73. https://doi.org/10.1001/jamainternmed.2018.1052.
Mattick, Richard P., Robert Ali, Jason M. White, Susannah O’Brien, Seija Wolk, and Cath Danz. 2003. “Buprenorphine Versus Methadone Maintenance Therapy: A Randomized Double-Blind Trial with 405 Opioid-Dependent Patients.” Addiction 98 (4): 441–52. https://doi.org/10.1046/j.1360-0443.2003.00335.x.
Pani, Pier Paolo, Icro Maremmani, Roberto Pirastu, Alessandro Tagliamonte, and Gian Luigi Gessa. 2000. “Buprenorphine: A Controlled Clinical Trial in the Treatment of Opioid Dependence.” Drug and Alcohol Dependence 60 (1): 39–50. https://doi.org/10.1016/S0376-8716(00)80006-X.
Petitjean, Sylvie, Rudolf Stohler, Jean-Jacques Déglon, Santino Livoti, Doris Waldvogel, Claude Uehlinger, and Dieter Ladewig. 2001. “Double-Blind Randomized Trial of Buprenorphine and Methadone in Opiate Dependence.” Drug and Alcohol Dependence 62 (1): 97–104. https://doi.org/10.1016/S0376-8716(00)00163-0.
Preston, Kenzie L., Annie Umbricht, and David H. Epstein. 2000. “Methadone Dose Increase and Abstinence Reinforcement for Treatment of Continued Heroin Use During Methadone Maintenance.” Archives of General Psychiatry 57 (4): 395–404. https://doi.org/10.1001/archpsyc.57.4.395.
Schottenfeld, Richard S., Marek C. Chawarski, Juliana R. Pakes, Michael V. Pantalon, Kathleen M. Carroll, and Thomas R. Kosten. 2005. “Methadone Versus Buprenorphine With Contingency Management or Performance Feedback for Cocaine and Opioid Dependence.” American Journal of Psychiatry 162 (2): 340–49. https://doi.org/10.1176/appi.ajp.162.2.340.
Schwartz, Robert P., David A. Highfield, Jerome H. Jaffe, Joseph V. Brady, Carol B. Butler, Charles O. Rouse, Jason M. Callaman, Kevin E. O’Grady, Peter J. Koudstaal, and Monique M. B. Breteler. 2006. “A Randomized Controlled Trial of Interim Methadone Maintenance.” Archives of General Psychiatry 63 (1). https://doi.org/10.1001/archpsyc.63.1.102.
Shufman, Emi N., Shai Porat, Eliezer Witztum, Dan Gandacu, Rachel Bar-Hamburger, and Yigal Ginath. 1994. “The Efficacy of Naltrexone in Preventing Reabuse of Heroin After Detoxification.” Biological Psychiatry 35 (12): 935–45. https://doi.org/10.1016/0006-3223(94)91240-8.
Soyka, Michael, Christina Zingg, Gabriele Koller, and Heinrich Kuefner. 2008. “Retention Rate and Substance Use in Methadone and Buprenorphine Maintenance Therapy and Predictors of Outcome: Results from a Randomized Study.” International Journal of Neuropsychopharmacology 11 (5): 641–53. https://doi.org/10.1017/S146114570700836X.
Strain, Eric C., George E. Bigelow, Ira A. Liebson, and Maxine L. Stitzer. 1999. “Moderate- Vs High-Dose Methadone in the Treatment of Opioid DependenceA Randomized Trial.” Journal of the American Medical Association 281 (11): 1000–1005. https://doi.org/10.1001/jama.281.11.1000.
Strain, Eric C., Maxine L. Stitzer, Ira A. Liebson, and George E. Bigelow. 1993. “Dose-Response Effects of Methadone in the Treatment of Opioid Dependence.” Annals of Internal Medicine 119 (1): 23–27. https://doi.org/10.7326/0003-4819-119-1-199307010-00004.
———. 1994. “Comparison of Buprenorphine and Methadone in the Treatment of Opioid Dependence.” The American Journal of Psychiatry 151 (July): 1025–30. https://doi.org/10.1176/ajp.151.7.1025.
———. 1996. “Buprenorphine Versus Methadone in the Treatment of Opioid Dependence: Self-Reports, Urinalysis, and Addiction Severity Index.” Journal of Clinical Psychopharmacology 16 (1): 58–67. https://doi.org/10.1097/00004714-199602000-00010.
Strang, John, Michael Kelleher, Soraya Mayet, Ed Day, Jennifer Hellier, Sarah Byford, Caroline Murphy, et al. 2019. “Extended-Release Naltrexone Versus Standard Oral Naltrexone Versus Placebo for Opioid Use Disorder: The NEAT Three-Arm RCT.” Health Technology Assessment 23 (3): 1–72. https://doi.org/10.3310/hta23030.
Strang, John, Nicola Metrebian, Nicholas Lintzeris, Laura Potts, Tom Carnwath, Soraya Mayet, Hugh Williams, et al. 2010. “Supervised Injectable Heroin or Injectable Methadone Versus Optimised Oral Methadone as Treatment for Chronic Heroin Addicts in England After Persistent Failure in Orthodox Treatment (RIOTT): A Randomised Trial.” The Lancet 375 (9729): 1885–95. https://doi.org/10.1016/S0140-6736(10)60349-2.
Tanum, Lars, Kristin Klemmetsby Solli, Zill-e-Huma Latif, Jūratė Šaltytė Benth, Arild Opheim, Kamni Sharma-Haase, Peter Krajci, and Nikolaj Kunøe. 2017. “Effectiveness of Injectable Extended-Release Naltrexone Vs Daily Buprenorphine-Naloxone for Opioid Dependence: A Randomized Clinical Noninferiority Trial.” Journal of the American Medical Association: Psychiatry 74 (12): 1197–1205. https://doi.org/10.1001/jamapsychiatry.2017.3206.
Wolstein, J., M. Gastpar, T. Finkbeiner, C. Heinrich, R. Heitkamp, T. Poehlke, and N. Scherbaum. 2009. “A Randomized, Open-Label Trial Comparing Methadone and Levo-Alpha-Acetylmethadol (LAAM) in Maintenance Treatment of Opioid Addiction.” Pharmacopsychiatry 42 (01): 1–8. https://doi.org/10.1055/s-0028-1083818.
Woody, George E., Sabrina A. Poole, Geetha Subramaniam, Karen Dugosh, Michael Bogenschutz, Patrick Abbott, Ashwin Patkar, et al. 2008. “Extended Vs Short-Term Buprenorphine-Naloxone for Treatment of Opioid-Addicted Youth: A Randomized Trial.” Journal of the American Medical Association 300 (17). https://doi.org/10.1001/jama.2008.574.
Zaks, Arthur, Max Fink, and Alfred M. Freedman. 1972. “Levomethadyl in Maintenance Treatment of Opiate Dependence.” Journal of the American Medical Association 220 (6): 811–13. https://doi.org/10.1001/jama.1972.03200060039005.