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:

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

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 BuprenorphineNaloxone 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.