## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)

## ---- load-packages, include=FALSE--------------------------------------------
library(CTNote)
library(readxl)
library(kableExtra)
library(tidyverse)

## ---- import-table-one, include=FALSE-----------------------------------------
pathToTable1_char <- system.file(
  "suppl_docs", "definitions_20220405.xlsx", package = "CTNote", mustWork = TRUE
)
tab1_df <- readxl::read_xlsx(pathToTable1_char) 

## ---- tidy-table-one, include=FALSE-------------------------------------------
tabTidy1_df <- 
  tab1_df %>% 
  select(-`Frequency of UOS`, -`Coded column name`, -DOI) %>% 
  rename(
    Group = `Outcome Group`,
    Endpoint = `Primary Endpoint`,
    Class = `Numeric Class`,
    Definition = `Definition/Assessment of Outcome`,
    `Missing is` = `Missing UOS coded as`
  ) %>% 
  mutate(
    Group = case_when(
      str_detect(Group, "Abstinence") ~ "Abstinence",
      str_detect(Group, "Relapse") ~ "Relapse",
      str_detect(Group, "Reduction") ~ "Reduction",
    )
  ) %>% 
  filter(Group == "Relapse") %>% 
  arrange(Reference)

defns_char <- tabTidy1_df$Definition
names(defns_char) <- tabTidy1_df$Reference

## ---- show-table-one-reduction, results='asis', echo=FALSE--------------------
tabTidy1_df  %>% 
  kable("html") %>%
  column_spec(1:4, width = "3cm") %>%
  column_spec(5, width = "5cm") %>%
  kable_styling("striped", font_size = 11) %>%
  kable_minimal() %>% 
  # All styling and spec calls have to come BEFORE this line.
  scroll_box(width = "1000px", height = "500px") 

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

# Make a copy
outcomesRel_df <- udsOutcomes_df


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

## ---- include=FALSE-----------------------------------------------------------
which0094_idx <- which(
  names(defns_char) == "CTN-0094"
)

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS
		)
	) %>%
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
  mutate(
		ctn0094_relapse = detect_in_window(
			use_pattern = udsPattern,
			window_width = 4L,
			threshold = 4L
		)
	) %>% 
	unnest(cols = "ctn0094_relapse", names_sep = "_") %>% 
	select(who, starts_with("ctn0094_relapse")) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, starts_with("ctn0094_relapse"))

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  # do NOT recode any missing visits
  mutate(
		ctn0094_dropout = detect_in_window(
			use_pattern = usePatternUDS,
			window_width = 4L,
			threshold = 4L,
			match_is = "o"
		)
	) %>% 
	unnest(cols = "ctn0094_dropout", names_sep = "_") %>% 
	select(who, starts_with("ctn0094_dropout")) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, starts_with("ctn0094_dropout"))

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS,
		)
	) %>% 
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
	mutate(
		johnson1992_hasRel = detect_subpattern(
			use_pattern = udsPattern,
			subpattern = "++",
			# Starting at 4 weeks of treatment
			start = 4L
		)
	) %>% 
	select(who, johnson1992_hasRel) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, johnson1992_hasRel)

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS,
		)
	) %>% 
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
	mutate(
		krupitsky2004_hasRel = detect_subpattern(
			use_pattern = udsPattern,
			subpattern = "+++"
		)
	) %>% 
	select(who, krupitsky2004_hasRel) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, krupitsky2004_hasRel)

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS
		)
	) %>% 
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
	mutate(
		lee2016_rel = detect_in_window(
			use_pattern = udsPattern,
			window_width = 4L,
			threshold = 2L
		)
	) %>% 
	unnest(cols = "lee2016_rel", names_sep = "_") %>% 
	select(who, starts_with("lee2016_rel")) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, starts_with("lee2016_rel"))

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS
		)
	) %>% 
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
	mutate(
		udsPatternTrimmed = str_sub(udsPattern, start = 3L)
	) %>% 
	rowwise() %>% 
	mutate(
		lee2018_rel = detect_in_window(
			use_pattern = udsPatternTrimmed,
			window_width = 4L,
			threshold = 4L
		)
	) %>% 
	unnest(cols = "lee2018_rel", names_sep = "_") %>% 
	mutate(lee2018_rel_time = lee2018_rel_time + 2) %>% 
	select(who, starts_with("lee2018_rel")) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, starts_with("lee2018_rel"))

## -----------------------------------------------------------------------------
outcomesRel_df <- 
	outcomesRel_df %>%
  rowwise() %>% 
  mutate(
		udsPattern = recode_missing_visits(
			use_pattern = usePatternUDS
		)
	) %>% 
	mutate(
		udsPattern = recode_missing_visits(
			use_pattern = udsPattern,
			missing_is = "*"
		)
	) %>% 
	mutate(
		schottenfeld2008_rel = detect_in_window(
			use_pattern = udsPattern,
			window_width = 3L,
			threshold = 3L
		)
	) %>% 
	unnest(cols = "schottenfeld2008_rel", names_sep = "_") %>% 
	select(who, starts_with("schottenfeld2008_rel")) %>% 
	left_join(outcomesRel_df, ., by = "who")

outcomesRel_df %>% 
  filter(who %in% examplePeople_int) %>% 
  select(who, usePatternUDS, starts_with("schottenfeld2008_rel"))

## -----------------------------------------------------------------------------
sessionInfo()

## ---- include=FALSE, eval=FALSE-----------------------------------------------
#  # write_csv(
#  #   outcomesRel_df,
#  #   file = "../inst/extdata/outcomes_relapse_20220818.csv"
#  # )