From 0d680145eaccc93b9055d3186e67d93ae6bf82c5 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 5 Nov 2024 09:26:48 +0100 Subject: [PATCH 01/85] bug: force doses times to be AFRLT.dose (at ARRLT = 0) --- R/format_data.R | 82 ++++++++---------- inst/shiny/tabs/nca.R | 13 ++- ...-10_04b60d534d1ab7c24c2fab4ee8702c95.RData | Bin 0 -> 3056 bytes ...nk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb | 0 ...nk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx | Bin 0 -> 125 bytes ...k-1_3baf5bc8147a7f0d6a3653fef316a800.RData | Bin 0 -> 3273 bytes ...unk-1_3baf5bc8147a7f0d6a3653fef316a800.rdb | 0 ...unk-1_3baf5bc8147a7f0d6a3653fef316a800.rdx | Bin 0 -> 125 bytes ...k-2_34085e95397c924995cea3f1c0b2b3bc.RData | Bin 0 -> 3127 bytes ...unk-2_34085e95397c924995cea3f1c0b2b3bc.rdb | 0 ...unk-2_34085e95397c924995cea3f1c0b2b3bc.rdx | Bin 0 -> 125 bytes ...k-3_39255671ec78e4842870a7a62dd112d5.RData | Bin 0 -> 3063 bytes ...unk-3_39255671ec78e4842870a7a62dd112d5.rdb | 0 ...unk-3_39255671ec78e4842870a7a62dd112d5.rdx | Bin 0 -> 125 bytes ...k-4_dad6355d2ebfa2b66368c1834374841a.RData | Bin 0 -> 3173 bytes ...unk-4_dad6355d2ebfa2b66368c1834374841a.rdb | 0 ...unk-4_dad6355d2ebfa2b66368c1834374841a.rdx | Bin 0 -> 125 bytes ...k-5_b86ec085c87a23b8c09f22732dae3042.RData | Bin 0 -> 3201 bytes ...unk-5_b86ec085c87a23b8c09f22732dae3042.rdb | 0 ...unk-5_b86ec085c87a23b8c09f22732dae3042.rdx | Bin 0 -> 125 bytes ...k-6_85234017c541394bb6d4b2878df2736e.RData | Bin 0 -> 3465 bytes ...unk-6_85234017c541394bb6d4b2878df2736e.rdb | 0 ...unk-6_85234017c541394bb6d4b2878df2736e.rdx | Bin 0 -> 125 bytes ...k-7_58f2ab2fd15e1a6c212520eb8869498b.RData | Bin 0 -> 3119 bytes ...unk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb | 0 ...unk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx | Bin 0 -> 125 bytes ...k-8_2215bee3c0ede3c4745474a92aa77c85.RData | Bin 0 -> 3088 bytes ...unk-8_2215bee3c0ede3c4745474a92aa77c85.rdb | 0 ...unk-8_2215bee3c0ede3c4745474a92aa77c85.rdx | Bin 0 -> 125 bytes ...k-9_fb5f377c64e6c0fedfb271b646c2783e.RData | Bin 0 -> 3019 bytes ...unk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb | 0 ...unk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx | Bin 0 -> 125 bytes 32 files changed, 47 insertions(+), 48 deletions(-) create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdx create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.RData create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb create mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx diff --git a/R/format_data.R b/R/format_data.R index 4ee2f840..5511c639 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -1,7 +1,6 @@ #' Format Data for Pharmacokinetic Analysis #' -#' This function formats a data file for pharmacokinetic analysis by converting specific -#' concentration values to numeric and adjusting time based on dose number. +#' This function formats a data file for pharmacokinetic analysis by converting specific concentration values to numeric and adjusting time based on dose number. #' #' @param datafile A data frame containing the raw data to be formatted. #' @@ -10,14 +9,8 @@ #' @details #' The function performs the following steps: #' \itemize{ -#' \item{ -#' Converts concentration values ('AVAL') that are 'BLQ', 'Negative', -#' 'negative', or 'NEGATIVE' to 0. -#' } -#' \item{ -#' Adjusts the time values ('TIME') based on the dose number ('DOSNO'). If 'DOSNO' is 1, -#' 'TIME' is set to 'AFRLT'; otherwise, it is set to 'TIME'. -#' } +#' \item Converts concentration values ('AVAL') that are 'BLQ', 'Negative', 'negative', or 'NEGATIVE' to 0. +#' \item Adjusts the time values ('TIME') based on the dose number ('DOSNO'). If 'DOSNO' is 1, 'TIME' is set to 'AFRLT'; otherwise, it is set to 'TIME'. #' } #' #' @examples @@ -28,13 +21,16 @@ #' #' @import dplyr #' @export -format_data <- function(datafile) { - datafile <- datafile %>% - mutate( - AVAL = as.numeric(ifelse(AVAL %in% c("BLQ", "Negative", "negative", "NEGATIVE"), 0, AVAL)), - TIME = ifelse(DOSNO == 1, AFRLT, TIME) - ) +#Format data for pknca +format_data <- function(datafile) { + datafile = datafile %>% + mutate(AVAL = as.numeric(ifelse(AVAL %in% + c('BLQ', 'Negative', 'negative', 'NEGATIVE'), + 0, AVAL)) + )%>% + mutate(TIME = ifelse(DOSNO == 1, AFRLT, TIME)) + return(datafile) } @@ -42,12 +38,11 @@ format_data <- function(datafile) { #' #' This function creates a pharmacokinetic concentration dataset from the provided ADNCA data. #' -#' @param ADNCA A data frame containing the ADNCA data. -#' @param analyte A character string specifying the analyte of interest. -#' @param proftype A character string specifying the profile type -#' (not used in the function but kept for consistency). +#' @param ADNCA A data frame containing the ADNCA data. +#' @param analyte A character string specifying the analyte of interest. +#' @param proftype A character string specifying the profile type (not used in the function but kept for consistency). #' -#' @returns A data frame containing the filtered and processed concentration data. +#' @return A data frame containing the filtered and processed concentration data. #' #' @details #' The function performs the following steps: @@ -67,27 +62,25 @@ format_data <- function(datafile) { #' #' @import dplyr #' @export -create_conc <- function(ADNCA, analyte, proftype) { - data <- ADNCA %>% - filter( - ANALYTE == analyte, - if ("EVID" %in% names(ADNCA)) EVID == 0 else TRUE - ) %>% - # mutate(TIME=ifelse(TIME<0,0,TIME), - # AVAL=ifelse(TIME==0,0,AVAL)) %>% #make the conc at time 0, 0 - # distinct() %>% - mutate(groups = paste0(USUBJID, ", ", DOSNO)) %>% - filter(TIME >= 0) %>% - arrange(STUDYID, USUBJID, PCSPEC, DOSNO, TIME) %>% - group_by(STUDYID, USUBJID, PCSPEC, DOSNO) %>% - mutate(IX = seq_len(n())) + +#create pknca concentration dataset +create_conc <- function(ADNCA, analyte, group_columns, time_column='AFRLT') { + data <- ADNCA %>% + filter(ANALYTE == analyte, + if ('EVID' %in% names(ADNCA)) EVID == 0 else T) %>% + mutate(conc_groups = interaction(!!!syms(group_columns), sep = '\n')) %>% + arrange(!!sym(time_column)) %>% + mutate(TIME = !!sym(time_column)) %>% + group_by(!!!syms(group_columns)) %>% + mutate(IX = 1:n()) %>% + ungroup() } #' Create PK Dose Dataset #' #' This function creates a pharmacokinetic dose dataset from the provided concentration data. #' -#' @param adnca_conc A data frame containing the concentration data. +#' @param ADNCA_conc A data frame containing the concentration data. #' #' @return A data frame containing the dose data. #' @@ -109,13 +102,14 @@ create_conc <- function(ADNCA, analyte, proftype) { #' @import dplyr #' @export -create_dose <- function(adnca_conc) { - adnca_conc %>% - arrange(USUBJID, DOSNO) %>% - group_by(USUBJID, DOSNO) %>% +create_dose <- function(df_conc, group_columns, time_column = "AFRLT", relative_time0_column = "ARRLT") { + + df_conc %>% + arrange(!!sym(time_column)) %>% + group_by(!!!syms(group_columns)) %>% slice(1) %>% - mutate( - DOSEA = as.numeric(DOSEA), - IQROUTE = ROUTE - ) + ungroup() %>% + mutate(TIME = !!sym(time_column) - !!sym(relative_time0_column)) } + + diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index d01c87ff..f7c603d5 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -185,10 +185,15 @@ observeEvent(input$settings_upload, { # create the PKNCA data object mydata <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { - print("trigered") + + # Define explicetely input columns until there are input definitions + group_columns = intersect(colnames(data()), c('STUDYID', 'PCSPEC', 'DOSNO', 'ROUTE', 'DRUG')) + usubjid_column = 'USUBJID' + time_column = 'AFRLT' + # Segregate the data into concentration and dose records - df_conc <- create_conc(data(), input$analyte, input$proftype) - df_dose <- create_dose(df_conc) + df_conc <- create_conc(data(), input$analyte, c(group_columns, usubjid_column), time_column = 'AFRLT') + df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), time_column = 'AFRLT') # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -207,7 +212,7 @@ observeEvent(input$submit_analyte, priority = 2, { mydose <- PKNCA::PKNCAdose( data = df_dose, formula = DOSEA ~ TIME | STUDYID + PCSPEC + ANALYTE + USUBJID + DOSNO, - route = ifelse(toupper(df_dose$IQROUTE) == "EXTRAVASCULAR", "extravascular", "intravascular"), + route = ifelse(toupper(df_dose$ROUTE) == "EXTRAVASCULAR", "extravascular", "intravascular"), time.nominal = "NFRLT", duration = "ADOSEDUR" ) diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData new file mode 100644 index 0000000000000000000000000000000000000000..0fc9ca962e7758d124e330956b0a50b3baf0e4c1 GIT binary patch literal 3056 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 RR_XGt{1+FN6VoFN003#A89)F4 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 F00047{pbJy literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 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 literal 0 HcmV?d00001 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb new file mode 100644 index 00000000..e69de29b diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d80547eed06d527147adb9056172c9a3c1e51695 GIT binary patch literal 125 zcmb2|=3oE=w(bW>2?+^l35jWG32CfGk`d0%cS>|6BxbZ66cUi)h?vp9qRh4e8Sk7_lb_T&M6 Date: Tue, 5 Nov 2024 17:06:37 +0100 Subject: [PATCH 02/85] data: correct PKROUTE -> ROUTE --- inst/shiny/data/DummyRO_ADNCA.csv | 1076 ++++++++++++++--------------- 1 file changed, 538 insertions(+), 538 deletions(-) diff --git a/inst/shiny/data/DummyRO_ADNCA.csv b/inst/shiny/data/DummyRO_ADNCA.csv index 1898d88f..d1ff413b 100644 --- a/inst/shiny/data/DummyRO_ADNCA.csv +++ b/inst/shiny/data/DummyRO_ADNCA.csv @@ -1,539 +1,539 @@ "STUDYID","USUBJID","ANALYTE","PCSPEC","DOSEFRQ","DOSNO","AFRLT","ARRLT","NRRLT","NFRLT","PCSTRESC","PARAM","PCSTRESU","ROUTE","DOSEA","AGE","SEX","RACE","NDOSEDUR","RRLTU","DOSEU","PCLLOQ","DRUG","AVISIT","AVAL","AVALU","EVID","ATPTREF","SITEID","TRT01A","TRT01P","PCRFTDTM","HTBL","WTBL","WTBLU","HTBLU","ADOSEDUR","NFRLT.min" -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,-0.17,-0.17,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-07-27 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.47,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,7.58,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.58,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.52,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,5,5,4,4,8.5,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.5,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.55,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,7.5,7.5,8,8,8.66,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.66,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.49,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,27.25,27.25,48,48,7.03,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.03,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.48,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,73.08,73.08,144,144,3.78,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.78,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.51,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,383.67,383.67,NA,NA,0.0063,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.0063,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.51,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,2425.17,2425.17,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Safety Follow Up",0,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.5,0 -"XX01",11101,"Analyte01","SERUM","EVERY WEEK",2,503.67,-0.33,0,504,0,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.53,504 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.5,1.5,0.5,504.5,7.28,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.28,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.47,504 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,533,29,48,552,6.25,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",6.25,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.5,504 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,671.58,167.58,336,840,0.955,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.955,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.45,504 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,695.92,191.92,384,888,0.68,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",0.68,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.54,504 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.33,0.33,0,1008,0.0031,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0031,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.47,1008 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.5,1.5,0.5,1008.5,7.99,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",7.99,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.04,1008 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1182.58,174.58,336,1344,1.28,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",1.28,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.06,1008 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1345.83,337.83,672,1680,0.116,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.116,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.07,1008 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1512.92,0.92,0,1512,0.0201,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.0201,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",0.95,1512 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1513.5,1.5,0.5,1512.5,8.73,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",8.73,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.49,1512 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1683.17,171.17,336,1848,1.11,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.11,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.5,1512 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1849,337,672,2184,0.149,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.149,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.49,1512 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2016.92,0.92,0,2016,0.0258,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.0258,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.56,2016 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2017.5,1.5,0.5,2016.5,6.84,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",6.84,"ug/mL",0,"2021-07-27 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:25:00",173,90,"kg","cm",0.48,2016 -"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2184.08,168.08,336,2352,1.07,"Analyte01","ug/mL","INTRAVENOUS",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",1.07,"ug/mL",0,"2021-07-27 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:25:00",173,90,"kg","cm",0.45,2016 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,170.25,1.75,0,168.5,14.9,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.9,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.56,168.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,174.08,5.58,3.5,172,12,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.57,168.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,192.2,23.7,47.5,216,9.37,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.37,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.53,168.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,283.75,115.25,191.5,360,3.12,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",3.12,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.5,168.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,336.35,0.349999999999999,0,336,1.47,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",1.47,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.54,336 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,337.78,1.78,0.5,336.5,15.2,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",15.2,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.11,336 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,359.67,23.67,48,384,12.3,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",12.3,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.11,336 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,504.93,0.929999999999999,0,504,1.28,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",1.28,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.06,504 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,505.58,1.58,0.5,504.5,14.2,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",14.2,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.45,504 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,530.32,26.32,48,552,10.4,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",10.4,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.47,504 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",4,840.98,0.979999999999999,0,840,0.101,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.101,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.44,840 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",4,841.63,1.63,0.5,840.5,17.4,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",17.4,"ug/mL",0,"2021-09-15 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-08 13:41:00",163,54.9,"kg","cm",0.48,840 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",5,1008.88,0.879999999999999,0,1008,1.53,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.53,"ug/mL",0,"2021-09-15 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-08 13:41:00",163,54.9,"kg","cm",0.5,1008 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",5,1009.6,1.6,0.5,1008.5,19.7,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",19.7,"ug/mL",0,"2021-09-22 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-15 13:13:00",163,54.9,"kg","cm",0.54,1008 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",6,1176.17,0.169999999999999,0,1176,2.95,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.95,"ug/mL",0,"2021-09-22 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-15 13:13:00",163,54.9,"kg","cm",0.52,1176 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",6,1177.58,1.58,0.5,1176.5,7.07,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",7.07,"ug/mL",0,"2021-09-29 13:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 14:06:00",163,54.9,"kg","cm",0.44,1176 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1343.77,-0.230000000000001,0,1344,4.05,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",4.05,"ug/mL",0,"2021-09-29 13:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 14:06:00",163,54.9,"kg","cm",0.48,1344 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1345.63,1.63,0.5,1344.5,16.5,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",16.5,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.47,1344 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",8,1512.88,0.879999999999999,0,1512,3.88,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",3.88,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.46,1512 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.03,1.53,0,1512.5,18.5,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",18.5,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.5,1512.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1513.07,0.569999999999999,167.5,1680,3.13,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.13,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.52,1512.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.1,1.6,168,1680.5,14.7,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",14.7,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,1512.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",10,2016.35,0.349999999999999,0,2016,0.893,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.893,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,2016 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",11,2184.98,0.979999999999999,0,2184,2.05,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",2.05,"ug/mL",0,"2021-11-03 12:29:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 13:32:00",163,54.9,"kg","cm",0.58,2184 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",12,2349.92,-2.08,0,2352,2.83,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",2.83,"ug/mL",0,"2021-11-10 12:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:29:00",163,54.9,"kg","cm",0.51,2352 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",13,2520.38,0.379999999999999,0,2520,4.58,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",4.58,"ug/mL",0,"2021-11-17 12:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 12:05:00",163,54.9,"kg","cm",0.57,2520 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",14,2688.08,0.0799999999999994,0,2688,3.77,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",3.77,"ug/mL",0,"2021-11-24 12:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 12:14:00",163,54.9,"kg","cm",0.53,2688 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",15,2856.92,0.919999999999999,0,2856,4.87,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",0.63,"Hours","mg",0,"Analyte01","Cycle 6 Day 15",4.87,"ug/mL",0,"2021-12-01 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 12:34:00",163,54.9,"kg","cm",0.58,2856 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,-1.33,-1.33,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-09-13 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.51,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,1.63,1.63,0.5,0.5,9.93,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.93,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.48,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,5.58,5.58,4,4,8.99,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.99,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,9.33,9.33,8,8,8.75,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.75,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,25.75,25.75,48,48,6.66,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.66,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.42,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,74.83,74.83,144,144,2.98,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.98,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,167.9,-0.1,0,168,0.798,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.798,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.53,168 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,169.75,1.75,0.5,168.5,9.77,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",9.77,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.01,168 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,173.08,5.08,4,172,9.47,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",9.47,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.04,168 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,194.17,26.17,48,216,6.73,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",6.73,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.02,168 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,266.25,98.25,192,360,1.91,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.91,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",0.97,168 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,335.17,-0.83,0,336,0.597,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.597,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.04,336 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,337.75,1.75,0.5,336.5,9.66,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.66,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.85,336 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,357.5,21.5,48,384,6.64,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",6.64,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.87,336 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,503.75,-0.25,0,504,0.322,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.322,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.82,504 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,505.55,1.55,0.5,504.5,3.88,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",3.88,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.53,504 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,530.17,26.17,48,552,4.98,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",4.98,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.58,504 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,672.67,0.67,0,672,0.41,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.41,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.61,672 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,673.92,1.92,0.5,672.5,13.7,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",13.7,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.58,672 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,695.17,23.17,48,720,9.08,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.08,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.59,672 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,767.58,95.58,192,864,3.31,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.31,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.54,672 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",6,840.33,0.33,0,840,1.86,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",1.86,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.54,840 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",6,841.58,1.58,0.5,840.5,5.11,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",5.11,"ug/mL",0,"2021-10-25 11:17:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-18 11:45:00",168,102.6,"kg","cm",0.58,840 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",7,1007.72,-0.28,0,1008,0.856,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.856,"ug/mL",0,"2021-10-25 11:17:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-18 11:45:00",168,102.6,"kg","cm",0.63,1008 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",7,1009.55,1.55,0.5,1008.5,3.8,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",3.8,"ug/mL",0,"2021-11-02 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-25 11:17:00",168,102.6,"kg","cm",0.55,1008 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",8,1175.83,-0.17,0,1176,0.438,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.438,"ug/mL",0,"2021-11-02 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-25 11:17:00",168,102.6,"kg","cm",0.56,1176 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",8,1177.67,1.67,0.5,1176.5,2.87,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.87,"ug/mL",0,"2021-11-08 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-02 13:40:00",168,102.6,"kg","cm",0.47,1176 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",9,1344.25,0.25,0,1344,0.695,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.695,"ug/mL",0,"2021-11-08 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-02 13:40:00",168,102.6,"kg","cm",0.48,1344 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",9,1345.58,1.58,0.5,1344.5,3.61,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",3.61,"ug/mL",0,"2021-11-18 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-08 13:15:00",168,102.6,"kg","cm",0.54,1344 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",10,1511.75,-0.25,0,1512,0.271,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.271,"ug/mL",0,"2021-11-18 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-08 13:15:00",168,102.6,"kg","cm",0.54,1512 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",10,1513.53,1.53,0.5,1512.5,4.6,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",4.6,"ug/mL",0,"2021-11-29 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-18 11:50:00",168,102.6,"kg","cm",0.61,1512 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",11,1680.08,0.0800000000000001,0,1680,0.0917,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",0.0917,"ug/mL",0,"2021-11-29 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-18 11:50:00",168,102.6,"kg","cm",0.57,1680 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",11,1681.58,1.58,0.5,1680.5,4.52,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",4.52,"ug/mL",0,"2021-12-07 13:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 13:20:00",168,102.6,"kg","cm",0.58,1680 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",12,1848.67,0.67,0,1848,0.4,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.4,"ug/mL",0,"2021-12-07 13:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 13:20:00",168,102.6,"kg","cm",0.53,1848 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",12,1849.67,1.67,0.5,1848.5,6.72,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",6.72,"ug/mL",0,"2021-12-14 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-07 13:30:00",168,102.6,"kg","cm",0.59,1848 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",13,2016.42,0.42,0,2016,0.736,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.736,"ug/mL",0,"2021-12-14 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-07 13:30:00",168,102.6,"kg","cm",0.62,2016 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",13,2017.67,1.67,0.5,2016.5,6.56,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",6.56,"ug/mL",0,"2021-12-21 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-14 11:25:00",168,102.6,"kg","cm",0.66,2016 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",14,2184.25,0.25,0,2184,0.504,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",0.504,"ug/mL",0,"2021-12-21 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-14 11:25:00",168,102.6,"kg","cm",0.71,2184 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",14,2185.58,1.58,0.5,2184.5,5.7,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",5.7,"ug/mL",0,"2021-12-28 11:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-21 14:50:00",168,102.6,"kg","cm",0.7,2184 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",15,2352.33,0.33,0,2352,0.803,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",0.803,"ug/mL",0,"2021-12-28 11:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-21 14:50:00",168,102.6,"kg","cm",0.65,2352 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",15,2353.55,1.55,0.5,2352.5,5.28,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",5.28,"ug/mL",0,"2022-01-24 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-28 11:15:00",168,102.6,"kg","cm",0.6,2352 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",16,2522.03,1.53,0,2520.5,3.88,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.63,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",3.88,"ug/mL",0,"2021-09-13 19:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-24 12:58:00",168,102.6,"kg","cm",0.6,2520.5 -"XX01",11103,"Analyte01","SERUM","EVERY WEEK",16,3433.78,913.28,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",35,41,"M","WHITE",0.63,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2021-09-13 19:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-24 12:58:00",168,102.6,"kg","cm",0.72,2520.5 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-09-22 10:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,5.24,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.24,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.47,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,15.2,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.2,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.52,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,9.5,9.5,8,8,15.4,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.4,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,27,27,48,48,10.3,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10.3,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.46,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,76.67,76.67,144,144,6.44,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.44,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,168.42,0.42,0,168,1.84,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.84,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,168 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,12.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12.8,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.94,168 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,18,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",18,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.98,168 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,191.83,23.83,48,216,12.6,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",12.6,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",1.06,168 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,263.5,95.5,192,360,5.76,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",5.76,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.99,168 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,336.92,0.92,0,336,2.15,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",2.15,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.95,336 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,12.2,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",12.2,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.49,336 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,359.5,23.5,48,384,9.69,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",9.69,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.54,336 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,504.83,0.83,0,504,2.45,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",2.45,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.47,504 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,15.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",15.8,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.5,504 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,529.5,25.5,48,552,8.88,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",8.88,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.55,504 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,672.83,0.83,0,672,2.33,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",2.33,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.47,672 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,12.4,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",12.4,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.49,672 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,695.5,23.5,48,720,11.1,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",11.1,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.57,672 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,766.33,94.33,192,864,4.66,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",4.66,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.55,672 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",6,840.83,0.83,0,840,2.27,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",2.27,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.42,840 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,15.3,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",15.3,"ug/mL",0,"2021-11-03 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 14:00:00",161,48.8,"kg","cm",0.59,840 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",7,1008.75,0.75,0,1008,2.35,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",2.35,"ug/mL",0,"2021-11-03 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 14:00:00",161,48.8,"kg","cm",0.51,1008 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,12.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.8,"ug/mL",0,"2021-11-10 14:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:35:00",161,48.8,"kg","cm",0.47,1008 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",8,1176.83,0.83,0,1176,2.59,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.59,"ug/mL",0,"2021-11-10 14:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:35:00",161,48.8,"kg","cm",0.54,1176 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",8,1177.5,1.5,0.5,1176.5,13.2,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.2,"ug/mL",0,"2021-11-17 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 14:20:00",161,48.8,"kg","cm",0.54,1176 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",9,1344.92,0.92,0,1344,2.31,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",2.31,"ug/mL",0,"2021-11-17 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 14:20:00",161,48.8,"kg","cm",0.51,1344 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",9,1345.5,1.5,0.5,1344.5,13.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",13.8,"ug/mL",0,"2021-11-24 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 14:35:00",161,48.8,"kg","cm",0.53,1344 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",10,1512.92,0.92,0,1512,1.51,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",1.51,"ug/mL",0,"2021-11-24 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 14:35:00",161,48.8,"kg","cm",0.52,1512 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",10,1513.5,1.5,0.5,1512.5,12.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",12.8,"ug/mL",0,"2021-12-01 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 15:15:00",161,48.8,"kg","cm",0.48,1512 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",11,1680.75,0.75,0,1680,1.85,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.85,"ug/mL",0,"2021-12-01 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 15:15:00",161,48.8,"kg","cm",0.49,1680 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",11,1681.5,1.5,0.5,1680.5,16,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",16,"ug/mL",0,"2021-12-09 16:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-01 14:50:00",161,48.8,"kg","cm",0.49,1680 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",12,1848.92,0.92,0,1848,0.649,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.649,"ug/mL",0,"2021-12-09 16:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-01 14:50:00",161,48.8,"kg","cm",0.47,1848 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",12,1849.58,1.58,0.5,1848.5,12.4,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",12.4,"ug/mL",0,"2021-12-15 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-09 16:20:00",161,48.8,"kg","cm",0.51,1848 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",13,2016.92,0.92,0,2016,1.5,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",1.5,"ug/mL",0,"2021-12-15 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-09 16:20:00",161,48.8,"kg","cm",0.44,2016 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",13,2017.5,1.5,0.5,2016.5,9.73,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",9.73,"ug/mL",0,"2021-12-22 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-15 14:40:00",161,48.8,"kg","cm",0.47,2016 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",14,2184.92,0.92,0,2184,0.902,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",0.902,"ug/mL",0,"2021-12-22 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-15 14:40:00",161,48.8,"kg","cm",0.56,2184 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",14,2185.5,1.5,0.5,2184.5,13.8,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",13.8,"ug/mL",0,"2021-12-29 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-22 14:30:00",161,48.8,"kg","cm",0.49,2184 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",15,2352.83,0.83,0,2352,0.858,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",0.858,"ug/mL",0,"2021-12-29 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-22 14:30:00",161,48.8,"kg","cm",0.49,2352 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",15,2353.5,1.5,0.5,2352.5,13.6,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",13.6,"ug/mL",0,"2022-01-25 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-29 14:30:00",161,48.8,"kg","cm",0.49,2352 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",16,2522,1.5,0,2520.5,14.3,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",14.3,"ug/mL",0,"2022-02-01 15:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-25 13:50:00",161,48.8,"kg","cm",0.49,2520.5 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",17,2688.92,0.92,0,2688,1.05,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",1.05,"ug/mL",0,"2022-02-01 15:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-25 13:50:00",161,48.8,"kg","cm",0.44,2688 -"XX01",11104,"Analyte01","SERUM","EVERY WEEK",17,2689.5,1.5,0.5,2688.5,18.4,"Analyte01","ug/mL","INTRAVENOUS",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",18.4,"ug/mL",0,"2021-09-22 16:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-01 15:20:00",161,48.8,"kg","cm",0.5,2688 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,-0.0316666666666707,-0.0316666666666707,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-11-29 12:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.06,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,2.96833333333333,2.96833333333333,0.5,0.5,12.2,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.2,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,5.54833333333333,5.54833333333333,4,4,10.8,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.8,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.06,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,9.21833333333333,9.21833333333333,8,8,10.5,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.5,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",1.96,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,28.4683333333333,28.4683333333333,48,48,7.16,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.16,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.01,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,73.6383333333333,73.6383333333333,144,144,3.67,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.67,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.03,0 -"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,1369.46833333333,1369.46833333333,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,-0.3,-0.3,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-01-03 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,1.55,1.55,0.5,0.5,12.7,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.7,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.56,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,5.98,5.98,4,4,8.66,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.66,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,7.78,7.78,8,8,11,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.54,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,26.35,26.35,48,48,6.36,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.36,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,73.13,73.13,144,144,3.01,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.01,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.47,0 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,166.83,-1.17,0,168,1.02,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.02,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.42,168 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,170.03,2.03,0.5,168.5,14.5,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.5,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.18,168 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,172.7,4.7,4,172,13.7,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13.7,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.24,168 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,193.58,25.58,48,216,9.84,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.84,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.19,168 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,264.45,96.45,192,360,1.43,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.43,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.22,168 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,503.18,-0.82,0,504,0.0011,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0011,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.23,504 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,505.53,1.53,0.5,504.5,12.1,"Analyte01","ug/mL","INTRAVENOUS",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",12.1,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.61,504 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,531,27,48,552,6.3,"Analyte01","ug/mL","INTRAVENOUS",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",6.3,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.63,504 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,671.13,-0.87,0,672,0.91,"Analyte01","ug/mL","INTRAVENOUS",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.91,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.56,672 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,673.62,1.62,0.5,672.5,11.5,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",11.5,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.09,672 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,698.53,26.53,48,720,9.39,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.39,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.09,672 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,768.47,96.47,192,864,3.32,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.32,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.06,672 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",5,840.18,0.18,0,840,0.721,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.721,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.15,840 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",6,1006.73,-1.27,0,1008,0.0118,"Analyte01","ug/mL","INTRAVENOUS",1.17,45,"M","WHITE",0.07,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0118,"ug/mL",0,"2022-02-21 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 12:39:00",188,90,"kg","cm",0.12,1008 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",6,1009.57,1.57,0.5,1008.5,12.1,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.1,"ug/mL",0,"2022-02-28 16:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 12:56:00",188,90,"kg","cm",1.12,1008 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",7,1175.27,-0.73,0,1176,0.908,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.908,"ug/mL",0,"2022-02-28 16:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 12:56:00",188,90,"kg","cm",1.14,1176 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",7,1177.73,1.73,0.5,1176.5,13.1,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.13,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.1,"ug/mL",0,"2022-03-07 14:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 16:03:00",188,90,"kg","cm",1.12,1176 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",8,1343.68,-0.32,0,1344,1.61,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.13,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",1.61,"ug/mL",0,"2022-03-07 14:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 16:03:00",188,90,"kg","cm",1.13,1344 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",8,1345.53,1.53,0.5,1344.5,11.5,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",11.5,"ug/mL",0,"2022-03-14 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 14:10:00",188,90,"kg","cm",1.17,1344 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",9,1511.87,-0.13,0,1512,1.46,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",1.46,"ug/mL",0,"2022-03-14 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 14:10:00",188,90,"kg","cm",1.17,1512 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",9,1513.55,1.55,0.5,1512.5,14.1,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",14.1,"ug/mL",0,"2022-03-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 14:07:00",188,90,"kg","cm",1.23,1512 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1679.33,-0.67,0,1680,1.56,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.56,"ug/mL",0,"2022-03-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 14:07:00",188,90,"kg","cm",1.2,1680 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1681.58,1.58,0.5,1680.5,11.6,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",11.6,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1.02,1680 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,1848.45,0.45,0,1848,1.3,"Analyte01","ug/mL","INTRAVENOUS",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",1.3,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4700.02,2852.02,840,2688,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4865.52,3017.52,1008,2856,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5034.27,3186.27,1176,3024,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3023.78,1175.78,1176.5,3024.5,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5201.43,3353.43,1344,3192,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.09,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5368.93,3520.93,1512,3360,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5564.37,3716.37,1680,3528,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3555.45,1707.45,1680.5,3528.5,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5708.23,3860.23,1848,3696,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5877.57,4029.57,2016,3864,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6042.87,4194.87,2184,4032,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4032.28,2184.28,2184.5,4032.5,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6208.95,4360.95,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 0",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6233.22,4385.22,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6379.88,4531.88,2520,4368,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.04,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6547.18,4699.18,2688,4536,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4536.82,2688.82,2688.5,4536.5,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6717.65,4869.65,2856,4704,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6884.13,5036.13,3024,4872,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7049.43,5201.43,3192,5040,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5038.93,3190.93,3192.5,5040.5,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7221.4,5373.4,3360,5208,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.04,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7389.1,5541.1,3528,5376,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7553.55,5705.55,3696,5544,0,"Analyte01","ug/mL","INTRAVENOUS",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 12 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,-3.818,-3.818,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-03-01 13:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.68,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,1.802,1.802,0.5,0.5,22.1,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",22.1,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.63,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,5.632,5.632,4,4,12.5,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.5,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.64,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,8.012,8.012,8,8,11.2,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.2,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.66,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,26.182,26.182,48,48,7.83,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.83,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.66,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,73.682,73.682,144,144,4.48,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.48,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.67,0 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,168.462,0.462000000000002,0,168,1,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.67,168 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,169.802,1.802,0.5,168.5,18.2,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",18.2,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1,168 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,172.632,4.632,4,172,14.7,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.7,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1.07,168 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,192.302,24.302,48,216,9.06,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.06,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",0.99,168 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,242.052,74.052,192,360,4.24,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",4.24,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",0.97,168 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,504.702,0.702000000000002,0,504,0.0058,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0058,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1.03,504 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,505.862,1.862,0.5,504.5,23,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",23,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.56,504 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,531.452,27.452,48,552,7.62,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.62,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.54,504 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,672.612,0.612000000000002,0,672,0.6,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.6,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.54,672 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,673.752,1.752,0.5,672.5,22.8,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",22.8,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.57,672 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,697.112,25.112,48,720,7.43,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",7.43,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.58,672 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,746.952,74.952,192,864,3.33,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.33,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.62,672 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",5,840.752,0.752000000000002,0,840,0.484,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.484,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.59,840 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",5,841.832,1.832,0.5,840.5,16.3,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",16.3,"ug/mL",0,"2022-04-12 12:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-05 12:58:00",165,83.8,"kg","cm",0.61,840 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",6,1007.782,-0.217999999999998,0,1008,1.03,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.03,"ug/mL",0,"2022-04-12 12:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-05 12:58:00",165,83.8,"kg","cm",0.58,1008 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",6,1009.662,1.662,0.5,1008.5,11.8,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",11.8,"ug/mL",0,"2022-04-19 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-12 12:16:00",165,83.8,"kg","cm",0.52,1008 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",7,1173.712,-2.288,0,1176,0.601,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.601,"ug/mL",0,"2022-04-19 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-12 12:16:00",165,83.8,"kg","cm",0.5,1176 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",7,1177.882,1.882,0.5,1176.5,17.6,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",17.6,"ug/mL",0,"2022-04-26 12:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-19 13:15:00",165,83.8,"kg","cm",0.57,1176 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",8,1344.932,0.932000000000002,0,1344,0.683,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.683,"ug/mL",0,"2022-04-26 12:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-19 13:15:00",165,83.8,"kg","cm",0.59,1344 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",8,1345.682,1.682,0.5,1344.5,27,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",27,"ug/mL",0,"2022-05-03 12:19:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-26 12:07:00",165,83.8,"kg","cm",0.58,1344 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1512.982,0.982000000000002,0,1512,0.394,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.394,"ug/mL",0,"2022-05-03 12:19:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-26 12:07:00",165,83.8,"kg","cm",0.56,1512 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1513.812,1.812,0.5,1512.5,19.8,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",19.8,"ug/mL",0,"2022-03-01 19:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-03 12:19:00",165,83.8,"kg","cm",0.56,1512 -"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1655.312,143.312,NA,NA,0.589,"Analyte01","ug/mL","INTRAVENOUS",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.589,"ug/mL",0,"2022-03-01 19:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-03 12:19:00",165,83.8,"kg","cm",0.54,1512 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,-0.3,-0.3,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-02-07 15:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.78,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,1.85,1.85,0.5,0.5,9.92,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.92,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.79,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,5.6,5.6,4,4,8.32,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.32,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.78,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,9.8,9.8,8,8,6.69,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.69,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.76,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,25.37,25.37,48,48,5.86,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",5.86,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.79,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,72.58,72.58,144,144,2.58,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.58,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.76,0 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,166.45,-1.55,0,168,0.489,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.489,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.71,168 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,169.87,1.87,0.5,168.5,7.49,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.49,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.07,168 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,172.75,4.75,4,172,7.56,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.56,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.07,168 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,191.67,23.67,48,216,6.1,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",6.1,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.06,168 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,261.82,93.82,192,360,1.97,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.97,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.04,168 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,336.83,0.83,0,336,0.534,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.534,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.12,336 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,337.83,1.83,0.5,336.5,9.51,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.51,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.64,336 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,362,26,48,384,6.14,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",6.14,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.69,336 -"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,527.92,191.92,NA,NA,0.491,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.491,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.67,336 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,-0.838000000000001,-0.838000000000001,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-02-28 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.48,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,1.602,1.602,0.5,0.5,7.58,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.58,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,5.512,5.512,4,4,5.76,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.76,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.54,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,9.782,9.782,8,8,4.45,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",4.45,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,24.652,24.652,48,48,2.61,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",2.61,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.59,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,74.752,74.752,144,144,0.703,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",0.703,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.55,0 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,167.962,-0.0380000000000005,0,168,0.024,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.024,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,168 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,169.612,1.612,0.5,168.5,7.83,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.83,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.12,168 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,172.582,4.582,4,172,6.47,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",6.47,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.19,168 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,193.582,25.582,48,216,3.47,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",3.47,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.11,168 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,265.512,97.512,192,360,0.102,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",0.102,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.14,168 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,336.202,0.202,0,336,0.0105,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0105,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.18,336 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,337.532,1.532,0.5,336.5,9.79,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.79,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.65,336 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,361.712,25.712,48,384,3.89,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",3.89,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.62,336 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,504.332,0.332,0,504,0.0111,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0111,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.67,504 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,505.582,1.582,0.5,504.5,7.5,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.5,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.49,504 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,529.062,25.062,48,552,2.2,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",2.2,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.47,504 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,672.102,0.102,0,672,0.0268,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.0268,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.5,672 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,673.682,1.682,0.5,672.5,8.87,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",8.87,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.54,672 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,699.452,27.452,48,720,3.57,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",3.57,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.6,672 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,768.332,96.332,192,864,0.325,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.325,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.64,672 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",6,838.562,-1.438,0,840,0.0378,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.0378,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.6,840 -"XX01",11109,"Analyte01","SERUM","EVERY WEEK",6,841.652,1.652,0.5,840.5,7.19,"Analyte01","ug/mL","INTRAVENOUS",35,61,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",7.19,"ug/mL",0,"2022-02-28 18:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-04 14:03:00",172,100.3,"kg","cm",0.6,840 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,-0.845999999999999,-0.845999999999999,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-29 15:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.54,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,1.604,1.604,0.5,0.5,8.83,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.83,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.49,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,3.714,3.714,4,4,7.15,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.15,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.49,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,7.664,7.664,8,8,5.41,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.41,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.5,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,25.784,25.784,48,48,4.75,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",4.75,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.52,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,70.204,70.204,144,144,1.74,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",1.74,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.53,0 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,167.904,-0.0959999999999994,0,168,0.201,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.201,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.54,168 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,169.704,1.704,0.5,168.5,10.1,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.1,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.26,168 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,173.564,5.564,4,172,5.8,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",5.8,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.18,168 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,192.314,24.314,48,216,4.64,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",4.64,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.19,168 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,265.934,97.934,192,360,1.09,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.09,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.25,168 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,336.914,0.914,0,336,0.137,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.137,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.2,336 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,337.634,1.634,0.5,336.5,11.3,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",11.3,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.52,336 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,360.984,24.984,48,384,7.15,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",7.15,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.47,336 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,504.914,0.914,0,504,0.181,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.181,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.51,504 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,505.554,1.554,0.5,504.5,7.99,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.99,"ug/mL",0,"2022-07-27 11:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:35:00",170,70,"kg","cm",0.52,504 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,528.784,24.784,48,552,4.86,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",4.86,"ug/mL",0,"2022-07-27 11:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:35:00",170,70,"kg","cm",0.48,504 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,674.214,1.714,0,672.5,7.01,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",7.01,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.56,672.5 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,697.354,24.854,47.5,720,4.7,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",4.7,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.58,672.5 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,770.104,97.604,191.5,864,1.37,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",1.37,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.51,672.5 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",6,840.814,0.814000000000001,0,840,0.329,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.329,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.64,840 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",6,841.664,1.664,0.5,840.5,9.53,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",9.53,"ug/mL",0,"2022-08-10 10:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 12:47:00",170,70,"kg","cm",0.5,840 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",7,1008.784,0.784,0,1008,0.524,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.524,"ug/mL",0,"2022-08-10 10:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 12:47:00",170,70,"kg","cm",0.6,1008 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",7,1009.754,1.754,0.5,1008.5,8.98,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",8.98,"ug/mL",0,"2022-08-17 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 10:26:00",170,70,"kg","cm",0.59,1008 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",8,1176.454,0.454,0,1176,0.413,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.413,"ug/mL",0,"2022-08-17 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 10:26:00",170,70,"kg","cm",0.6,1176 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",8,1177.564,1.564,0.5,1176.5,8.81,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",8.81,"ug/mL",0,"2022-08-24 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 11:05:00",170,70,"kg","cm",0.57,1176 -"XX01",11110,"Analyte01","SERUM","EVERY WEEK",9,1344.234,0.234,0,1344,0.311,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.311,"ug/mL",0,"2022-08-24 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 11:05:00",170,70,"kg","cm",0.52,1344 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-29 11:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.49,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,15.1,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.1,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.48,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,14.7,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.7,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.5,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,8.17,8.17,8,8,14.2,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.2,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.53,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,26.17,26.17,48,48,8.46,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.46,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.5,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,72.5,72.5,144,144,4.58,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.58,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.49,0 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,168.25,0.25,0,168,0.737,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.737,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.53,168 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,17,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",17,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.96,168 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,173.5,5.5,4,172,13.4,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13.4,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",1.04,168 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,192.83,24.83,48,216,12.5,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",12.5,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.99,168 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,264.17,96.17,192,360,2.73,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.73,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.97,168 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,336.33,0.33,0,336,0.545,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.545,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.99,336 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,13.6,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",13.6,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.49,336 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,359.58,23.58,48,384,10.8,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",10.8,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.45,336 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,504.25,0.25,0,504,0.647,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.647,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.46,504 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,16.6,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",16.6,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.47,504 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,531.08,27.08,48,552,9.8,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9.8,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.54,504 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,672.75,0.75,0,672,1.11,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.11,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.54,672 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,11.7,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",11.7,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.51,672 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,695.67,23.67,48,720,7.57,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",7.57,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.49,672 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",6,840.92,0.92,0,840,1.18,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",1.18,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.53,840 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,12.4,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",12.4,"ug/mL",0,"2022-08-10 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 15:55:00",162,66.9,"kg","cm",0.55,840 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",7,1008.83,0.83,0,1008,1.18,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.18,"ug/mL",0,"2022-08-10 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 15:55:00",162,66.9,"kg","cm",0.54,1008 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,13.1,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",13.1,"ug/mL",0,"2022-08-17 16:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 13:25:00",162,66.9,"kg","cm",0.48,1008 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",8,1176.92,0.92,0,1176,13.7,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.7,"ug/mL",0,"2022-08-17 16:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 13:25:00",162,66.9,"kg","cm",0.51,1176 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",8,1177.5,1.5,0.5,1176.5,1.18,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",1.18,"ug/mL",0,"2022-08-24 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:45:00",162,66.9,"kg","cm",0.44,1176 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",9,1344.92,0.92,0,1344,1.15,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",1.15,"ug/mL",0,"2022-08-24 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:45:00",162,66.9,"kg","cm",0.46,1344 -"XX01",11111,"Analyte01","SERUM","EVERY WEEK",9,1345.58,1.58,0.5,1344.5,10.3,"Analyte01","ug/mL","INTRAVENOUS",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",10.3,"ug/mL",0,"2022-08-31 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-24 15:30:00",162,66.9,"kg","cm",0.45,1344 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,-0.32,-0.32,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-26 12:37:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.47,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,1.55,1.55,0.5,0.5,11.8,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.8,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.54,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,5.48,5.48,4,4,10.1,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.1,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.5,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,10.22,10.22,8,8,10.8,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.8,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.46,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,26.53,26.53,48,48,7.79,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.79,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.45,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,68.65,68.65,144,144,2.73,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.73,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.5,0 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,166.77,-1.23,0,168,0.275,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.275,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.48,168 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,169.67,1.67,0.5,168.5,13,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.47,168 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,172.72,4.72,4,172,10.5,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.5,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.41,168 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,191.67,23.67,48,216,8.15,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",8.15,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.43,168 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,237.08,69.08,192,360,2.09,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.09,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.49,168 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",3,334.73,-1.27,0,336,0.0441,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0441,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.43,336 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",3,337.72,1.72,0.5,336.5,9.21,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.21,"ug/mL",0,"2022-08-16 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 11:54:00",177,92.2,"kg","cm",1.45,336 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",4,504.3,0.3,0,504,0.108,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.108,"ug/mL",0,"2022-08-16 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 11:54:00",177,92.2,"kg","cm",1.5,504 -"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",4,505.53,1.53,0.5,504.5,9.45,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",9.45,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",0.97,504 -"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",4,533.58,29.58,48,552,5.78,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",5.78,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",1.03,504 -"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",5,670.22,-1.78,0,672,0.36,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.36,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",0.98,672 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,673.65,1.65,0.5,672.5,9.29,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",9.29,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.77,672 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,696.38,24.38,48,720,6.26,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",6.26,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.81,672 -"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,742.03,70.03,192,864,2.88,"Analyte01","ug/mL","INTRAVENOUS",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",2.88,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.67,672 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-05 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.47,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,13.8,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.8,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.51,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,12.8,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.8,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.52,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,10,10,8,8,11.3,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.3,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.47,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,24.25,24.25,48,48,8.12,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.12,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.46,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,73.08,73.08,144,144,4.22,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.22,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.51,0 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,168.33,0.33,0,168,0.735,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.735,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.48,168 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,10.7,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.7,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.02,168 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,192.83,24.83,48,216,8.7,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",8.7,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.04,168 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,263.67,95.67,192,360,2.52,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.52,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.01,168 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,504.83,0.83,0,504,0.002,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.002,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",0.96,504 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,505.5,1.5,0.5,504.5,11.8,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",11.8,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.52,504 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,531.08,27.08,48,552,7.95,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.95,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.51,504 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,672.75,0.75,0,672,0.793,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.793,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.51,672 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,673.5,1.5,0.5,672.5,15.5,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",15.5,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.55,672 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,694.33,22.33,48,720,9.43,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.43,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.51,672 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,772.75,100.75,192,864,2.7,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",2.7,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.48,672 -"XX01",11201,"Analyte01","SERUM","EVERY WEEK",5,840.67,0.67,0,840,0.898,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.898,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.5,840 -"XX01",11201,"Analyte01","SERUM","EVERY 3 WEEKS",5,841.5,1.5,0.5,840.5,15.2,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",15.2,"ug/mL",0,"2022-05-05 17:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:50:00",185,83,"kg","cm",0.56,840 -"XX01",11201,"Analyte01","SERUM","EVERY 3 WEEKS",5,1200,360,NA,NA,0.0097,"Analyte01","ug/mL","INTRAVENOUS",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.0097,"ug/mL",0,"2022-05-05 17:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:50:00",185,83,"kg","cm",0.47,840 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,-1.66333333333334,-1.66333333333334,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-31 13:36:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.49,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.71666666666666,1.71666666666666,0.5,0.5,9.38,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.38,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.46,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.44666666666666,5.44666666666666,4,4,8.99,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.99,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.46,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.14666666666666,9.14666666666666,8,8,8.04,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.04,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.54,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,24.0466666666667,24.0466666666667,48,48,6.04,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.04,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.51,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,78.3666666666667,78.3666666666667,144,144,2.11,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.11,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,167.686666666667,167.686666666667,336,336,0.188,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.188,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,194.086666666667,194.086666666667,216,216,0.0788,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",0.0788,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.44,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,263.586666666667,263.586666666667,360,360,0.011,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",0.011,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,335.946666666667,335.946666666667,672,672,0.003,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.003,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,502.386666666667,-1.61333333333334,0,504,0,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,504 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.816666666667,1.81666666666666,0.5,504.5,8.42,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",8.42,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.56,504 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,670.496666666667,166.496666666667,336,840,0.154,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.154,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.55,504 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,693.216666666667,189.216666666667,384,888,0.0795,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",0.0795,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.62,504 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,741.596666666667,237.596666666667,528,1032,0.0231,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.0231,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.62,504 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1007.41666666667,-0.583333333333337,0,1008,0,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.59,1008 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.53666666667,1.53666666666666,0.5,1008.5,9.17,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",9.17,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",0.97,1008 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1174.96666666667,166.966666666667,336,1344,0.126,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.126,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",0.98,1008 -"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1341.78666666667,333.786666666667,672,1680,0.0031,"Analyte01","ug/mL","INTRAVENOUS",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.0031,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",1.03,1008 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,-1.086,-1.086,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-02 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.6,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,1.664,1.664,0.5,0.5,12.6,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.6,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.57,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,6.084,6.084,4,4,14,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.59,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,8.754,8.754,8,8,14.5,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.5,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.54,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,25.914,25.914,48,48,10.4,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10.4,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.57,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,71.584,71.584,144,144,6.46,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.46,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.63,0 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,167.834,-0.166,0,168,2,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",2,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.64,168 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,169.584,1.584,0.5,168.5,21.4,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",21.4,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.31,168 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,172.464,4.464,4,172,24.1,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",24.1,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.23,168 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,191.504,23.504,48,216,16.6,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",16.6,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.26,168 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,263.334,95.334,192,360,7.68,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",7.68,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.28,168 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",3,336.914,0.914,0,336,3.16,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",3.16,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.22,336 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",3,337.614,1.614,0.5,336.5,16.2,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",16.2,"ug/mL",0,"2022-06-23 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:30:00",174,75.5,"kg","cm",0.6,336 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,504.584,0.584,0,504,3.28,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",3.28,"ug/mL",0,"2022-06-23 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:30:00",174,75.5,"kg","cm",0.63,504 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,505.704,1.704,0.5,504.5,23.3,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",23.3,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.48,504 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,531.164,27.164,48,552,23.2,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",23.2,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.49,504 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,672.004,0.00400000000000023,0,672,3.23,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",3.23,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.53,672 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,673.664,1.664,0.5,672.5,16,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",16,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.47,672 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,695.584,23.584,48,720,12,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",12,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.56,672 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",6,840.584,0.584,0,840,3.06,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",3.06,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.53,840 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",6,841.664,1.664,0.5,840.5,14.8,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",14.8,"ug/mL",0,"2022-07-14 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 12:00:00",174,75.5,"kg","cm",0.62,840 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",7,1008.254,0.254,0,1008,3.79,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",3.79,"ug/mL",0,"2022-07-14 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 12:00:00",174,75.5,"kg","cm",0.61,1008 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",7,1009.664,1.664,0.5,1008.5,26.1,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",26.1,"ug/mL",0,"2022-07-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 11:30:00",174,75.5,"kg","cm",0.52,1008 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",8,1176.164,0.164,0,1176,3.28,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",3.28,"ug/mL",0,"2022-07-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 11:30:00",174,75.5,"kg","cm",0.48,1176 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",8,1177.634,1.634,0.5,1176.5,13.9,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.9,"ug/mL",0,"2022-07-28 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-21 13:40:00",174,75.5,"kg","cm",0.55,1176 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",9,1343.004,-0.996,0,1344,4.09,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",4.09,"ug/mL",0,"2022-07-28 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-21 13:40:00",174,75.5,"kg","cm",0.46,1344 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",9,1345.664,1.664,0.5,1344.5,24,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",24,"ug/mL",0,"2022-08-04 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 14:00:00",174,75.5,"kg","cm",0.54,1344 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",10,1512.004,0.00400000000000023,0,1512,4.02,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",4.02,"ug/mL",0,"2022-08-04 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 14:00:00",174,75.5,"kg","cm",0.53,1512 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",10,1513.714,1.714,0.5,1512.5,23.4,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",23.4,"ug/mL",0,"2022-08-11 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:50:00",174,75.5,"kg","cm",0.54,1512 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",11,1679.754,-0.246,0,1680,3.39,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.39,"ug/mL",0,"2022-08-11 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:50:00",174,75.5,"kg","cm",0.45,1680 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",11,1681.664,1.664,0.5,1680.5,17.9,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",17.9,"ug/mL",0,"2022-08-18 11:09:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-11 12:35:00",174,75.5,"kg","cm",0.61,1680 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",12,1848.104,0.104,0,1848,3.74,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",3.74,"ug/mL",0,"2022-08-18 11:09:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-11 12:35:00",174,75.5,"kg","cm",0.57,1848 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",12,1849.634,1.634,0.5,1848.5,12.8,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",12.8,"ug/mL",0,"2022-08-25 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-18 11:09:00",174,75.5,"kg","cm",0.66,1848 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",13,2015.414,-0.586,0,2016,3.83,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",3.83,"ug/mL",0,"2022-08-25 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-18 11:09:00",174,75.5,"kg","cm",0.6,2016 -"XX01",11203,"Analyte01","SERUM","EVERY WEEK",13,2017.754,1.754,0.5,2016.5,15.8,"Analyte01","ug/mL","INTRAVENOUS",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",15.8,"ug/mL",0,"2022-06-02 19:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-25 14:40:00",174,75.5,"kg","cm",0.56,2016 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,-1.168,-1.168,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-09 13:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.59,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,2.752,2.752,0.5,0.5,20.1,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",20.1,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.58,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,6.752,6.752,4,4,20.7,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",20.7,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.59,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,9.662,9.662,8,8,19.9,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",19.9,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.57,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,27.002,27.002,48,48,11.1,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",11.1,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.61,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,72.752,72.752,144,144,6.14,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.14,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.55,0 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,503.002,-0.998000000000001,0,504,0.0166,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0166,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.53,504 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,506.662,2.662,0.5,504.5,13,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",13,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.26,504 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,530.502,26.502,48,552,13.4,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",13.4,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.29,504 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",3,671.712,-0.288000000000001,0,672,2.5,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",2.5,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.29,672 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",3,674.632,2.632,0.5,672.5,14.7,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",14.7,"ug/mL",0,"2022-07-14 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 14:07:00",158,49.3,"kg","cm",2.15,672 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",4,840.332,0.331999999999999,0,840,3.03,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",2.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",3.03,"ug/mL",0,"2022-07-14 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 14:07:00",158,49.3,"kg","cm",2.12,840 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",4,842.662,2.662,0.5,840.5,14.8,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",14.8,"ug/mL",0,"2022-07-28 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 12:55:00",158,49.3,"kg","cm",1.52,840 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",5,1008.832,0.831999999999999,0,1008,0.949,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.949,"ug/mL",0,"2022-07-28 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 12:55:00",158,49.3,"kg","cm",1.54,1008 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",5,1010.662,2.662,0.5,1008.5,12.4,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.4,"ug/mL",0,"2022-08-04 11:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 15:15:00",158,49.3,"kg","cm",1.71,1008 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",6,1176.982,0.981999999999999,0,1176,2.8,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.8,"ug/mL",0,"2022-08-04 11:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 15:15:00",158,49.3,"kg","cm",1.67,1176 -"XX01",11204,"Analyte01","SERUM","EVERY WEEK",6,1178.652,2.652,0.5,1176.5,17.1,"Analyte01","ug/mL","INTRAVENOUS",50,69,"F","WHITE",1.1,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",17.1,"ug/mL",0,"2022-06-09 20:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:41:00",158,49.3,"kg","cm",1.07,1176 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.5,-0.5,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-12 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.57,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.5,1.5,0.5,0.5,14.6,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.6,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.52,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.5,5.5,4,4,14.5,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.5,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.48,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.5,9.5,8,8,14.1,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.1,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.49,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,27.33,27.33,48,48,9.67,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",9.67,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.53,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,47,47,144,144,6.04,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.04,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.51,0 -"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",2,168.33,0.33,0,168,1.77,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.77,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.48,168 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,12.9,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12.9,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.99,168 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,14.7,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.7,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",1,168 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,188.83,20.83,48,216,13.3,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",13.3,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.99,168 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,258.83,90.83,192,360,5.95,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",5.95,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.93,168 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,336.83,0.83,0,336,1.92,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",1.92,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",1,336 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,23.2,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",23.2,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.52,336 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,362.58,26.58,48,384,12,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",12,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.46,336 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,504.42,0.42,0,504,2.28,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",2.28,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.52,504 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,20,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",20,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.99,504 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,531.08,27.08,48,552,12.6,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",12.6,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.94,504 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,672.92,0.92,0,672,3.6,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",3.6,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.97,672 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,16.5,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",16.5,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.52,672 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,694.75,22.75,48,720,15.7,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",15.7,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.53,672 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,768,96,192,864,7.75,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",7.75,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.56,672 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",6,840.67,0.67,0,840,4.49,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",4.49,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.5,840 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,18.9,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",18.9,"ug/mL",0,"2022-08-23 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:50:00",173,55.5,"kg","cm",0.54,840 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",7,1008.92,0.92,0,1008,4.13,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",4.13,"ug/mL",0,"2022-08-23 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:50:00",173,55.5,"kg","cm",0.54,1008 -"XX01",11301,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,10.9,"Analyte01","ug/mL","INTRAVENOUS",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",10.9,"ug/mL",0,"2022-08-30 16:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:05:00",173,55.5,"kg","cm",0.49,1008 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,-0.164000000000001,-0.164000000000001,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-08-16 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.7,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,1.716,1.716,0.5,0.5,9.13,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.13,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.67,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,5.666,5.666,4,4,13.7,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.7,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.65,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,8.996,8.996,8,8,13.4,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.4,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.63,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,25.836,25.836,48,48,8.65,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.65,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.75,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,75.586,75.586,144,144,3.9,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.9,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.65,0 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,168.446,0.445999999999999,0,168,1.01,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.01,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.67,168 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,169.786,1.786,0.5,168.5,11.9,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",11.9,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.05,168 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,172.696,4.696,4,172,14.8,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.8,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.01,168 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,192.366,24.366,48,216,11.4,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",11.4,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.04,168 -"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,263.696,95.696,192,360,4.1,"Analyte01","ug/mL","INTRAVENOUS",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",4.1,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.02,168 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.0814285714285747,-0.0814285714285747,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-31 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.77,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.86857142857143,1.86857142857143,0.5,0.5,6.7,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.7,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.67,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.74857142857143,5.74857142857143,4,4,10.3,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.3,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.71,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.74857142857142,9.74857142857142,8,8,12.8,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.8,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.68,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,28.7485714285714,28.7485714285714,48,48,10,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.72,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,75.4985714285714,75.4985714285714,144,144,6.61,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.61,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.72,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,170.748571428571,170.748571428571,336,336,2.59,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",2.59,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.74,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,338.088571428571,338.088571428571,672,672,0.349,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.349,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.67,0 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,504.298571428571,0.298571428571425,0,504,0.0185,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0185,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.71,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,506.188571428571,2.18857142857143,0.5,504.5,11.7,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",11.7,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.14,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,531.888571428571,27.8885714285714,48,552,9,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.13,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,668.718571428571,164.718571428571,336,840,1.97,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.97,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.17,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,699.718571428571,195.718571428571,384,888,1.43,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.43,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.17,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,767.718571428571,263.718571428571,528,1032,0.69,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.69,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.23,504 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.38857142857,0.388571428571425,0,1008,0.0211,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0211,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.1,1008 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1010.04857142857,2.04857142857143,0.5,1008.5,13.3,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",13.3,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.63,1008 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1177.54857142857,169.548571428571,336,1344,2.05,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.05,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.54,1008 -"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1345.29857142857,337.298571428571,672,1680,0.32,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.32,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.58,1008 -"XX01",25101,"Analyte01","SERUM","EVERY WEEK",4,1514.24857142857,1.74857142857143,0,1512.5,12.7,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",12.7,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.64,1512.5 -"XX01",25101,"Analyte01","SERUM","EVERY WEEK",4,1681.08857142857,168.588571428571,335.5,1848,2.29,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",2.29,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.6,1512.5 -"XX01",25101,"Analyte01","SERUM","EVERY WEEK",5,2016.46857142857,0.468571428571425,0,2016,0.04,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.04,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.57,2016 -"XX01",25101,"Analyte01","SERUM","EVERY WEEK",6,2017.96857142857,1.46857142857143,0,2016.5,8.69,"Analyte01","ug/mL","INTRAVENOUS",35,70,"F","WHITE",0.32,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",8.69,"ug/mL",0,"2022-09-13 12:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:35:00",149,64,"kg","cm",0.31,2016.5 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.42,-0.42,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-16 11:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.56,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.5,1.5,0.5,0.5,12.1,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.1,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.47,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.5,5.5,4,4,11.1,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.1,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.53,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.5,9.5,8,8,12.5,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.5,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.48,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.5,25.5,48,48,8.61,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.61,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.45,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,73.5,73.5,144,144,3.61,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.61,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.44,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,167.92,167.92,336,336,1.45,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.45,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.5,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,195.18,195.18,216,216,0.968,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",0.968,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.51,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,336,336,672,672,0.0315,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0315,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.45,0 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,504.33,0.33,0,504,0.0034,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0034,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.53,504 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.5,1.5,0.5,504.5,5.25,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",5.25,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1.05,504 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,530.67,26.67,48,552,7.65,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.65,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1,504 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,671.83,167.83,336,840,1.88,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.88,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",0.96,504 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,698.65,194.65,384,888,1.42,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.42,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",0.97,504 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.33,0.33,0,1008,0.0069,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0069,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1,1008 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.5,1.5,0.5,1008.5,10.2,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",10.2,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.54,1008 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1176.22,168.22,336,1344,2,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.45,1008 -"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1344.22,336.22,672,1680,0.147,"Analyte01","ug/mL","INTRAVENOUS",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.147,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.52,1008 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,-1.8,-1.8,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-21 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.67,1.67,0.5,0.5,10.5,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.5,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.5,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.47,5.47,4,4,9.15,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.15,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,10.07,10.07,8,8,9.68,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.68,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.48,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.08,25.08,48,48,6.32,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.32,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.48,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,73.5,73.5,144,144,3.12,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.12,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.46,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,170.82,170.82,336,336,0.603,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.603,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.5,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,338.55,338.55,672,672,0.0027,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0027,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 -"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,503.95,503.95,NA,NA,0,"Analyte01","ug/mL","INTRAVENOUS",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,-2.99428571428572,-2.99428571428572,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-19 12:37:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.52,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.76571428571428,1.76571428571428,0.5,0.5,14.4,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.4,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.49,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.51571428571428,5.51571428571428,4,4,17.5,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",17.5,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.76571428571428,9.76571428571428,8,8,14.2,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.2,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,27.6057142857143,27.6057142857143,48,48,8.16,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.16,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.54,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,71.6057142857143,71.6057142857143,144,144,4.51,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.51,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.52,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,165.915714285714,165.915714285714,336,336,1.28,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.28,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.55,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,333.385714285714,333.385714285714,672,672,0.0187,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0187,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,503.135714285714,-0.864285714285719,0,504,0.002,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.002,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.55,504 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.655714285714,1.65571428571428,0.5,504.5,12.1,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",12.1,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.5,504 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,527.815714285714,23.8157142857143,48,552,9.64,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9.64,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.51,504 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,677.015714285714,173.015714285714,336,840,1.65,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.65,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.5,504 -"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,699.005714285714,195.005714285714,384,888,1.21,"Analyte01","ug/mL","INTRAVENOUS",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.21,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.47,504 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.438333333333333,-0.438333333333333,0,0,0,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-08-23 11:59:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.52,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.58166666666667,1.58166666666667,0.5,0.5,6.3,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.3,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.56,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,4.63166666666667,4.63166666666667,4,4,7.16,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.16,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.49,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,7.96166666666667,7.96166666666667,8,8,5.83,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.83,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.58,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.3016666666667,25.3016666666667,48,48,4.28,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",4.28,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.53,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,75.6816666666667,75.6816666666667,144,144,1.95,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",1.95,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.54,0 -"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,171.701666666667,171.701666666667,336,336,0.258,"Analyte01","ug/mL","INTRAVENOUS",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.258,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.5,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,-0.17,-0.17,0,0,0,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-07-27 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.47,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,7.58,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.58,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.52,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,5,5,4,4,8.5,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.5,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.55,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,7.5,7.5,8,8,8.66,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.66,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.49,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,27.25,27.25,48,48,7.03,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.03,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.48,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,73.08,73.08,144,144,3.78,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.78,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.51,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,383.67,383.67,NA,NA,0.0063,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.0063,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.51,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",1,2425.17,2425.17,NA,NA,0,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Safety Follow Up",0,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.5,0 +"XX01",11101,"Analyte01","SERUM","EVERY WEEK",2,503.67,-0.33,0,504,0,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0,"ug/mL",0,"2022-06-15 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-07-27 12:30:00",173,90,"kg","cm",1.53,504 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.5,1.5,0.5,504.5,7.28,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.28,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.47,504 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,533,29,48,552,6.25,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",6.25,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.5,504 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,671.58,167.58,336,840,0.955,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.955,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.45,504 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",2,695.92,191.92,384,888,0.68,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",0.68,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.54,504 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.33,0.33,0,1008,0.0031,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0031,"ug/mL",0,"2022-07-06 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-15 11:25:00",173,90,"kg","cm",1.47,1008 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.5,1.5,0.5,1008.5,7.99,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",7.99,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.04,1008 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1182.58,174.58,336,1344,1.28,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",1.28,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.06,1008 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1345.83,337.83,672,1680,0.116,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.116,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",1.07,1008 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1512.92,0.92,0,1512,0.0201,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.0201,"ug/mL",0,"2022-07-27 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:00:00",173,90,"kg","cm",0.95,1512 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1513.5,1.5,0.5,1512.5,8.73,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",8.73,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.49,1512 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1683.17,171.17,336,1848,1.11,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.11,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.5,1512 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",4,1849,337,672,2184,0.149,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.149,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.49,1512 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2016.92,0.92,0,2016,0.0258,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.0258,"ug/mL",0,"2022-08-17 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:00:00",173,90,"kg","cm",0.56,2016 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2017.5,1.5,0.5,2016.5,6.84,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",6.84,"ug/mL",0,"2021-07-27 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:25:00",173,90,"kg","cm",0.48,2016 +"XX01",11101,"Analyte01","SERUM","EVERY 3 WEEKS",5,2184.08,168.08,336,2352,1.07,"Analyte01","ug/mL","intravascular",35,52,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",1.07,"ug/mL",0,"2021-07-27 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:25:00",173,90,"kg","cm",0.45,2016 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,170.25,1.75,0,168.5,14.9,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.9,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.56,168.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,174.08,5.58,3.5,172,12,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.57,168.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,192.2,23.7,47.5,216,9.37,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.37,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.53,168.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",1,283.75,115.25,191.5,360,3.12,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",3.12,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.5,168.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,336.35,0.349999999999999,0,336,1.47,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.55,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",1.47,"ug/mL",0,"2021-08-18 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-11 15:53:00",163,54.9,"kg","cm",1.54,336 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,337.78,1.78,0.5,336.5,15.2,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",15.2,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.11,336 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",2,359.67,23.67,48,384,12.3,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",12.3,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.11,336 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,504.93,0.929999999999999,0,504,1.28,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",1.28,"ug/mL",0,"2021-08-25 12:12:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-18 13:02:00",163,54.9,"kg","cm",1.06,504 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,505.58,1.58,0.5,504.5,14.2,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",14.2,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.45,504 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",3,530.32,26.32,48,552,10.4,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",10.4,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.47,504 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",4,840.98,0.979999999999999,0,840,0.101,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.101,"ug/mL",0,"2021-09-08 13:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-08-25 12:12:00",163,54.9,"kg","cm",0.44,840 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",4,841.63,1.63,0.5,840.5,17.4,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",17.4,"ug/mL",0,"2021-09-15 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-08 13:41:00",163,54.9,"kg","cm",0.48,840 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",5,1008.88,0.879999999999999,0,1008,1.53,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.53,"ug/mL",0,"2021-09-15 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-08 13:41:00",163,54.9,"kg","cm",0.5,1008 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",5,1009.6,1.6,0.5,1008.5,19.7,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",19.7,"ug/mL",0,"2021-09-22 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-15 13:13:00",163,54.9,"kg","cm",0.54,1008 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",6,1176.17,0.169999999999999,0,1176,2.95,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.95,"ug/mL",0,"2021-09-22 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-15 13:13:00",163,54.9,"kg","cm",0.52,1176 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",6,1177.58,1.58,0.5,1176.5,7.07,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",7.07,"ug/mL",0,"2021-09-29 13:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 14:06:00",163,54.9,"kg","cm",0.44,1176 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1343.77,-0.230000000000001,0,1344,4.05,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",4.05,"ug/mL",0,"2021-09-29 13:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 14:06:00",163,54.9,"kg","cm",0.48,1344 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1345.63,1.63,0.5,1344.5,16.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",16.5,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.47,1344 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",8,1512.88,0.879999999999999,0,1512,3.88,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",3.88,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.46,1512 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.03,1.53,0,1512.5,18.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",18.5,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.5,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1513.07,0.569999999999999,167.5,1680,3.13,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.13,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.52,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.1,1.6,168,1680.5,14.7,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",14.7,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",10,2016.35,0.349999999999999,0,2016,0.893,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.893,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,2016 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",11,2184.98,0.979999999999999,0,2184,2.05,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",2.05,"ug/mL",0,"2021-11-03 12:29:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 13:32:00",163,54.9,"kg","cm",0.58,2184 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",12,2349.92,-2.08,0,2352,2.83,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",2.83,"ug/mL",0,"2021-11-10 12:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:29:00",163,54.9,"kg","cm",0.51,2352 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",13,2520.38,0.379999999999999,0,2520,4.58,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",4.58,"ug/mL",0,"2021-11-17 12:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 12:05:00",163,54.9,"kg","cm",0.57,2520 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",14,2688.08,0.0799999999999994,0,2688,3.77,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",3.77,"ug/mL",0,"2021-11-24 12:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 12:14:00",163,54.9,"kg","cm",0.53,2688 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",15,2856.92,0.919999999999999,0,2856,4.87,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.63,"Hours","mg",0,"Analyte01","Cycle 6 Day 15",4.87,"ug/mL",0,"2021-12-01 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 12:34:00",163,54.9,"kg","cm",0.58,2856 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,-1.33,-1.33,0,0,0,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-09-13 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.51,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,1.63,1.63,0.5,0.5,9.93,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.93,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.48,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,5.58,5.58,4,4,8.99,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.99,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,9.33,9.33,8,8,8.75,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.75,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,25.75,25.75,48,48,6.66,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.66,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.42,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",1,74.83,74.83,144,144,2.98,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.98,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.5,0 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,167.9,-0.1,0,168,0.798,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.798,"ug/mL",0,"2021-09-20 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-13 12:40:00",168,102.6,"kg","cm",1.53,168 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,169.75,1.75,0.5,168.5,9.77,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",9.77,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.01,168 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,173.08,5.08,4,172,9.47,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",9.47,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.04,168 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,194.17,26.17,48,216,6.73,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",6.73,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.02,168 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",2,266.25,98.25,192,360,1.91,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.91,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",0.97,168 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,335.17,-0.83,0,336,0.597,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.597,"ug/mL",0,"2021-09-27 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-20 12:00:00",168,102.6,"kg","cm",1.04,336 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,337.75,1.75,0.5,336.5,9.66,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.66,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.85,336 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",3,357.5,21.5,48,384,6.64,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",6.64,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.87,336 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,503.75,-0.25,0,504,0.322,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.83,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.322,"ug/mL",0,"2021-10-04 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-27 13:40:00",168,102.6,"kg","cm",0.82,504 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,505.55,1.55,0.5,504.5,3.88,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",3.88,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.53,504 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",4,530.17,26.17,48,552,4.98,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",4.98,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.58,504 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,672.67,0.67,0,672,0.41,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.41,"ug/mL",0,"2021-10-11 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-04 11:20:00",168,102.6,"kg","cm",0.61,672 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,673.92,1.92,0.5,672.5,13.7,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",13.7,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.58,672 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,695.17,23.17,48,720,9.08,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.08,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.59,672 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",5,767.58,95.58,192,864,3.31,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.31,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.54,672 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",6,840.33,0.33,0,840,1.86,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",1.86,"ug/mL",0,"2021-10-18 11:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-11 14:00:00",168,102.6,"kg","cm",0.54,840 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",6,841.58,1.58,0.5,840.5,5.11,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",5.11,"ug/mL",0,"2021-10-25 11:17:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-18 11:45:00",168,102.6,"kg","cm",0.58,840 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",7,1007.72,-0.28,0,1008,0.856,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.856,"ug/mL",0,"2021-10-25 11:17:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-18 11:45:00",168,102.6,"kg","cm",0.63,1008 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",7,1009.55,1.55,0.5,1008.5,3.8,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",3.8,"ug/mL",0,"2021-11-02 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-25 11:17:00",168,102.6,"kg","cm",0.55,1008 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",8,1175.83,-0.17,0,1176,0.438,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.438,"ug/mL",0,"2021-11-02 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-25 11:17:00",168,102.6,"kg","cm",0.56,1176 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",8,1177.67,1.67,0.5,1176.5,2.87,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.87,"ug/mL",0,"2021-11-08 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-02 13:40:00",168,102.6,"kg","cm",0.47,1176 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",9,1344.25,0.25,0,1344,0.695,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.695,"ug/mL",0,"2021-11-08 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-02 13:40:00",168,102.6,"kg","cm",0.48,1344 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",9,1345.58,1.58,0.5,1344.5,3.61,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",3.61,"ug/mL",0,"2021-11-18 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-08 13:15:00",168,102.6,"kg","cm",0.54,1344 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",10,1511.75,-0.25,0,1512,0.271,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.271,"ug/mL",0,"2021-11-18 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-08 13:15:00",168,102.6,"kg","cm",0.54,1512 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",10,1513.53,1.53,0.5,1512.5,4.6,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",4.6,"ug/mL",0,"2021-11-29 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-18 11:50:00",168,102.6,"kg","cm",0.61,1512 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",11,1680.08,0.0800000000000001,0,1680,0.0917,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",0.0917,"ug/mL",0,"2021-11-29 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-18 11:50:00",168,102.6,"kg","cm",0.57,1680 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",11,1681.58,1.58,0.5,1680.5,4.52,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",4.52,"ug/mL",0,"2021-12-07 13:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 13:20:00",168,102.6,"kg","cm",0.58,1680 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",12,1848.67,0.67,0,1848,0.4,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.4,"ug/mL",0,"2021-12-07 13:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 13:20:00",168,102.6,"kg","cm",0.53,1848 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",12,1849.67,1.67,0.5,1848.5,6.72,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",6.72,"ug/mL",0,"2021-12-14 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-07 13:30:00",168,102.6,"kg","cm",0.59,1848 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",13,2016.42,0.42,0,2016,0.736,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.736,"ug/mL",0,"2021-12-14 11:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-07 13:30:00",168,102.6,"kg","cm",0.62,2016 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",13,2017.67,1.67,0.5,2016.5,6.56,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",6.56,"ug/mL",0,"2021-12-21 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-14 11:25:00",168,102.6,"kg","cm",0.66,2016 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",14,2184.25,0.25,0,2184,0.504,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",0.504,"ug/mL",0,"2021-12-21 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-14 11:25:00",168,102.6,"kg","cm",0.71,2184 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",14,2185.58,1.58,0.5,2184.5,5.7,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",5.7,"ug/mL",0,"2021-12-28 11:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-21 14:50:00",168,102.6,"kg","cm",0.7,2184 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",15,2352.33,0.33,0,2352,0.803,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.67,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",0.803,"ug/mL",0,"2021-12-28 11:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-21 14:50:00",168,102.6,"kg","cm",0.65,2352 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",15,2353.55,1.55,0.5,2352.5,5.28,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",5.28,"ug/mL",0,"2022-01-24 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-28 11:15:00",168,102.6,"kg","cm",0.6,2352 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",16,2522.03,1.53,0,2520.5,3.88,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.63,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",3.88,"ug/mL",0,"2021-09-13 19:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-24 12:58:00",168,102.6,"kg","cm",0.6,2520.5 +"XX01",11103,"Analyte01","SERUM","EVERY WEEK",16,3433.78,913.28,NA,NA,0,"Analyte01","ug/mL","intravascular",35,41,"M","WHITE",0.63,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2021-09-13 19:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-24 12:58:00",168,102.6,"kg","cm",0.72,2520.5 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-09-22 10:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,5.24,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.24,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.47,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,15.2,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.2,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.52,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,9.5,9.5,8,8,15.4,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.4,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,27,27,48,48,10.3,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10.3,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.46,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",1,76.67,76.67,144,144,6.44,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.44,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,0 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,168.42,0.42,0,168,1.84,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.84,"ug/mL",0,"2021-09-29 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 10:45:00",161,48.8,"kg","cm",1.48,168 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,12.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12.8,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.94,168 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,18,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",18,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.98,168 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,191.83,23.83,48,216,12.6,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",12.6,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",1.06,168 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",2,263.5,95.5,192,360,5.76,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",5.76,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.99,168 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,336.92,0.92,0,336,2.15,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",2.15,"ug/mL",0,"2021-10-06 16:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 15:30:00",161,48.8,"kg","cm",0.95,336 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,12.2,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",12.2,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.49,336 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",3,359.5,23.5,48,384,9.69,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",9.69,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.54,336 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,504.83,0.83,0,504,2.45,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",2.45,"ug/mL",0,"2021-10-13 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 16:30:00",161,48.8,"kg","cm",0.47,504 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,15.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",15.8,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.5,504 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",4,529.5,25.5,48,552,8.88,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",8.88,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.55,504 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,672.83,0.83,0,672,2.33,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",2.33,"ug/mL",0,"2021-10-20 15:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:55:00",161,48.8,"kg","cm",0.47,672 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,12.4,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",12.4,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.49,672 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,695.5,23.5,48,720,11.1,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",11.1,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.57,672 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",5,766.33,94.33,192,864,4.66,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",4.66,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.55,672 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",6,840.83,0.83,0,840,2.27,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",2.27,"ug/mL",0,"2021-10-27 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-20 15:10:00",161,48.8,"kg","cm",0.42,840 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,15.3,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",15.3,"ug/mL",0,"2021-11-03 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 14:00:00",161,48.8,"kg","cm",0.59,840 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",7,1008.75,0.75,0,1008,2.35,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",2.35,"ug/mL",0,"2021-11-03 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 14:00:00",161,48.8,"kg","cm",0.51,1008 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,12.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.8,"ug/mL",0,"2021-11-10 14:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:35:00",161,48.8,"kg","cm",0.47,1008 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",8,1176.83,0.83,0,1176,2.59,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.59,"ug/mL",0,"2021-11-10 14:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:35:00",161,48.8,"kg","cm",0.54,1176 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",8,1177.5,1.5,0.5,1176.5,13.2,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.2,"ug/mL",0,"2021-11-17 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 14:20:00",161,48.8,"kg","cm",0.54,1176 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",9,1344.92,0.92,0,1344,2.31,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",2.31,"ug/mL",0,"2021-11-17 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-10 14:20:00",161,48.8,"kg","cm",0.51,1344 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",9,1345.5,1.5,0.5,1344.5,13.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",13.8,"ug/mL",0,"2021-11-24 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 14:35:00",161,48.8,"kg","cm",0.53,1344 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",10,1512.92,0.92,0,1512,1.51,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",1.51,"ug/mL",0,"2021-11-24 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-17 14:35:00",161,48.8,"kg","cm",0.52,1512 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",10,1513.5,1.5,0.5,1512.5,12.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",12.8,"ug/mL",0,"2021-12-01 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 15:15:00",161,48.8,"kg","cm",0.48,1512 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",11,1680.75,0.75,0,1680,1.85,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.85,"ug/mL",0,"2021-12-01 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-24 15:15:00",161,48.8,"kg","cm",0.49,1680 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",11,1681.5,1.5,0.5,1680.5,16,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",16,"ug/mL",0,"2021-12-09 16:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-01 14:50:00",161,48.8,"kg","cm",0.49,1680 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",12,1848.92,0.92,0,1848,0.649,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",0.649,"ug/mL",0,"2021-12-09 16:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-01 14:50:00",161,48.8,"kg","cm",0.47,1848 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",12,1849.58,1.58,0.5,1848.5,12.4,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",12.4,"ug/mL",0,"2021-12-15 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-09 16:20:00",161,48.8,"kg","cm",0.51,1848 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",13,2016.92,0.92,0,2016,1.5,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",1.5,"ug/mL",0,"2021-12-15 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-09 16:20:00",161,48.8,"kg","cm",0.44,2016 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",13,2017.5,1.5,0.5,2016.5,9.73,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",9.73,"ug/mL",0,"2021-12-22 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-15 14:40:00",161,48.8,"kg","cm",0.47,2016 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",14,2184.92,0.92,0,2184,0.902,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",0.902,"ug/mL",0,"2021-12-22 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-15 14:40:00",161,48.8,"kg","cm",0.56,2184 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",14,2185.5,1.5,0.5,2184.5,13.8,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",13.8,"ug/mL",0,"2021-12-29 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-22 14:30:00",161,48.8,"kg","cm",0.49,2184 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",15,2352.83,0.83,0,2352,0.858,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",0.858,"ug/mL",0,"2021-12-29 14:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-22 14:30:00",161,48.8,"kg","cm",0.49,2352 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",15,2353.5,1.5,0.5,2352.5,13.6,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",13.6,"ug/mL",0,"2022-01-25 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-12-29 14:30:00",161,48.8,"kg","cm",0.49,2352 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",16,2522,1.5,0,2520.5,14.3,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 1",14.3,"ug/mL",0,"2022-02-01 15:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-25 13:50:00",161,48.8,"kg","cm",0.49,2520.5 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",17,2688.92,0.92,0,2688,1.05,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",1.05,"ug/mL",0,"2022-02-01 15:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-25 13:50:00",161,48.8,"kg","cm",0.44,2688 +"XX01",11104,"Analyte01","SERUM","EVERY WEEK",17,2689.5,1.5,0.5,2688.5,18.4,"Analyte01","ug/mL","intravascular",35,57,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",18.4,"ug/mL",0,"2021-09-22 16:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-01 15:20:00",161,48.8,"kg","cm",0.5,2688 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,-0.0316666666666707,-0.0316666666666707,0,0,0,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2021-11-29 12:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.06,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,2.96833333333333,2.96833333333333,0.5,0.5,12.2,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.2,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,5.54833333333333,5.54833333333333,4,4,10.8,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.8,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.06,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,9.21833333333333,9.21833333333333,8,8,10.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.5,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",1.96,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,28.4683333333333,28.4683333333333,48,48,7.16,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.16,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.01,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,73.6383333333333,73.6383333333333,144,144,3.67,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.67,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2.03,0 +"XX01",11105,"Analyte01","SERUM","EVERY WEEK",1,1369.46833333333,1369.46833333333,NA,NA,0,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",2.02,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2021-11-29 19:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-29 12:48:00",163,67.7,"kg","cm",2,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,-0.3,-0.3,0,0,0,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-01-03 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,1.55,1.55,0.5,0.5,12.7,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.7,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.56,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,5.98,5.98,4,4,8.66,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.66,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,7.78,7.78,8,8,11,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.54,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,26.35,26.35,48,48,6.36,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.36,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.49,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",1,73.13,73.13,144,144,3.01,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.01,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.47,0 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,166.83,-1.17,0,168,1.02,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.02,"ug/mL",0,"2022-01-10 13:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-03 11:54:00",188,90,"kg","cm",1.42,168 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,170.03,2.03,0.5,168.5,14.5,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.5,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.18,168 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,172.7,4.7,4,172,13.7,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13.7,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.24,168 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,193.58,25.58,48,216,9.84,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.84,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.19,168 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",2,264.45,96.45,192,360,1.43,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.43,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.22,168 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,503.18,-0.82,0,504,0.0011,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",2.23,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0011,"ug/mL",0,"2022-01-31 13:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-10 13:51:00",188,90,"kg","cm",2.23,504 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,505.53,1.53,0.5,504.5,12.1,"Analyte01","ug/mL","intravascular",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",12.1,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.61,504 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",3,531,27,48,552,6.3,"Analyte01","ug/mL","intravascular",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",6.3,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.63,504 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,671.13,-0.87,0,672,0.91,"Analyte01","ug/mL","intravascular",2.15,45,"M","WHITE",1.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.91,"ug/mL",0,"2022-02-07 13:02:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-01-31 13:42:00",188,90,"kg","cm",1.56,672 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,673.62,1.62,0.5,672.5,11.5,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",11.5,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.09,672 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,698.53,26.53,48,720,9.39,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.39,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.09,672 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",4,768.47,96.47,192,864,3.32,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.32,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.06,672 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",5,840.18,0.18,0,840,0.721,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.721,"ug/mL",0,"2022-02-14 12:39:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 13:02:00",188,90,"kg","cm",1.15,840 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",6,1006.73,-1.27,0,1008,0.0118,"Analyte01","ug/mL","intravascular",1.17,45,"M","WHITE",0.07,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0118,"ug/mL",0,"2022-02-21 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 12:39:00",188,90,"kg","cm",0.12,1008 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",6,1009.57,1.57,0.5,1008.5,12.1,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.1,"ug/mL",0,"2022-02-28 16:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 12:56:00",188,90,"kg","cm",1.12,1008 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",7,1175.27,-0.73,0,1176,0.908,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.908,"ug/mL",0,"2022-02-28 16:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 12:56:00",188,90,"kg","cm",1.14,1176 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",7,1177.73,1.73,0.5,1176.5,13.1,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.13,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.1,"ug/mL",0,"2022-03-07 14:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 16:03:00",188,90,"kg","cm",1.12,1176 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",8,1343.68,-0.32,0,1344,1.61,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.13,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",1.61,"ug/mL",0,"2022-03-07 14:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 16:03:00",188,90,"kg","cm",1.13,1344 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",8,1345.53,1.53,0.5,1344.5,11.5,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",11.5,"ug/mL",0,"2022-03-14 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 14:10:00",188,90,"kg","cm",1.17,1344 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",9,1511.87,-0.13,0,1512,1.46,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",1.46,"ug/mL",0,"2022-03-14 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 14:10:00",188,90,"kg","cm",1.17,1512 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",9,1513.55,1.55,0.5,1512.5,14.1,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",14.1,"ug/mL",0,"2022-03-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 14:07:00",188,90,"kg","cm",1.23,1512 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1679.33,-0.67,0,1680,1.56,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.56,"ug/mL",0,"2022-03-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 14:07:00",188,90,"kg","cm",1.2,1680 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1681.58,1.58,0.5,1680.5,11.6,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",11.6,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1.02,1680 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,1848.45,0.45,0,1848,1.3,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",1.3,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4700.02,2852.02,840,2688,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4865.52,3017.52,1008,2856,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5034.27,3186.27,1176,3024,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3023.78,1175.78,1176.5,3024.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5201.43,3353.43,1344,3192,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.09,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5368.93,3520.93,1512,3360,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5564.37,3716.37,1680,3528,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3555.45,1707.45,1680.5,3528.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5708.23,3860.23,1848,3696,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5877.57,4029.57,2016,3864,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6042.87,4194.87,2184,4032,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4032.28,2184.28,2184.5,4032.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6208.95,4360.95,NA,NA,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 0",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6233.22,4385.22,NA,NA,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6379.88,4531.88,2520,4368,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.04,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6547.18,4699.18,2688,4536,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4536.82,2688.82,2688.5,4536.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6717.65,4869.65,2856,4704,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6884.13,5036.13,3024,4872,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7049.43,5201.43,3192,5040,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5038.93,3190.93,3192.5,5040.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7221.4,5373.4,3360,5208,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.04,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7389.1,5541.1,3528,5376,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 11 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,7553.55,5705.55,3696,5544,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 12 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,-3.818,-3.818,0,0,0,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-03-01 13:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.68,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,1.802,1.802,0.5,0.5,22.1,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",22.1,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.63,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,5.632,5.632,4,4,12.5,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.5,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.64,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,8.012,8.012,8,8,11.2,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.2,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.66,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,26.182,26.182,48,48,7.83,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.83,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.66,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",1,73.682,73.682,144,144,4.48,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.48,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.67,0 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,168.462,0.462000000000002,0,168,1,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.63,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1,"ug/mL",0,"2022-03-08 12:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-01 13:27:00",165,83.8,"kg","cm",1.67,168 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,169.802,1.802,0.5,168.5,18.2,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",18.2,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1,168 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,172.632,4.632,4,172,14.7,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.7,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1.07,168 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,192.302,24.302,48,216,9.06,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",9.06,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",0.99,168 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",2,242.052,74.052,192,360,4.24,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",4.24,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",0.97,168 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,504.702,0.702000000000002,0,504,0.0058,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",1.03,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0058,"ug/mL",0,"2022-03-22 11:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-08 12:40:00",165,83.8,"kg","cm",1.03,504 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,505.862,1.862,0.5,504.5,23,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",23,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.56,504 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",3,531.452,27.452,48,552,7.62,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.62,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.54,504 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,672.612,0.612000000000002,0,672,0.6,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.6,"ug/mL",0,"2022-03-29 12:01:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-22 11:26:00",165,83.8,"kg","cm",0.54,672 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,673.752,1.752,0.5,672.5,22.8,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",22.8,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.57,672 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,697.112,25.112,48,720,7.43,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",7.43,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.58,672 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",4,746.952,74.952,192,864,3.33,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",3.33,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.62,672 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",5,840.752,0.752000000000002,0,840,0.484,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.484,"ug/mL",0,"2022-04-05 12:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-29 12:01:00",165,83.8,"kg","cm",0.59,840 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",5,841.832,1.832,0.5,840.5,16.3,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",16.3,"ug/mL",0,"2022-04-12 12:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-05 12:58:00",165,83.8,"kg","cm",0.61,840 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",6,1007.782,-0.217999999999998,0,1008,1.03,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.03,"ug/mL",0,"2022-04-12 12:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-05 12:58:00",165,83.8,"kg","cm",0.58,1008 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",6,1009.662,1.662,0.5,1008.5,11.8,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",11.8,"ug/mL",0,"2022-04-19 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-12 12:16:00",165,83.8,"kg","cm",0.52,1008 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",7,1173.712,-2.288,0,1176,0.601,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.601,"ug/mL",0,"2022-04-19 13:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-12 12:16:00",165,83.8,"kg","cm",0.5,1176 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",7,1177.882,1.882,0.5,1176.5,17.6,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",17.6,"ug/mL",0,"2022-04-26 12:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-19 13:15:00",165,83.8,"kg","cm",0.57,1176 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",8,1344.932,0.932000000000002,0,1344,0.683,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.683,"ug/mL",0,"2022-04-26 12:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-19 13:15:00",165,83.8,"kg","cm",0.59,1344 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",8,1345.682,1.682,0.5,1344.5,27,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",27,"ug/mL",0,"2022-05-03 12:19:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-26 12:07:00",165,83.8,"kg","cm",0.58,1344 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1512.982,0.982000000000002,0,1512,0.394,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",0.394,"ug/mL",0,"2022-05-03 12:19:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-26 12:07:00",165,83.8,"kg","cm",0.56,1512 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1513.812,1.812,0.5,1512.5,19.8,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",19.8,"ug/mL",0,"2022-03-01 19:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-03 12:19:00",165,83.8,"kg","cm",0.56,1512 +"XX01",11107,"Analyte01","SERUM","EVERY WEEK",9,1655.312,143.312,NA,NA,0.589,"Analyte01","ug/mL","intravascular",35,48,"F","WHITE",0.55,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.589,"ug/mL",0,"2022-03-01 19:42:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-03 12:19:00",165,83.8,"kg","cm",0.54,1512 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,-0.3,-0.3,0,0,0,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-02-07 15:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.78,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,1.85,1.85,0.5,0.5,9.92,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.92,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.79,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,5.6,5.6,4,4,8.32,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.32,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.78,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,9.8,9.8,8,8,6.69,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.69,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.76,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,25.37,25.37,48,48,5.86,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",5.86,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.79,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",1,72.58,72.58,144,144,2.58,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.58,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.76,0 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,166.45,-1.55,0,168,0.489,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.75,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.489,"ug/mL",0,"2022-02-14 16:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-07 15:50:00",168,60.7,"kg","cm",1.71,168 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,169.87,1.87,0.5,168.5,7.49,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.49,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.07,168 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,172.75,4.75,4,172,7.56,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.56,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.07,168 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,191.67,23.67,48,216,6.1,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",6.1,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.06,168 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",2,261.82,93.82,192,360,1.97,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.97,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.04,168 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,336.83,0.83,0,336,0.534,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.08,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.534,"ug/mL",0,"2022-02-21 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-14 16:05:00",168,60.7,"kg","cm",1.12,336 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,337.83,1.83,0.5,336.5,9.51,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.51,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.64,336 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,362,26,48,384,6.14,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",6.14,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.69,336 +"XX01",11108,"Analyte01","SERUM","EVERY WEEK",3,527.92,191.92,NA,NA,0.491,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.491,"ug/mL",0,"2022-02-07 21:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-21 13:25:00",168,60.7,"kg","cm",0.67,336 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,-0.838000000000001,-0.838000000000001,0,0,0,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-02-28 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.48,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,1.602,1.602,0.5,0.5,7.58,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.58,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,5.512,5.512,4,4,5.76,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.76,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.54,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,9.782,9.782,8,8,4.45,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",4.45,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,24.652,24.652,48,48,2.61,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",2.61,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.59,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",1,74.752,74.752,144,144,0.703,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",0.703,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.55,0 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,167.962,-0.0380000000000005,0,168,0.024,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.024,"ug/mL",0,"2022-03-07 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-02-28 12:35:00",172,100.3,"kg","cm",1.52,168 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,169.612,1.612,0.5,168.5,7.83,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",7.83,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.12,168 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,172.582,4.582,4,172,6.47,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",6.47,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.19,168 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,193.582,25.582,48,216,3.47,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",3.47,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.11,168 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",2,265.512,97.512,192,360,0.102,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",0.102,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.14,168 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,336.202,0.202,0,336,0.0105,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0105,"ug/mL",0,"2022-03-14 11:52:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-07 11:35:00",172,100.3,"kg","cm",1.18,336 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,337.532,1.532,0.5,336.5,9.79,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.79,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.65,336 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",3,361.712,25.712,48,384,3.89,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",3.89,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.62,336 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,504.332,0.332,0,504,0.0111,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0111,"ug/mL",0,"2022-03-21 11:27:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 11:52:00",172,100.3,"kg","cm",0.67,504 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,505.582,1.582,0.5,504.5,7.5,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.5,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.49,504 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",4,529.062,25.062,48,552,2.2,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",2.2,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.47,504 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,672.102,0.102,0,672,0.0268,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.0268,"ug/mL",0,"2022-03-28 12:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 11:27:00",172,100.3,"kg","cm",0.5,672 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,673.682,1.682,0.5,672.5,8.87,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",8.87,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.54,672 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,699.452,27.452,48,720,3.57,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",3.57,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.6,672 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",5,768.332,96.332,192,864,0.325,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.325,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.64,672 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",6,838.562,-1.438,0,840,0.0378,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.0378,"ug/mL",0,"2022-04-04 14:03:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 12:06:00",172,100.3,"kg","cm",0.6,840 +"XX01",11109,"Analyte01","SERUM","EVERY WEEK",6,841.652,1.652,0.5,840.5,7.19,"Analyte01","ug/mL","intravascular",35,61,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",7.19,"ug/mL",0,"2022-02-28 18:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-04-04 14:03:00",172,100.3,"kg","cm",0.6,840 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,-0.845999999999999,-0.845999999999999,0,0,0,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-29 15:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.54,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,1.604,1.604,0.5,0.5,8.83,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.83,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.49,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,3.714,3.714,4,4,7.15,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.15,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.49,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,7.664,7.664,8,8,5.41,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.41,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.5,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,25.784,25.784,48,48,4.75,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",4.75,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.52,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",1,70.204,70.204,144,144,1.74,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",1.74,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.53,0 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,167.904,-0.0959999999999994,0,168,0.201,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.201,"ug/mL",0,"2022-07-06 11:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 15:06:00",170,70,"kg","cm",1.54,168 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,169.704,1.704,0.5,168.5,10.1,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.1,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.26,168 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,173.564,5.564,4,172,5.8,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",5.8,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.18,168 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,192.314,24.314,48,216,4.64,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",4.64,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.19,168 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",2,265.934,97.934,192,360,1.09,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",1.09,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.25,168 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,336.914,0.914,0,336,0.137,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.2,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.137,"ug/mL",0,"2022-07-13 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 11:18:00",170,70,"kg","cm",1.2,336 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,337.634,1.634,0.5,336.5,11.3,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",11.3,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.52,336 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",3,360.984,24.984,48,384,7.15,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",7.15,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.47,336 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,504.914,0.914,0,504,0.181,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.181,"ug/mL",0,"2022-07-20 10:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 11:20:00",170,70,"kg","cm",0.51,504 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,505.554,1.554,0.5,504.5,7.99,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",7.99,"ug/mL",0,"2022-07-27 11:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:35:00",170,70,"kg","cm",0.52,504 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",4,528.784,24.784,48,552,4.86,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",4.86,"ug/mL",0,"2022-07-27 11:16:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:35:00",170,70,"kg","cm",0.48,504 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,674.214,1.714,0,672.5,7.01,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",7.01,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.56,672.5 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,697.354,24.854,47.5,720,4.7,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",4.7,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.58,672.5 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",5,770.104,97.604,191.5,864,1.37,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",1.37,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.51,672.5 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",6,840.814,0.814000000000001,0,840,0.329,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.329,"ug/mL",0,"2022-08-03 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 11:16:00",170,70,"kg","cm",0.64,840 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",6,841.664,1.664,0.5,840.5,9.53,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",9.53,"ug/mL",0,"2022-08-10 10:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 12:47:00",170,70,"kg","cm",0.5,840 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",7,1008.784,0.784,0,1008,0.524,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.524,"ug/mL",0,"2022-08-10 10:26:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 12:47:00",170,70,"kg","cm",0.6,1008 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",7,1009.754,1.754,0.5,1008.5,8.98,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",8.98,"ug/mL",0,"2022-08-17 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 10:26:00",170,70,"kg","cm",0.59,1008 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",8,1176.454,0.454,0,1176,0.413,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.6,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.413,"ug/mL",0,"2022-08-17 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 10:26:00",170,70,"kg","cm",0.6,1176 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",8,1177.564,1.564,0.5,1176.5,8.81,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",8.81,"ug/mL",0,"2022-08-24 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 11:05:00",170,70,"kg","cm",0.57,1176 +"XX01",11110,"Analyte01","SERUM","EVERY WEEK",9,1344.234,0.234,0,1344,0.311,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.55,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.311,"ug/mL",0,"2022-08-24 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 11:05:00",170,70,"kg","cm",0.52,1344 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-29 11:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.49,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,15.1,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",15.1,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.48,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,14.7,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.7,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.5,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,8.17,8.17,8,8,14.2,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.2,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.53,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,26.17,26.17,48,48,8.46,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.46,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.5,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",1,72.5,72.5,144,144,4.58,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.58,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.49,0 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,168.25,0.25,0,168,0.737,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.737,"ug/mL",0,"2022-07-06 13:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-29 11:10:00",162,66.9,"kg","cm",1.53,168 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,17,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",17,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.96,168 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,173.5,5.5,4,172,13.4,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13.4,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",1.04,168 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,192.83,24.83,48,216,12.5,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",12.5,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.99,168 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",2,264.17,96.17,192,360,2.73,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.73,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.97,168 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,336.33,0.33,0,336,0.545,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.545,"ug/mL",0,"2022-07-13 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-06 13:20:00",162,66.9,"kg","cm",0.99,336 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,13.6,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",13.6,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.49,336 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",3,359.58,23.58,48,384,10.8,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",10.8,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.45,336 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,504.25,0.25,0,504,0.647,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.647,"ug/mL",0,"2022-07-20 10:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-13 12:35:00",162,66.9,"kg","cm",0.46,504 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,16.6,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",16.6,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.47,504 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",4,531.08,27.08,48,552,9.8,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9.8,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.54,504 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,672.75,0.75,0,672,1.11,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.11,"ug/mL",0,"2022-07-27 14:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-20 10:25:00",162,66.9,"kg","cm",0.54,672 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,11.7,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",11.7,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.51,672 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",5,695.67,23.67,48,720,7.57,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",7.57,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.49,672 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",6,840.92,0.92,0,840,1.18,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",1.18,"ug/mL",0,"2022-08-03 15:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-27 14:35:00",162,66.9,"kg","cm",0.53,840 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,12.4,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",12.4,"ug/mL",0,"2022-08-10 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 15:55:00",162,66.9,"kg","cm",0.55,840 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",7,1008.83,0.83,0,1008,1.18,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",1.18,"ug/mL",0,"2022-08-10 13:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-03 15:55:00",162,66.9,"kg","cm",0.54,1008 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,13.1,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",13.1,"ug/mL",0,"2022-08-17 16:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 13:25:00",162,66.9,"kg","cm",0.48,1008 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",8,1176.92,0.92,0,1176,13.7,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.7,"ug/mL",0,"2022-08-17 16:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-10 13:25:00",162,66.9,"kg","cm",0.51,1176 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",8,1177.5,1.5,0.5,1176.5,1.18,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",1.18,"ug/mL",0,"2022-08-24 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:45:00",162,66.9,"kg","cm",0.44,1176 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",9,1344.92,0.92,0,1344,1.15,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",1.15,"ug/mL",0,"2022-08-24 15:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-17 16:45:00",162,66.9,"kg","cm",0.46,1344 +"XX01",11111,"Analyte01","SERUM","EVERY WEEK",9,1345.58,1.58,0.5,1344.5,10.3,"Analyte01","ug/mL","intravascular",35,67,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",10.3,"ug/mL",0,"2022-08-31 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-24 15:30:00",162,66.9,"kg","cm",0.45,1344 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,-0.32,-0.32,0,0,0,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-26 12:37:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.47,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,1.55,1.55,0.5,0.5,11.8,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.8,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.54,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,5.48,5.48,4,4,10.1,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.1,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.5,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,10.22,10.22,8,8,10.8,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.8,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.46,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,26.53,26.53,48,48,7.79,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",7.79,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.45,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",1,68.65,68.65,144,144,2.73,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.73,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.5,0 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,166.77,-1.23,0,168,0.275,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.275,"ug/mL",0,"2022-08-02 13:14:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 12:37:00",177,92.2,"kg","cm",1.48,168 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,169.67,1.67,0.5,168.5,13,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",13,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.47,168 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,172.72,4.72,4,172,10.5,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.5,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.41,168 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,191.67,23.67,48,216,8.15,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",8.15,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.43,168 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",2,237.08,69.08,192,360,2.09,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.09,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.49,168 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",3,334.73,-1.27,0,336,0.0441,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0441,"ug/mL",0,"2022-08-09 11:54:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 13:14:00",177,92.2,"kg","cm",1.43,336 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",3,337.72,1.72,0.5,336.5,9.21,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",9.21,"ug/mL",0,"2022-08-16 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 11:54:00",177,92.2,"kg","cm",1.45,336 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",4,504.3,0.3,0,504,0.108,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1.48,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.108,"ug/mL",0,"2022-08-16 11:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 11:54:00",177,92.2,"kg","cm",1.5,504 +"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",4,505.53,1.53,0.5,504.5,9.45,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",9.45,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",0.97,504 +"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",4,533.58,29.58,48,552,5.78,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",5.78,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",1.03,504 +"XX01",11112,"Analyte01","SERUM","EVERY 3 WEEKS",5,670.22,-1.78,0,672,0.36,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.36,"ug/mL",0,"2022-08-23 11:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 11:28:00",177,92.2,"kg","cm",0.98,672 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,673.65,1.65,0.5,672.5,9.29,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",9.29,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.77,672 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,696.38,24.38,48,720,6.26,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",6.26,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.81,672 +"XX01",11112,"Analyte01","SERUM","EVERY WEEK",5,742.03,70.03,192,864,2.88,"Analyte01","ug/mL","intravascular",35,42,"M","WHITE",0.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",2.88,"ug/mL",0,"2022-08-30 12:51:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:13:00",177,92.2,"kg","cm",0.67,672 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,-0.25,-0.25,0,0,0,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-05 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.47,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,1.5,1.5,0.5,0.5,13.8,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.8,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.51,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,5.5,5.5,4,4,12.8,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.8,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.52,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,10,10,8,8,11.3,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.3,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.47,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,24.25,24.25,48,48,8.12,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.12,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.46,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",1,73.08,73.08,144,144,4.22,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.22,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.51,0 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,168.33,0.33,0,168,0.735,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.735,"ug/mL",0,"2022-05-12 13:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-05 11:30:00",185,83,"kg","cm",1.48,168 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,10.7,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",10.7,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.02,168 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,192.83,24.83,48,216,8.7,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",8.7,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.04,168 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",2,263.67,95.67,192,360,2.52,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",2.52,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",1.01,168 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,504.83,0.83,0,504,0.002,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.002,"ug/mL",0,"2022-05-26 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-12 13:10:00",185,83,"kg","cm",0.96,504 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,505.5,1.5,0.5,504.5,11.8,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",11.8,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.52,504 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",3,531.08,27.08,48,552,7.95,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.95,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.51,504 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,672.75,0.75,0,672,0.793,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.793,"ug/mL",0,"2022-06-02 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-26 12:50:00",185,83,"kg","cm",0.51,672 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,673.5,1.5,0.5,672.5,15.5,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",15.5,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.55,672 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,694.33,22.33,48,720,9.43,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",9.43,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.51,672 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",4,772.75,100.75,192,864,2.7,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",2.7,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.48,672 +"XX01",11201,"Analyte01","SERUM","EVERY WEEK",5,840.67,0.67,0,840,0.898,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",0.898,"ug/mL",0,"2022-06-09 14:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 14:00:00",185,83,"kg","cm",0.5,840 +"XX01",11201,"Analyte01","SERUM","EVERY 3 WEEKS",5,841.5,1.5,0.5,840.5,15.2,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",15.2,"ug/mL",0,"2022-05-05 17:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:50:00",185,83,"kg","cm",0.56,840 +"XX01",11201,"Analyte01","SERUM","EVERY 3 WEEKS",5,1200,360,NA,NA,0.0097,"Analyte01","ug/mL","intravascular",50,56,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0.0097,"ug/mL",0,"2022-05-05 17:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:50:00",185,83,"kg","cm",0.47,840 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,-1.66333333333334,-1.66333333333334,0,0,0,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-31 13:36:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.49,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.71666666666666,1.71666666666666,0.5,0.5,9.38,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.38,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.46,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.44666666666666,5.44666666666666,4,4,8.99,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.99,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.46,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.14666666666666,9.14666666666666,8,8,8.04,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",8.04,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.54,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,24.0466666666667,24.0466666666667,48,48,6.04,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.04,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.51,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,78.3666666666667,78.3666666666667,144,144,2.11,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",2.11,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,167.686666666667,167.686666666667,336,336,0.188,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.188,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,194.086666666667,194.086666666667,216,216,0.0788,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",0.0788,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.44,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,263.586666666667,263.586666666667,360,360,0.011,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",0.011,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",1,335.946666666667,335.946666666667,672,672,0.003,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.003,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,0 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,502.386666666667,-1.61333333333334,0,504,0,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.47,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0,"ug/mL",0,"2022-06-21 13:49:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:36:00",185,78.9,"kg","cm",1.47,504 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.816666666667,1.81666666666666,0.5,504.5,8.42,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",8.42,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.56,504 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,670.496666666667,166.496666666667,336,840,0.154,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",0.154,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.55,504 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,693.216666666667,189.216666666667,384,888,0.0795,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",0.0795,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.62,504 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",2,741.596666666667,237.596666666667,528,1032,0.0231,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.0231,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.62,504 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1007.41666666667,-0.583333333333337,0,1008,0,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0,"ug/mL",0,"2022-07-12 12:56:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:49:00",185,78.9,"kg","cm",1.59,1008 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.53666666667,1.53666666666666,0.5,1008.5,9.17,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",9.17,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",0.97,1008 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1174.96666666667,166.966666666667,336,1344,0.126,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",0.126,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",0.98,1008 +"XX01",11202,"Analyte01","SERUM","EVERY 3 WEEKS",3,1341.78666666667,333.786666666667,672,1680,0.0031,"Analyte01","ug/mL","intravascular",35,65,"M","WHITE",0.98,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.0031,"ug/mL",0,"2022-05-31 19:28:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:56:00",185,78.9,"kg","cm",1.03,1008 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,-1.086,-1.086,0,0,0,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-02 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.6,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,1.664,1.664,0.5,0.5,12.6,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.6,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.57,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,6.084,6.084,4,4,14,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.59,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,8.754,8.754,8,8,14.5,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.5,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.54,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,25.914,25.914,48,48,10.4,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10.4,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.57,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",1,71.584,71.584,144,144,6.46,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.46,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.63,0 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,167.834,-0.166,0,168,2,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",2,"ug/mL",0,"2022-06-09 14:45:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-02 12:30:00",174,75.5,"kg","cm",1.64,168 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,169.584,1.584,0.5,168.5,21.4,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",21.4,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.31,168 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,172.464,4.464,4,172,24.1,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",24.1,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.23,168 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,191.504,23.504,48,216,16.6,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",16.6,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.26,168 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",2,263.334,95.334,192,360,7.68,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",7.68,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.28,168 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",3,336.914,0.914,0,336,3.16,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",1.25,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",3.16,"ug/mL",0,"2022-06-16 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 14:45:00",174,75.5,"kg","cm",1.22,336 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",3,337.614,1.614,0.5,336.5,16.2,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",16.2,"ug/mL",0,"2022-06-23 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:30:00",174,75.5,"kg","cm",0.6,336 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,504.584,0.584,0,504,3.28,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",3.28,"ug/mL",0,"2022-06-23 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:30:00",174,75.5,"kg","cm",0.63,504 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,505.704,1.704,0.5,504.5,23.3,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",23.3,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.48,504 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",4,531.164,27.164,48,552,23.2,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",23.2,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.49,504 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,672.004,0.00400000000000023,0,672,3.23,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",3.23,"ug/mL",0,"2022-06-30 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-23 11:20:00",174,75.5,"kg","cm",0.53,672 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,673.664,1.664,0.5,672.5,16,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",16,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.47,672 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",5,695.584,23.584,48,720,12,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",12,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.56,672 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",6,840.584,0.584,0,840,3.06,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",3.06,"ug/mL",0,"2022-07-07 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 11:50:00",174,75.5,"kg","cm",0.53,840 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",6,841.664,1.664,0.5,840.5,14.8,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",14.8,"ug/mL",0,"2022-07-14 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 12:00:00",174,75.5,"kg","cm",0.62,840 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",7,1008.254,0.254,0,1008,3.79,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",3.79,"ug/mL",0,"2022-07-14 11:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 12:00:00",174,75.5,"kg","cm",0.61,1008 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",7,1009.664,1.664,0.5,1008.5,26.1,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",26.1,"ug/mL",0,"2022-07-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 11:30:00",174,75.5,"kg","cm",0.52,1008 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",8,1176.164,0.164,0,1176,3.28,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",3.28,"ug/mL",0,"2022-07-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 11:30:00",174,75.5,"kg","cm",0.48,1176 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",8,1177.634,1.634,0.5,1176.5,13.9,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",13.9,"ug/mL",0,"2022-07-28 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-21 13:40:00",174,75.5,"kg","cm",0.55,1176 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",9,1343.004,-0.996,0,1344,4.09,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",4.09,"ug/mL",0,"2022-07-28 14:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-21 13:40:00",174,75.5,"kg","cm",0.46,1344 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",9,1345.664,1.664,0.5,1344.5,24,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",24,"ug/mL",0,"2022-08-04 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 14:00:00",174,75.5,"kg","cm",0.54,1344 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",10,1512.004,0.00400000000000023,0,1512,4.02,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",4.02,"ug/mL",0,"2022-08-04 11:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 14:00:00",174,75.5,"kg","cm",0.53,1512 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",10,1513.714,1.714,0.5,1512.5,23.4,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",23.4,"ug/mL",0,"2022-08-11 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:50:00",174,75.5,"kg","cm",0.54,1512 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",11,1679.754,-0.246,0,1680,3.39,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.39,"ug/mL",0,"2022-08-11 12:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:50:00",174,75.5,"kg","cm",0.45,1680 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",11,1681.664,1.664,0.5,1680.5,17.9,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",17.9,"ug/mL",0,"2022-08-18 11:09:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-11 12:35:00",174,75.5,"kg","cm",0.61,1680 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",12,1848.104,0.104,0,1848,3.74,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",3.74,"ug/mL",0,"2022-08-18 11:09:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-11 12:35:00",174,75.5,"kg","cm",0.57,1848 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",12,1849.634,1.634,0.5,1848.5,12.8,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",12.8,"ug/mL",0,"2022-08-25 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-18 11:09:00",174,75.5,"kg","cm",0.66,1848 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",13,2015.414,-0.586,0,2016,3.83,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.65,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",3.83,"ug/mL",0,"2022-08-25 14:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-18 11:09:00",174,75.5,"kg","cm",0.6,2016 +"XX01",11203,"Analyte01","SERUM","EVERY WEEK",13,2017.754,1.754,0.5,2016.5,15.8,"Analyte01","ug/mL","intravascular",50,66,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",15.8,"ug/mL",0,"2022-06-02 19:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-25 14:40:00",174,75.5,"kg","cm",0.56,2016 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,-1.168,-1.168,0,0,0,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-09 13:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.59,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,2.752,2.752,0.5,0.5,20.1,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",20.1,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.58,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,6.752,6.752,4,4,20.7,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",20.7,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.59,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,9.662,9.662,8,8,19.9,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",19.9,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.57,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,27.002,27.002,48,48,11.1,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",11.1,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.61,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",1,72.752,72.752,144,144,6.14,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.14,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.55,0 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,503.002,-0.998000000000001,0,504,0.0166,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.58,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0166,"ug/mL",0,"2022-06-30 13:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-09 13:35:00",158,49.3,"kg","cm",2.53,504 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,506.662,2.662,0.5,504.5,13,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",13,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.26,504 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",2,530.502,26.502,48,552,13.4,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",13.4,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.29,504 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",3,671.712,-0.288000000000001,0,672,2.5,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",3.3,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",2.5,"ug/mL",0,"2022-07-07 14:07:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-30 13:55:00",158,49.3,"kg","cm",3.29,672 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",3,674.632,2.632,0.5,672.5,14.7,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",14.7,"ug/mL",0,"2022-07-14 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 14:07:00",158,49.3,"kg","cm",2.15,672 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",4,840.332,0.331999999999999,0,840,3.03,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",2.12,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",3.03,"ug/mL",0,"2022-07-14 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 14:07:00",158,49.3,"kg","cm",2.12,840 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",4,842.662,2.662,0.5,840.5,14.8,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",14.8,"ug/mL",0,"2022-07-28 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 12:55:00",158,49.3,"kg","cm",1.52,840 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",5,1008.832,0.831999999999999,0,1008,0.949,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.949,"ug/mL",0,"2022-07-28 15:15:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-14 12:55:00",158,49.3,"kg","cm",1.54,1008 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",5,1010.662,2.662,0.5,1008.5,12.4,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",12.4,"ug/mL",0,"2022-08-04 11:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 15:15:00",158,49.3,"kg","cm",1.71,1008 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",6,1176.982,0.981999999999999,0,1176,2.8,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.8,"ug/mL",0,"2022-08-04 11:41:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 15:15:00",158,49.3,"kg","cm",1.67,1176 +"XX01",11204,"Analyte01","SERUM","EVERY WEEK",6,1178.652,2.652,0.5,1176.5,17.1,"Analyte01","ug/mL","intravascular",50,69,"F","WHITE",1.1,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",17.1,"ug/mL",0,"2022-06-09 20:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-04 11:41:00",158,49.3,"kg","cm",1.07,1176 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.5,-0.5,0,0,0,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-12 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.57,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.5,1.5,0.5,0.5,14.6,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.6,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.52,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.5,5.5,4,4,14.5,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.5,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.48,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.5,9.5,8,8,14.1,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.1,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.49,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,27.33,27.33,48,48,9.67,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",9.67,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.53,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",1,47,47,144,144,6.04,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.04,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.51,0 +"XX01",11301,"Analyte01","SERUM","EVERY 3 WEEKS",2,168.33,0.33,0,168,1.77,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.77,"ug/mL",0,"2022-07-19 17:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 12:30:00",173,55.5,"kg","cm",1.48,168 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,169.5,1.5,0.5,168.5,12.9,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",12.9,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.99,168 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,172.5,4.5,4,172,14.7,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.7,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",1,168 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,188.83,20.83,48,216,13.3,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",13.3,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.99,168 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",2,258.83,90.83,192,360,5.95,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",5.95,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",0.93,168 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,336.83,0.83,0,336,1.92,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",1.92,"ug/mL",0,"2022-07-26 16:25:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 17:10:00",173,55.5,"kg","cm",1,336 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,337.5,1.5,0.5,336.5,23.2,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",23.2,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.52,336 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",3,362.58,26.58,48,384,12,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 16",12,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.46,336 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,504.42,0.42,0,504,2.28,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",2.28,"ug/mL",0,"2022-08-02 10:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-26 16:25:00",173,55.5,"kg","cm",0.52,504 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,505.5,1.5,0.5,504.5,20,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",20,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.99,504 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",4,531.08,27.08,48,552,12.6,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",12.6,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.94,504 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,672.92,0.92,0,672,3.6,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",3.6,"ug/mL",0,"2022-08-09 13:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:55:00",173,55.5,"kg","cm",0.97,672 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,673.5,1.5,0.5,672.5,16.5,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",16.5,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.52,672 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,694.75,22.75,48,720,15.7,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",15.7,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.53,672 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",5,768,96,192,864,7.75,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",7.75,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.56,672 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",6,840.67,0.67,0,840,4.49,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",4.49,"ug/mL",0,"2022-08-16 12:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 13:05:00",173,55.5,"kg","cm",0.5,840 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",6,841.5,1.5,0.5,840.5,18.9,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 15",18.9,"ug/mL",0,"2022-08-23 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:50:00",173,55.5,"kg","cm",0.54,840 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",7,1008.92,0.92,0,1008,4.13,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",4.13,"ug/mL",0,"2022-08-23 11:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:50:00",173,55.5,"kg","cm",0.54,1008 +"XX01",11301,"Analyte01","SERUM","EVERY WEEK",7,1009.5,1.5,0.5,1008.5,10.9,"Analyte01","ug/mL","intravascular",50,62,"M","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",10.9,"ug/mL",0,"2022-08-30 16:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:05:00",173,55.5,"kg","cm",0.49,1008 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,-0.164000000000001,-0.164000000000001,0,0,0,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-08-16 12:55:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.7,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,1.716,1.716,0.5,0.5,9.13,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.13,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.67,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,5.666,5.666,4,4,13.7,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.7,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.65,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,8.996,8.996,8,8,13.4,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",13.4,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.63,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,25.836,25.836,48,48,8.65,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.65,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.75,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",1,75.586,75.586,144,144,3.9,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.9,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.65,0 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,168.446,0.445999999999999,0,168,1.01,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.67,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.01,"ug/mL",0,"2022-08-23 14:08:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-16 12:55:00",165,81.2,"kg","cm",1.67,168 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,169.786,1.786,0.5,168.5,11.9,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",11.9,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.05,168 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,172.696,4.696,4,172,14.8,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",14.8,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.01,168 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,192.366,24.366,48,216,11.4,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",11.4,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.04,168 +"XX01",11302,"Analyte01","SERUM","EVERY WEEK",2,263.696,95.696,192,360,4.1,"Analyte01","ug/mL","intravascular",50,65,"F","WHITE",1.05,"Hours","mg",0,"Analyte01","Cycle 1 Day 12",4.1,"ug/mL",0,"2022-09-12 12:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 14:08:00",165,81.2,"kg","cm",1.02,168 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.0814285714285747,-0.0814285714285747,0,0,0,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-05-31 13:13:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.77,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.86857142857143,1.86857142857143,0.5,0.5,6.7,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.7,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.67,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.74857142857143,5.74857142857143,4,4,10.3,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.3,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.71,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.74857142857142,9.74857142857142,8,8,12.8,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.8,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.68,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,28.7485714285714,28.7485714285714,48,48,10,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",10,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.72,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,75.4985714285714,75.4985714285714,144,144,6.61,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",6.61,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.72,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,170.748571428571,170.748571428571,336,336,2.59,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",2.59,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.74,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",1,338.088571428571,338.088571428571,672,672,0.349,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.349,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.67,0 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,504.298571428571,0.298571428571425,0,504,0.0185,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.72,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0185,"ug/mL",0,"2022-06-21 13:50:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-05-31 13:13:00",149,64,"kg","cm",1.71,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,506.188571428571,2.18857142857143,0.5,504.5,11.7,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",11.7,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.14,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,531.888571428571,27.8885714285714,48,552,9,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.13,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,668.718571428571,164.718571428571,336,840,1.97,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.97,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.17,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,699.718571428571,195.718571428571,384,888,1.43,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.43,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.17,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",2,767.718571428571,263.718571428571,528,1032,0.69,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 2 Day 12",0.69,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.23,504 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.38857142857,0.388571428571425,0,1008,0.0211,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",1.17,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0211,"ug/mL",0,"2022-07-12 11:20:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 13:50:00",149,64,"kg","cm",1.1,1008 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1010.04857142857,2.04857142857143,0.5,1008.5,13.3,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",13.3,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.63,1008 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1177.54857142857,169.548571428571,336,1344,2.05,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2.05,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.54,1008 +"XX01",25101,"Analyte01","SERUM","EVERY 3 WEEKS",3,1345.29857142857,337.298571428571,672,1680,0.32,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.32,"ug/mL",0,"2022-08-02 10:58:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-12 11:20:00",149,64,"kg","cm",0.58,1008 +"XX01",25101,"Analyte01","SERUM","EVERY WEEK",4,1514.24857142857,1.74857142857143,0,1512.5,12.7,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",12.7,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.64,1512.5 +"XX01",25101,"Analyte01","SERUM","EVERY WEEK",4,1681.08857142857,168.588571428571,335.5,1848,2.29,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",2.29,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.6,1512.5 +"XX01",25101,"Analyte01","SERUM","EVERY WEEK",5,2016.46857142857,0.468571428571425,0,2016,0.04,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.58,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.04,"ug/mL",0,"2022-08-23 11:35:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-02 10:58:00",149,64,"kg","cm",0.57,2016 +"XX01",25101,"Analyte01","SERUM","EVERY WEEK",6,2017.96857142857,1.46857142857143,0,2016.5,8.69,"Analyte01","ug/mL","intravascular",35,70,"F","WHITE",0.32,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",8.69,"ug/mL",0,"2022-09-13 12:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:35:00",149,64,"kg","cm",0.31,2016.5 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.42,-0.42,0,0,0,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-16 11:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.56,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.5,1.5,0.5,0.5,12.1,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.1,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.47,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.5,5.5,4,4,11.1,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",11.1,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.53,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.5,9.5,8,8,12.5,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",12.5,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.48,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.5,25.5,48,48,8.61,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.61,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.45,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,73.5,73.5,144,144,3.61,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.61,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.44,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,167.92,167.92,336,336,1.45,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.45,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.5,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,195.18,195.18,216,216,0.968,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 9",0.968,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.51,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",1,336,336,672,672,0.0315,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0315,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.45,0 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,504.33,0.33,0,504,0.0034,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.0034,"ug/mL",0,"2022-07-07 15:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-16 11:10:00",168.9,50,"kg","cm",1.53,504 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.5,1.5,0.5,504.5,5.25,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",5.25,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1.05,504 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,530.67,26.67,48,552,7.65,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",7.65,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1,504 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,671.83,167.83,336,840,1.88,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.88,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",0.96,504 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",2,698.65,194.65,384,888,1.42,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.42,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",0.97,504 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1008.33,0.33,0,1008,0.0069,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",1,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",0.0069,"ug/mL",0,"2022-07-28 10:10:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-07 15:40:00",168.9,50,"kg","cm",1,1008 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1009.5,1.5,0.5,1008.5,10.2,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 1",10.2,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.54,1008 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1176.22,168.22,336,1344,2,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 8",2,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.45,1008 +"XX01",25102,"Analyte01","SERUM","EVERY 3 WEEKS",3,1344.22,336.22,672,1680,0.147,"Analyte01","ug/mL","intravascular",35,64,"M","ASIAN",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",0.147,"ug/mL",0,"2022-09-14 11:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-28 10:10:00",168.9,50,"kg","cm",0.52,1008 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,-1.8,-1.8,0,0,0,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-06-21 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.67,1.67,0.5,0.5,10.5,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",10.5,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.5,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.47,5.47,4,4,9.15,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.15,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,10.07,10.07,8,8,9.68,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",9.68,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.48,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.08,25.08,48,48,6.32,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",6.32,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.48,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,73.5,73.5,144,144,3.12,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",3.12,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.46,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,170.82,170.82,336,336,0.603,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.603,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.5,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,338.55,338.55,672,672,0.0027,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0027,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 +"XX01",25103,"Analyte01","SERUM","EVERY 3 WEEKS",1,503.95,503.95,NA,NA,0,"Analyte01","ug/mL","intravascular",35,46,"M","ASIAN",1.5,"Hours","mg",0,"Analyte01","Discontinuation Visit",0,"ug/mL",0,"2022-06-21 18:00:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-06-21 12:30:00",180,67.1,"kg","cm",1.47,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,-2.99428571428572,-2.99428571428572,0,0,0,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-07-19 12:37:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.52,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.76571428571428,1.76571428571428,0.5,0.5,14.4,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.4,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.49,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,5.51571428571428,5.51571428571428,4,4,17.5,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",17.5,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,9.76571428571428,9.76571428571428,8,8,14.2,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",14.2,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,27.6057142857143,27.6057142857143,48,48,8.16,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",8.16,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.54,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,71.6057142857143,71.6057142857143,144,144,4.51,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",4.51,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.52,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,165.915714285714,165.915714285714,336,336,1.28,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",1.28,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.55,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",1,333.385714285714,333.385714285714,672,672,0.0187,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 15",0.0187,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.53,0 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,503.135714285714,-0.864285714285719,0,504,0.002,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",0.002,"ug/mL",0,"2022-08-09 14:06:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-07-19 12:37:00",165,71.9,"kg","cm",1.55,504 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,505.655714285714,1.65571428571428,0.5,504.5,12.1,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 1",12.1,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.5,504 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,527.815714285714,23.8157142857143,48,552,9.64,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 2",9.64,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.51,504 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,677.015714285714,173.015714285714,336,840,1.65,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 8",1.65,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.5,504 +"XX01",25104,"Analyte01","SERUM","EVERY 3 WEEKS",2,699.005714285714,195.005714285714,384,888,1.21,"Analyte01","ug/mL","intravascular",35,67,"M","WHITE",1.52,"Hours","mg",0,"Analyte01","Cycle 2 Day 9",1.21,"ug/mL",0,"2022-08-30 10:48:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-09 14:06:00",165,71.9,"kg","cm",1.47,504 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,-0.438333333333333,-0.438333333333333,0,0,0,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",0,"ug/mL",0,"2022-08-23 11:59:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.52,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,1.58166666666667,1.58166666666667,0.5,0.5,6.3,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",6.3,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.56,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,4.63166666666667,4.63166666666667,4,4,7.16,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",7.16,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.49,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,7.96166666666667,7.96166666666667,8,8,5.83,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 1",5.83,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.58,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,25.3016666666667,25.3016666666667,48,48,4.28,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 2",4.28,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.53,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,75.6816666666667,75.6816666666667,144,144,1.95,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 4",1.95,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.54,0 +"XX01",25201,"Analyte01","SERUM","EVERY 3 WEEKS",1,171.701666666667,171.701666666667,336,336,0.258,"Analyte01","ug/mL","intravascular",35,51,"M","WHITE",1.53,"Hours","mg",0,"Analyte01","Cycle 1 Day 8",0.258,"ug/mL",0,"2022-09-13 11:34:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-08-23 11:59:00",176.5,81.6,"kg","cm",1.5,0 From 1aef135be686e8709d5484f5f4eaaab16f68938b Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 5 Nov 2024 17:07:39 +0100 Subject: [PATCH 03/85] enhancement: create function to create impute_c0 column --- R/create_c0_impute_column.R | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 R/create_c0_impute_column.R diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R new file mode 100644 index 00000000..d8173c4c --- /dev/null +++ b/R/create_c0_impute_column.R @@ -0,0 +1,48 @@ +process_c0_imputation <- function(params_with_impute_c0, mydata) { + + # Define group columns + group_columns <- unname(unlist(mydata$conc$columns$groups)) + time_column <- mydata$conc$columns$time + + # Process c0_rows and assign c0 imputation strategy + c0_rows <- mydata$conc$data %>% + group_by(across(all_of(group_columns))) %>% + arrange(across(all_of(c(group_columns, time_column)))) %>% + dplyr::mutate( + vr_avals = paste0('c(', paste0(AVAL, collapse = ','), ')'), + vr_times = paste0('c(', paste0(AFRLT, collapse = ','), ')'), + time_dose = !!sym(time_column) - ARRLT + ) %>% + ungroup() %>% + group_by(across(all_of(group_columns))) %>% + slice(1) %>% + ungroup() %>% + mutate( + impute = case_when( + AFRLT == 0 & !is.na(AVAL) ~ NA, + DOSNO == 1 & (tolower(ROUTE) == "extravascular" | ADOSEDUR > 0 | ANALYTE != DRUG) ~ "start_conc0", + DOSNO > 1 & (tolower(ROUTE) == "extravascular" | ADOSEDUR > 0 | ANALYTE != DRUG) ~ "start_predose", + tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG & + !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), + time = eval(parse(text = vr_times)), + time.dose = time_dose[1], + method = 'logslope')) ~ "start_logslope", + tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG ~ "start_c1" + ) + ) %>% + select(any_of(c(group_columns, "impute"))) + + # Update mydata$intervals + mydata$intervals <- rbind( + mydata$intervals %>% + mutate(across(all_of(params_with_impute_c0), ~ FALSE)) %>% + mutate(across(all_of(params_without_impute_c0), ~ TRUE)) %>% + mutate(impute = NA), + + mydata$intervals %>% + left_join(c0_rows, by = group_columns) %>% + mutate(across(all_of(params_without_impute_c0), ~ FALSE)) + ) + + return(mydata) +} \ No newline at end of file From ec3e1094b8b73fe9072482c31acec4114ec0bbdb Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 5 Nov 2024 17:08:10 +0100 Subject: [PATCH 04/85] enhancement: include additional C0 imputation strategies --- R/PKNCA_impute_method_additions.R | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 R/PKNCA_impute_method_additions.R diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R new file mode 100644 index 00000000..2f25e2d7 --- /dev/null +++ b/R/PKNCA_impute_method_additions.R @@ -0,0 +1,30 @@ +PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., options = list()) { + ret <- data.frame(conc = conc, time = time) + mask_start <- time %in% start + if (!any(mask_start)) { + all_concs <- conc[time >= start & time <= end] + all_times <- time[time >= start & time <= end] + if (!all(is.na(all_concs))) { + c0 <- PKNCA::pk.calc.c0(all_concs, all_times, method = "logslope") + ret <- rbind(ret, data.frame(time = start, conc = c0)) + ret <- ret[order(ret$time), ] + } + } + ret +} + + +PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { + ret <- data.frame(conc = conc, time = time) + mask_start <- time %in% start + if (!any(mask_start)) { + all_concs <- conc[time >= start & time <= end] + all_times <- time[time >= start & time <= end] + if (!all(is.na(all_concs))) { + c1 <- all_concs[which.min(all_times, na.rm = T)] + ret <- rbind(ret, data.frame(time = start, conc = c1)) + ret <- ret[order(ret$time), ] + } + } + ret +} \ No newline at end of file From 50fb2e14d6e04e0f6fbc2b47201d403ab2729f9e Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 6 Nov 2024 12:47:26 +0100 Subject: [PATCH 05/85] feature: intervals include imputate strategy with duplicated rows apart for non-c0 parameters --- R/create_c0_impute_column.R | 33 +++++++++++++++++++++++++-------- inst/shiny/tabs/nca.R | 16 ++++++++++------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index d8173c4c..df2dbe91 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -1,16 +1,30 @@ -process_c0_imputation <- function(params_with_impute_c0, mydata) { +create_c0_impute <- function(mydata) { # Define group columns group_columns <- unname(unlist(mydata$conc$columns$groups)) + conc_column <- mydata$conc$columns$conc time_column <- mydata$conc$columns$time + common_cols <- intersect(unlist(mydata$conc$columns$groups), + unlist(mydata$dose$columns$groups)) + + mydata_conc <- merge(x = mydata$conc$data, + y = mydata$dose$data[, common_cols] %>% + dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) + ) + + # Define parameters that need to include c0 imputations + all_params <- suppressWarnings(apply(mydata$intervals, MARGIN = 2, function(col) any(col))) + all_params <- names(all_params[!is.na(all_params) & all_params]) + params_c0 <- setdiff(all_params, c("half.life", "cmax", "tmax", "cmax.dn", + "ctrough", "min.hl.points", "min.hl.r.squared")) # Process c0_rows and assign c0 imputation strategy - c0_rows <- mydata$conc$data %>% + c0_rows <- mydata_conc %>% group_by(across(all_of(group_columns))) %>% arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate( - vr_avals = paste0('c(', paste0(AVAL, collapse = ','), ')'), - vr_times = paste0('c(', paste0(AFRLT, collapse = ','), ')'), + vr_avals = paste0('c(', paste0(!!sym(conc_column), collapse = ','), ')'), + vr_times = paste0('c(', paste0(!!sym(time_column), collapse = ','), ')'), time_dose = !!sym(time_column) - ARRLT ) %>% ungroup() %>% @@ -35,14 +49,17 @@ process_c0_imputation <- function(params_with_impute_c0, mydata) { # Update mydata$intervals mydata$intervals <- rbind( mydata$intervals %>% - mutate(across(all_of(params_with_impute_c0), ~ FALSE)) %>% - mutate(across(all_of(params_without_impute_c0), ~ TRUE)) %>% + mutate(across(all_of(params_c0), ~ FALSE)) %>% mutate(impute = NA), mydata$intervals %>% left_join(c0_rows, by = group_columns) %>% - mutate(across(all_of(params_without_impute_c0), ~ FALSE)) + mutate(across(all_of(params_c0), ~ TRUE)) ) return(mydata) -} \ No newline at end of file +} + + + +PKNCA_impute_method_start_predose() \ No newline at end of file diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index f7c603d5..83b44a93 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -4,8 +4,6 @@ # results of the NCA. In the setup tabset we select the anaylte to be processed, # setup the NCA setting and can do manual slope selection or point exclusion. In the result tabset # we can view the NCA results, slope caclulation und exclusions table. - - # TABSET: Setup ================================================================ # In the setup tabset we select the anaylte to be processed, @@ -193,7 +191,7 @@ observeEvent(input$submit_analyte, priority = 2, { # Segregate the data into concentration and dose records df_conc <- create_conc(data(), input$analyte, c(group_columns, usubjid_column), time_column = 'AFRLT') - df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), time_column = 'AFRLT') + df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), time_column = 'AFRLT', relative_time0_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -204,15 +202,15 @@ observeEvent(input$submit_analyte, priority = 2, { # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, - formula = AVAL ~ TIME | STUDYID + PCSPEC + ANALYTE + USUBJID / DOSNO, + formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID / DOSNO, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) mydose <- PKNCA::PKNCAdose( data = df_dose, - formula = DOSEA ~ TIME | STUDYID + PCSPEC + ANALYTE + USUBJID + DOSNO, - route = ifelse(toupper(df_dose$ROUTE) == "EXTRAVASCULAR", "extravascular", "intravascular"), + formula = DOSEA ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID + DOSNO, + route = tolower(df_dose$ROUTE), time.nominal = "NFRLT", duration = "ADOSEDUR" ) @@ -229,6 +227,7 @@ observeEvent(input$submit_analyte, priority = 2, { timeu = myconc$data$RRLTU[1] ) ) + mydata(mydata) }) @@ -430,6 +429,11 @@ res_nca <- eventReactive(rv$trigger, { aucpext.obs = TRUE, aucpext.pred = TRUE ) + + # Perform C0 imputations for the relevant parameters + if (input$impute_c0) { + mydata <- create_c0_impute(mydata = mydata) + } # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) From 82521f5a69eed616c94fc7ff2b2850ec2390b198 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 6 Nov 2024 14:29:48 +0100 Subject: [PATCH 06/85] bug: PKNCAconc formula adapted for PKNCA to consider predoses for impute_predose --- inst/shiny/tabs/nca.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 83b44a93..379fa105 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -183,6 +183,7 @@ observeEvent(input$settings_upload, { # create the PKNCA data object mydata <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { + browser() # Define explicetely input columns until there are input definitions group_columns = intersect(colnames(data()), c('STUDYID', 'PCSPEC', 'DOSNO', 'ROUTE', 'DRUG')) @@ -202,7 +203,7 @@ observeEvent(input$submit_analyte, priority = 2, { # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, - formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID / DOSNO, + formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) From 135152dd801ccd0c57d9309048385ae0229048de Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 6 Nov 2024 15:12:26 +0100 Subject: [PATCH 07/85] bug: solved classification of doses in create_c0_impute --- R/create_c0_impute_column.R | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index df2dbe91..7ebe551c 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -1,7 +1,7 @@ create_c0_impute <- function(mydata) { # Define group columns - group_columns <- unname(unlist(mydata$conc$columns$groups)) + group_columns <- unname(unlist(mydata$dose$columns$groups)) conc_column <- mydata$conc$columns$conc time_column <- mydata$conc$columns$time common_cols <- intersect(unlist(mydata$conc$columns$groups), @@ -59,7 +59,3 @@ create_c0_impute <- function(mydata) { return(mydata) } - - - -PKNCA_impute_method_start_predose() \ No newline at end of file From 18f4ee2695a1278e07d6946f365ce0341a8fcb2d Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 6 Nov 2024 15:13:26 +0100 Subject: [PATCH 08/85] bug: perfectionated formulas to consider different analytes appropiately --- inst/shiny/tabs/nca.R | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 379fa105..b0ec931d 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -183,6 +183,7 @@ observeEvent(input$settings_upload, { # create the PKNCA data object mydata <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { + browser() # Define explicetely input columns until there are input definitions @@ -203,14 +204,14 @@ observeEvent(input$submit_analyte, priority = 2, { # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, - formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID, + formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + DRUG + USUBJID / ANALYTE, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) mydose <- PKNCA::PKNCAdose( data = df_dose, - formula = DOSEA ~ TIME | STUDYID + ROUTE + PCSPEC + ANALYTE + DRUG + USUBJID + DOSNO, + formula = DOSEA ~ TIME | STUDYID + ROUTE + PCSPEC + DRUG + USUBJID + DOSNO, route = tolower(df_dose$ROUTE), time.nominal = "NFRLT", duration = "ADOSEDUR" @@ -404,7 +405,7 @@ res_nca <- eventReactive(rv$trigger, { # Make sure the standard options do not prohibit results min.hl.r.squared = 0.001, min.span.ratio = Inf, - min.hl.points = 2 + min.hl.points = 3 ) # Filter the data based on the selected profiles @@ -422,7 +423,7 @@ res_nca <- eventReactive(rv$trigger, { vss.iv.obs = TRUE, cl.obs = TRUE, cl.pred = TRUE, - f = if (length(unique(mydata$conc$data$PKROUTE)) > 1) TRUE else FALSE, + f = if (length(unique(mydata$conc$data$ROUTE)) > 1) TRUE else FALSE, vz.obs = TRUE) %>% # If so, include the AUC intervals defined by the user rbind(intervals_userinput()) %>% From 7e93a4fc253544779021fdb8955dee36adf8c094 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 7 Nov 2024 09:44:59 +0100 Subject: [PATCH 09/85] style: solve most lintr issues --- R/PKNCA_impute_method_additions.R | 7 ++--- R/create_c0_impute_column.R | 47 ++++++++++++++++++------------- inst/shiny/tabs/nca.R | 22 +++++++-------- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index 2f25e2d7..692ebf21 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -1,4 +1,4 @@ -PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., options = list()) { +PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start if (!any(mask_start)) { @@ -13,7 +13,6 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., opti ret } - PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start @@ -21,10 +20,10 @@ PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = all_concs <- conc[time >= start & time <= end] all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { - c1 <- all_concs[which.min(all_times, na.rm = T)] + c1 <- all_concs[which.min(all_times, na.rm = TRUE)] ret <- rbind(ret, data.frame(time = start, conc = c1)) ret <- ret[order(ret$time), ] } } ret -} \ No newline at end of file +} diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index 7ebe551c..f67462ad 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -1,30 +1,31 @@ create_c0_impute <- function(mydata) { - + # Define group columns group_columns <- unname(unlist(mydata$dose$columns$groups)) conc_column <- mydata$conc$columns$conc time_column <- mydata$conc$columns$time common_cols <- intersect(unlist(mydata$conc$columns$groups), unlist(mydata$dose$columns$groups)) - - mydata_conc <- merge(x = mydata$conc$data, - y = mydata$dose$data[, common_cols] %>% - dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) - ) - + + mydata_conc <- merge( + x = mydata$conc$data, + y = mydata$dose$data[, common_cols] %>% + dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) + ) + # Define parameters that need to include c0 imputations all_params <- suppressWarnings(apply(mydata$intervals, MARGIN = 2, function(col) any(col))) all_params <- names(all_params[!is.na(all_params) & all_params]) - params_c0 <- setdiff(all_params, c("half.life", "cmax", "tmax", "cmax.dn", + params_c0 <- setdiff(all_params, c("half.life", "cmax", "tmax", "cmax.dn", "ctrough", "min.hl.points", "min.hl.r.squared")) - + # Process c0_rows and assign c0 imputation strategy c0_rows <- mydata_conc %>% group_by(across(all_of(group_columns))) %>% - arrange(across(all_of(c(group_columns, time_column)))) %>% + arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate( - vr_avals = paste0('c(', paste0(!!sym(conc_column), collapse = ','), ')'), - vr_times = paste0('c(', paste0(!!sym(time_column), collapse = ','), ')'), + vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), + vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")"), time_dose = !!sym(time_column) - ARRLT ) %>% ungroup() %>% @@ -34,28 +35,34 @@ create_c0_impute <- function(mydata) { mutate( impute = case_when( AFRLT == 0 & !is.na(AVAL) ~ NA, - DOSNO == 1 & (tolower(ROUTE) == "extravascular" | ADOSEDUR > 0 | ANALYTE != DRUG) ~ "start_conc0", - DOSNO > 1 & (tolower(ROUTE) == "extravascular" | ADOSEDUR > 0 | ANALYTE != DRUG) ~ "start_predose", + DOSNO == 1 & + (tolower(ROUTE) == "extravascular" | + ADOSEDUR > 0 | + ANALYTE != DRUG) ~ "start_conc0", + DOSNO > 1 & + (tolower(ROUTE) == "extravascular" | + ADOSEDUR > 0 | + ANALYTE != DRUG) ~ "start_predose", tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG & - !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), - time = eval(parse(text = vr_times)), + !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), + time = eval(parse(text = vr_times)), time.dose = time_dose[1], - method = 'logslope')) ~ "start_logslope", + method = "logslope")) ~ "start_logslope", tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG ~ "start_c1" ) ) %>% select(any_of(c(group_columns, "impute"))) - + # Update mydata$intervals mydata$intervals <- rbind( mydata$intervals %>% mutate(across(all_of(params_c0), ~ FALSE)) %>% mutate(impute = NA), - + mydata$intervals %>% left_join(c0_rows, by = group_columns) %>% mutate(across(all_of(params_c0), ~ TRUE)) ) - + return(mydata) } diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index b0ec931d..6ebe1f11 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -183,17 +183,17 @@ observeEvent(input$settings_upload, { # create the PKNCA data object mydata <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { - - browser() - + # Define explicetely input columns until there are input definitions - group_columns = intersect(colnames(data()), c('STUDYID', 'PCSPEC', 'DOSNO', 'ROUTE', 'DRUG')) - usubjid_column = 'USUBJID' - time_column = 'AFRLT' - + group_columns <- intersect(colnames(data()), c("STUDYID", "PCSPEC", "DOSNO", "ROUTE", "DRUG")) + usubjid_column <- "USUBJID" + time_column <- "AFRLT" + # Segregate the data into concentration and dose records - df_conc <- create_conc(data(), input$analyte, c(group_columns, usubjid_column), time_column = 'AFRLT') - df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), time_column = 'AFRLT', relative_time0_column = "ARRLT") + df_conc <- create_conc(data(), input$analyte, c(group_columns, usubjid_column), + time_column = time_column) + df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), + time_column = time_column, relative_time0_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -431,7 +431,7 @@ res_nca <- eventReactive(rv$trigger, { aucpext.obs = TRUE, aucpext.pred = TRUE ) - + # Perform C0 imputations for the relevant parameters if (input$impute_c0) { mydata <- create_c0_impute(mydata = mydata) @@ -692,7 +692,7 @@ output$preslopesettings <- DT::renderDataTable({ scrollX = TRUE, scrollY = TRUE, lengthMenu = list(c(10, 25, -1), c("10", "25", "All")), - pageLength = -1, + pageLength = -1, fixedHeader = TRUE ) ) %>% From 0a5ba6d5d06cc95e9d4f3b1b9569c93319fa404f Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 7 Nov 2024 11:41:15 +0100 Subject: [PATCH 10/85] refactor: delete report files that should not have been called --- ...unk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData | Bin 3056 -> 0 bytes ...chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb | 0 ...chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx | Bin 125 -> 0 bytes ...hunk-1_3baf5bc8147a7f0d6a3653fef316a800.RData | Bin 3273 -> 0 bytes ...-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdb | 0 ...-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdx | Bin 125 -> 0 bytes ...hunk-2_34085e95397c924995cea3f1c0b2b3bc.RData | Bin 3127 -> 0 bytes ...-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb | 0 ...-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx | Bin 125 -> 0 bytes ...hunk-3_39255671ec78e4842870a7a62dd112d5.RData | Bin 3063 -> 0 bytes ...-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb | 0 ...-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx | Bin 125 -> 0 bytes ...hunk-4_dad6355d2ebfa2b66368c1834374841a.RData | Bin 3173 -> 0 bytes ...-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb | 0 ...-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx | Bin 125 -> 0 bytes ...hunk-5_b86ec085c87a23b8c09f22732dae3042.RData | Bin 3201 -> 0 bytes ...-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb | 0 ...-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx | Bin 125 -> 0 bytes ...hunk-6_85234017c541394bb6d4b2878df2736e.RData | Bin 3465 -> 0 bytes ...-chunk-6_85234017c541394bb6d4b2878df2736e.rdb | 0 ...-chunk-6_85234017c541394bb6d4b2878df2736e.rdx | Bin 125 -> 0 bytes ...hunk-7_58f2ab2fd15e1a6c212520eb8869498b.RData | Bin 3119 -> 0 bytes ...-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb | 0 ...-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx | Bin 125 -> 0 bytes ...hunk-8_2215bee3c0ede3c4745474a92aa77c85.RData | Bin 3088 -> 0 bytes ...-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdb | 0 ...-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdx | Bin 125 -> 0 bytes ...hunk-9_fb5f377c64e6c0fedfb271b646c2783e.RData | Bin 3019 -> 0 bytes ...-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb | 0 ...-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx | Bin 125 -> 0 bytes 30 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-1_3baf5bc8147a7f0d6a3653fef316a800.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-8_2215bee3c0ede3c4745474a92aa77c85.rdx delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.RData delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb delete mode 100644 www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.RData deleted file mode 100644 index 0fc9ca962e7758d124e330956b0a50b3baf0e4c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3056 zcmVPyi`_WiANp@3+s~9t2X9mj!YlMUb-0LM(joGy*-!f<+_} zWU(p;B+mqa5LacsMYQXQrnf=ce=!;cb>JZENlDhKe`f&Z<65`N(qa=07)r5uYkX!o zIfH6EJASS+yU2QS<*`#$CgeTiJ|pR^;NT7WZ`a2${_CCMs1GG3!khg$`Wa=6pC7Dx zt(oMWLdPXRyby`CdkYR{a~=#R73(BI@aS<=<#$9i5}_DiR3tLs?ui z{p~B>wKrE1j($RwSnr;7G+**b{{2D3Ni_|KrsO1dWXjdBFyp4$gigAS$3CO*n`Q15 zaW*d+!^^oP&;p)Pg0?P^s_Iu!ZDdI4RKXdJ#~ix#b<&3G0gtqc+7duGK7M~k7aG-G>_B`?sRPrc>QDB z9-U2%n@+rc_iXdTTh}V{)Rx0nH(c!RW?xKM)tS@0Q)62ZsX-w11Wz~H03U5v_?U}Z z-^@=uyDmyXg7&TZm6n^+&w|*TSl!!ixGsaM%o#t%Q?;pv?wAZJOz@82%&;KXYUlxn zdNr_))1tt5;>WzqwpP@@!B3$8X{KJ4k7-=q`bA9Xx(**{t9EX^)PNj> z*LlxFQ1|>#AL{|Bx^ooFXbC6ACtKkPo`qq?k+pHLa=h7e_u#C!h$CFL(cOdZN8^!# zz@RjC)V+0)IZ76vnT>L;`{ybmx$vAVZOrByV;zzWTIo;g$-%yLGk&O=EDn%%q%&JN zz_8b$=sM*17vv<&X`sx@d+vFl1>j*+)WXM0yGCyhqiwDza2_4TZ5I#GMf zO|M4Ti@8oCZMr8&#l(_7>3wpzuIjNK;f7_OTh~Xwt`}kZN>8<;&G9PC(gi);1EE)- z)z4-PN1ivkU+#s54-o?P`Tay?j^4dbnBJgtp?lN*=dNu=Bl0P;+{a~KUbW@SrA^TU zD>0jkRy%Jvx9z?7Q2pi6r$HQC+Xa{%dtapba4!ADV)-Ixt>hw- zxJgYwb~W^CCTF`?)Zj`NiuD8u*;ajtI#!{MJ(ZHiO%Fu$dJE~#_9^qN%C=np%cYC| zXat?++E}4pLI->@3dB?cLP^2txK7`ldQ7o-3`8_69VuPm@8UT}U?eA!L?7yus?g2g zEam{Ogb{qq*QoOOVf&X5rY`)jU!Pv@6FD7fMW%MPfV@A zM5(ZGttN!KEjdBL!SoToK7s{T+E(4fjAj*{za@yL)mk$%n>_~9&)-M; zx2v1KvH##TE%JM1G^IJ#<5lYB+$5UXvk;PbL@L|}zz|zjnrq#>d(fS&-F_$5G zB$r1lQ6OLW9RSyVJjidzBus)C;(a+|cf|*~%r$eTYq0ATt@GwS$%klMPt7tpWfxKr zK^|+k*;eIpPDS*LMU>hT3~xh)pJ$t(ZXFLbhOt6}yBwqld=m_QFBsIj?{_eJT9}&r z07y@|A*ku>@L65Ojd}9h$*-c*G0+K)^q@!Je9w+spg58iyVsqgWB|>$UmxMn7wq8q zVT;3sEmp>ip10G z7qR*m=e+FtY}axH*G%OLRy~J!3gG@WR*fNgXY5i=?#u%0z(ZptA7T?k#Xhd2#;i?~ zFNSlifNxqYN4pT7cg3iI+ei8yIjc}tco^IE*@nE=LCqn7@%@efUos}doc9~=c=dfcqf?ZLDO?X|Qpm)>9y$QC}o!has{*lnwve#bkz zT?fbQr+T54E}eUNov<&;mpqnmmlhO8H;%hmxF>|3{8ro-&quCU=5e-*7}?oubac!jJCA@9}#E++HS@Z5*TTYZg?=>n*iSCW?Km~_vwR6MHQ|hRa}9VH z`sU!nFiM|QO5#yRM=HeSNwd|j3F%f(`WRPwi`9^x@s2GsP5Rich23j=X%Zy?zW+@8 zopyzYtPb6lL(GrRZ1+nWEHoxUlg?}A@fJl?qqN|pfG64IqDP~%yTWreyvhI6&;9gN z|Mb)S{3bw!^I5rYRP1;eJ(%Ui$kK&EL(XwsnueFmUeKhEUP{w)GopSXDQNo{!^EkN z#Vyv^YMG&!LDgBt1=RW8>iEyvJzK9Y1P%CZ3thY$%Od!gk^ag%Ug`5(BQ)7c=0vEI90p@pr>{AMo`uHT|m<*bb10 z^e7yIPNA_8f6E`I;zJQIn5oQ-|L(fb3CDpWL<)(_1`v@XQ(5Uh@!|L|A{!US#4`|y zKF+?*USPEOd=6?9QMD9Sy6O4n~aDevdMJ9E*LfH@0fT}JPuEz(b;%5 z5yz6fF)YNt%>RdlQ>es01ZE)!6s8QP0;hxnEPO15MgqdGzt2K$o$ yE(%Yf!OZ^T%V7SYF^Tk@`S$Ne3Zql$Oqo81+_0v9994GYwSNMV5muy33;+P5<}r={ diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-10_04b60d534d1ab7c24c2fab4ee8702c95.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 RR_XGt{1+FN6VoFN003#A89)F4 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-2_34085e95397c924995cea3f1c0b2b3bc.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 F00047{pbJy diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-3_39255671ec78e4842870a7a62dd112d5.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-4_dad6355d2ebfa2b66368c1834374841a.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-5_b86ec085c87a23b8c09f22732dae3042.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmb2|=3oE=w(bW>2?+^l35jWG32CfGk`d0%cS>|6BxbZ66cUi)h?vp9qRh4e8Sk7_lb_T&M6O@#Yq!(cFZn1Z}KOkNQh!W6x|91JaBFaC@g#zOJukTkPIURB?cw zM3cw*yC>sQ+4>^`dz&&28V^lfw>g!Dc*eWTi+e2HaN6R-$pKgIc{Wk(tAhshXFD^O zr55mhzB27LYml`=qR`oy+aS`MO5aiIq>|bai656gSH@WO*pyX&-e%x~f|I1kv87h9 ztj4%GJH+G{V$Wz+@&%Je6z@dxQx)&qJmG-PemA{tLg#{pK51V^Eb-<%<=;4atZc)m z@IeIrc|lY)_woIN6AzEYY;*4ZaUn)~#E-sB+QvXHRb}dGeTi$}p*B)A0p|J6nW@6Q>uCs$VEIEechmGg<>) zRGR>=Os6EShgUotdvfb!TO1zdF!xtZR%WLFVX}RCeW%XcRI##XU~7VkNeR+?$Ui5> zJw)_Ufbc0n{$yD`UvaU`gjD~@%6)0^vwJ4Ov#*-M2xpv@^(r;*RGoK$Jn&4TyFmi8 zM+7@d4d=|eG`#Y+;#xVm;$0uB z`6Q~huEe(XNCmzdb;f-RLA>O>Yilb^#Ze@W<-}|s7^+3dyX4UHL(8Hf=Om1zI0mFg zg=`kv_pj}K)*p?R`uQgd!!FGY%~Zm@-g2DA2kjx&`7yi&J6H8 z^U{l0nl1v8H#cP{`|7k?9z2QI_6|R!YtvQW=01Ac4+l8u9juX1XPW!Zz1hBXQuw2> zXiM3T&GX6y8C+2Fk-c`QvKxP{TJnolf4G5>WXOHT-7}}IYtv5~b=Wt*@@l?AbI9M> zKr*Dl`T678T0aFHLzdhc(doTi?Rc~u8Qeqnb@2L;&F{Z>nf_vd(xH|`&bP^RdcAUq zBjW1?@9x)SjwTOtq*D<~4o)|nwyj%#_^Rr?EjRr|l)6K@X2OLfZJgZ&x(aEi9mXx< zDD74DM=O$Me29)ER|pAQUk%^3LDS!ni=OxG%re;1x;|!fk>^_F$pOZSVS|}sogGru z^Fry~lsglJ6QbF?!+3Dfd?}Nx<5kVfu)~#7^2c+vr7;L#okBrC;n3j+a)$35bq(oJW{j!*vsj8*}I~eJlAOR`wSxxZFgsS^QR=% z3AQ1wgWKcUo}W=VMXFXz=XWLK@dCDb>J{JKWN{C{*FtUb>d>xrAk8<;&(3N>Bvjzj z>ejY~lZscq%v9GH(DgRLE9I`6NKf*iYo9;N+gI327bm!pG@P!zMOQ{MiJ@Z_9nF4| z>?X>YitLSSb&{J&pG#6=Tkd9RpSDnX0lvSc8&GU|>a1&jdd`7!(r8YZ zF+VNJCVzaaB2K5;sY~_1Ws-M;s^LS6=WZ|Byzc7_t3PUW%eS|!Y8zfR9+Z$aqno6n_Osi90PVZEEzGo~Ar1>wt1V%1<+NCE!Ua_-IP^v>( z6Zs}H>*cuaPgnJoJisah+#)Kk6kDe*=|hPLzz2<*EzM|`i+#kd^P4-a*}~aV39hCM zBNh7|_*Vz|MR&SJ7hw7*{ggrnr&p(Jb1Kp!RxFgNDo^seZ|@(e9TAgNEGK+!E>$HS zHxJ~6|E^BD=xwD@f8{}a@|B}~;Wsp5k`IeJ&XKwb!&=nQlPVxW^n;c3U8}wE-gT~Z z^%r7I1-m1!WtH|^9?yVf{!l}Fe$T(uORn+dzT<0hfwKjx+bVNOeVT2n>Ys}H&?wlv zGWbQJ6t(}!*wgx7@rp!lQNE_4M7o9IhfDOyd@Zq=RdqzQj%|u)uRAAsw`yaW#pWtz zzrnQ2ez}X>isgR7`rF4Ow|%eMub8u}@u`{hh5?J=c4V<#)4FyWpF4$boZe85jLY{g z9I(eZ#suy7klPV0!A}|O6Rqw|d6GB93TRPP%&1*M^H9FrHM)E^QrL#k0gjX%K^hES zP4SRqH^07Cz!SR7+3EQ7+G2Y&>nE5oVO5k`_9ab3WfDv?IQRKkBixEBO8MhxY^C zT^fWNsSW>XslLd=eQb{;Z%xio@j(lww-$0pfxJTk4(m0^=sf zY#VqZ=57LPNO!~*Z+X0F|vNzO_Q`;j59>7}pRmvp_a#yDesT99kE$_Vce@j!b?^jpo= z6(`62yF6C~O<=r5)L(VqNbfgQO85DGM%;+^zQr#nYUcM)>l#kf z$0{CF`K55NU^J6%k!p$ZX&?6a53YAg&L6%cuKPn;c$stg>GlWDP|MO+{lp4TdSS~j z9F@z|SfYK#J+0k8t)F1ssdcY(ke2SWb>Bodi#zA>gJZn|s-TiOj~uK2&3`=y+(t5m z5AwKtA%#YzF+n4yFpO;!!QoKDK)NA~8NmrPG^bdY8Jn2m32SI(rUVm9)1V-8x@nNH z#TpBGu<;rba}YvO{R>rb5*`>B2=L*&Pzs$Yq{Q2o5Ve0z`lI)^jFfFx%k(WTCSnKR%L0eYOHC*RBKv5kUe_h;}9e*46-vj*&S- z;8dCru>J$>uV_6lPcPf`UKBPr%9zPwFlFx0?|X9o{!{^u#-#EgAW%jQ6A6@n1wFIU4Fa3*5`SsfqC*zpf576cVT;d7$|=7OD5ED;Df6R-e{%jWW-A)gV1#^cPepHC=~%H}a; zJn%RZ%)cS}@7O`Weqlmg>LAd+ zOn*H5M|NKxpCV*Jkkv;s137Z-uK+9x9<8o*eXa=&svJ07D7>H(r43I;|@wft( zkj3R#>vFgpQ1>gxU@8q1Qlj`&9y%7%`fA{truiG@9B4^pn}rAdCMA!`0ogbPpGC)o zu{c~lPNwot@;4?DK{n*W5q{Fj*E+Mrem*f6?B|rT_XhO zPd6+O%;g9_i^BAC4_JTM0fhen1!)nKy_5xLI*TuWB!yxH0|IKKtk-E=-Zp?64C$2- z!3VJb)QW6q&A$QwWHktYD3*}7@joX3|n4}*b`z4M`O!0dkk)0-g4Y7hVbD67+< diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-6_85234017c541394bb6d4b2878df2736e.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-7_58f2ab2fd15e1a6c212520eb8869498b.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 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 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb b/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdb deleted file mode 100644 index e69de29b..00000000 diff --git a/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx b/www/rmd/SD_report_cache/html/unnamed-chunk-9_fb5f377c64e6c0fedfb271b646c2783e.rdx deleted file mode 100644 index d80547eed06d527147adb9056172c9a3c1e51695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmb2|=3oE=w(bW>2?+^l35jWG32CfGk`d0%cS>|6BxbZ66cUi)h?vp9qRh4e8Sk7_lb_T&M6 Date: Thu, 7 Nov 2024 14:33:28 +0100 Subject: [PATCH 11/85] refactor: nolint in customized PKNCA_impute_method functions --- R/PKNCA_impute_method_additions.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index 692ebf21..cde52d76 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -1,4 +1,4 @@ -PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { +PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { # nolint ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start if (!any(mask_start)) { @@ -13,7 +13,7 @@ PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = ret } -PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { +PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { # nolint ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start if (!any(mask_start)) { From 43d9f9e25a3dfc7d96aec5c4f589e2e7d4622f44 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 7 Nov 2024 14:34:30 +0100 Subject: [PATCH 12/85] wordlist: add PKNCA_impute_method functions --- inst/WORDLIST.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 inst/WORDLIST.txt diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt new file mode 100644 index 00000000..3f2be47f --- /dev/null +++ b/inst/WORDLIST.txt @@ -0,0 +1,42 @@ +ADNCA +ADPP +AFRLT +AUClast +AVAL +BLQ +Bärtschi +CDISC +DOSEA +DOSNO +EVID +IQROUTE +NCA +PCSPEC +PKNCA +Pharmacokinetic +Pre +RO +RStudio +STUDYID +USUBJID +USUBJIDs +analyte +analytes +anonymized +anonymizes +cmax +csv +ggplot +nca +pharmacokinetic +pknca +plotly +pptest +pre +sas +summarization +timepoint +visualizable +xpt +PKNCA_impute_method_start_log +PKNCA_impute_method_start_c1 \ No newline at end of file From 429a1e61408a5374e2e473490dea9b0602f0c154 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 7 Nov 2024 14:38:39 +0100 Subject: [PATCH 13/85] documentation: functions in R/PKNCA_impute_method_additions.R --- R/PKNCA_impute_method_additions.R | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index cde52d76..d6c450ae 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -1,3 +1,22 @@ +#' This function imputes the start concentration using the log slope method. +#' +#' @param conc Numeric vector of concentrations. +#' @param time Numeric vector of times corresponding to the concentrations. +#' @param start Numeric value indicating the start/dose time. +#' @param end Numeric value indicating the end time. +#' @param ... Additional arguments (currently not used). +#' @param options List of options (currently not used). +#' +#' @return A data frame with imputed start concentration. +#' @export +#' +#' @examples +#' conc <- c(1, 2, 3, 4, 5) +#' time <- c(0, 1, 2, 3, 4) +#' start <- 0 +#' end <- 4 +#' PKNCA_impute_method_start_log(conc, time, start, end) + PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { # nolint ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start @@ -13,6 +32,24 @@ PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = ret } +#' This function imputes the start concentration using the first concentration after dose +#' +#' @param conc Numeric vector of concentrations. +#' @param time Numeric vector of times corresponding to the concentrations. +#' @param start Numeric value indicating the start/dose time. +#' @param end Numeric value indicating the end time. +#' @param ... Additional arguments (currently not used). +#' @param options List of options (currently not used). +#' +#' @return A data frame with imputed start concentration. +#' @export +#' +#' @examples +#' conc <- c(1, 2, 3, 4, 5) +#' time <- c(0, 1, 2, 3, 4) +#' start <- 0 +#' end <- 4 +#' PKNCA_impute_method_start_c1(conc, time, start, end) PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { # nolint ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start From cb1ee9c65b8068c58fbf8ebfb5f79a911bb6823e Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 8 Nov 2024 14:48:18 +0100 Subject: [PATCH 14/85] feature: c0 input & when no checked use as interval start 1st observation --- R/format_data.R | 57 ++++++++++++++++++++++++------------------- inst/shiny/tabs/nca.R | 23 +++++++++++------ inst/shiny/ui.R | 9 +++++++ 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 5511c639..4f95bd96 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -24,13 +24,13 @@ #Format data for pknca format_data <- function(datafile) { - datafile = datafile %>% - mutate(AVAL = as.numeric(ifelse(AVAL %in% - c('BLQ', 'Negative', 'negative', 'NEGATIVE'), + datafile <- datafile %>% + dplyr::mutate(AVAL = as.numeric(ifelse(AVAL %in% + c("BLQ", "Negative", "negative", "NEGATIVE"), 0, AVAL)) - )%>% - mutate(TIME = ifelse(DOSNO == 1, AFRLT, TIME)) - + )%>% + dplyr::mutate(TIME = ifelse(DOSNO == 1, AFRLT, TIME)) + return(datafile) } @@ -64,16 +64,19 @@ format_data <- function(datafile) { #' @export #create pknca concentration dataset -create_conc <- function(ADNCA, analyte, group_columns, time_column='AFRLT') { - data <- ADNCA %>% - filter(ANALYTE == analyte, - if ('EVID' %in% names(ADNCA)) EVID == 0 else T) %>% - mutate(conc_groups = interaction(!!!syms(group_columns), sep = '\n')) %>% - arrange(!!sym(time_column)) %>% - mutate(TIME = !!sym(time_column)) %>% - group_by(!!!syms(group_columns)) %>% - mutate(IX = 1:n()) %>% - ungroup() +create_conc <- function(ADNCA, + analyte, + group_columns, + time_column="AFRLT") { + data <- ADNCA %>% + dplyr::filter(ANALYTE == analyte, + if ("EVID" %in% names(ADNCA)) EVID == 0 else TRUE) %>% + dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% + dplyr::arrange(!!sym(time_column)) %>% + dplyr::mutate(TIME = !!sym(time_column)) %>% + dplyr::group_by(!!!syms(group_columns)) %>% + dplyr::mutate(IX = 1:n()) %>% + dplyr::ungroup() } #' Create PK Dose Dataset @@ -102,14 +105,18 @@ create_conc <- function(ADNCA, analyte, group_columns, time_column='AFRLT') { #' @import dplyr #' @export -create_dose <- function(df_conc, group_columns, time_column = "AFRLT", relative_time0_column = "ARRLT") { - +create_dose <- function(df_conc, + group_columns, + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + make_intervals_st_from_dose = TRUE) { + df_conc %>% - arrange(!!sym(time_column)) %>% - group_by(!!!syms(group_columns)) %>% - slice(1) %>% - ungroup() %>% - mutate(TIME = !!sym(time_column) - !!sym(relative_time0_column)) + dplyr::mutate(TIME = if (make_intervals_st_from_dose) { + !!sym(time_column) - !!sym(since_lastdose_time_column) + } else !!sym(time_column)) %>% + dplyr::filter(TIME >= 0) %>% + dplyr::group_by(!!!syms(group_columns)) %>% + dplyr::slice(1) %>% + dplyr::ungroup() } - - diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 6ebe1f11..81ae19dd 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -13,6 +13,7 @@ # In this tab we select the analyte to be analyzed or can upload settings # Update analyte selection input based on the data + observeEvent(data(), { updateSelectInput( session, @@ -40,6 +41,7 @@ observeEvent(input$settings_upload, { type = "error" ) } + # Compare the dataset with settings for inclusions and exclusions new_data <- data() %>% filter( @@ -88,7 +90,7 @@ observeEvent(input$settings_upload, { choices = data()$ANALYTE[1], selected = setts$ANALYTE[1] ) - + # Dose number updateSelectInput( session, @@ -190,10 +192,16 @@ observeEvent(input$submit_analyte, priority = 2, { time_column <- "AFRLT" # Segregate the data into concentration and dose records - df_conc <- create_conc(data(), input$analyte, c(group_columns, usubjid_column), + df_conc <- create_conc(ADNCA = data(), + analyte = input$analyte, + group_columns = c(group_columns, usubjid_column), time_column = time_column) - df_dose <- create_dose(df_conc, group_columns = c(group_columns, usubjid_column), - time_column = time_column, relative_time0_column = "ARRLT") + + df_dose <- create_dose(df_conc = df_conc, + group_columns = c(group_columns, usubjid_column), + time_column = time_column, + since_lastdose_time_column = "ARRLT", + make_intervals_st_from_dose = input$should_impute_c0) # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -229,7 +237,6 @@ observeEvent(input$submit_analyte, priority = 2, { timeu = myconc$data$RRLTU[1] ) ) - mydata(mydata) }) @@ -299,7 +306,7 @@ observe({ # Choose dosenumbers to be analyzed observeEvent(input$submit_analyte, priority = -1, { - print(mydata()) + req(mydata()) updateSelectInput( session, @@ -380,7 +387,7 @@ observeEvent(input$nca, { rv$trigger <- rv$trigger + 1 updateTabsetPanel(session, "ncapanel", selected = "Results") } - + # Update profiles per patient considering the profiles selected mydataconc_new <- mydata()$conc$data %>% filter(DOSNO %in% input$cyclenca) profiles_per_patient(tapply(mydataconc_new$DOSNO, mydataconc_new$USUBJID, unique)) @@ -433,7 +440,7 @@ res_nca <- eventReactive(rv$trigger, { ) # Perform C0 imputations for the relevant parameters - if (input$impute_c0) { + if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) } diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index e37595b9..ce97a823 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -44,9 +44,18 @@ fluidPage( buttonLabel = list(icon("folder"), "Browse"), accept = c(".csv", ".xpt") ), + br(), + # Selection of analyte selectInput("analyte", "Choose the analyte :", choices = NULL), br(), + + # Only for relevant parameter calculation in NCA, it won't be at the actual data + h4("Data imputation"), + checkboxInput(inputId = "should_impute_c0", + label = "Impute C0 when missing", + value = TRUE), + actionButton("submit_analyte", "Submit"), DTOutput("datatable"), ), From 86102f142bc27ffae2c9dfd13fb7f9c15d2e86fb Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 11 Nov 2024 14:58:51 +0100 Subject: [PATCH 15/85] bug: solved PKNCA warnings "No concentration data" --- inst/shiny/tabs/nca.R | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 81ae19dd..b886424a 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -190,11 +190,13 @@ observeEvent(input$submit_analyte, priority = 2, { group_columns <- intersect(colnames(data()), c("STUDYID", "PCSPEC", "DOSNO", "ROUTE", "DRUG")) usubjid_column <- "USUBJID" time_column <- "AFRLT" - + route_column <- "ROUTE" + analyte_column <- "ANALYTE" + # Segregate the data into concentration and dose records df_conc <- create_conc(ADNCA = data(), analyte = input$analyte, - group_columns = c(group_columns, usubjid_column), + group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) df_dose <- create_dose(df_conc = df_conc, @@ -212,15 +214,15 @@ observeEvent(input$submit_analyte, priority = 2, { # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, - formula = AVAL ~ TIME | STUDYID + ROUTE + PCSPEC + DRUG + USUBJID / ANALYTE, + formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) mydose <- PKNCA::PKNCAdose( data = df_dose, - formula = DOSEA ~ TIME | STUDYID + ROUTE + PCSPEC + DRUG + USUBJID + DOSNO, - route = tolower(df_dose$ROUTE), + formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID + DOSNO, + route = route_column, time.nominal = "NFRLT", duration = "ADOSEDUR" ) @@ -420,7 +422,13 @@ res_nca <- eventReactive(rv$trigger, { mydata$conc$data <- mydata$conc$data %>% filter(DOSNO %in% as.numeric(input$cyclenca)) - + + mydata$dose$data <- mydata$dose$data %>% + filter(DOSNO %in% as.numeric(input$cyclenca)) + + mydata$intervals <- mydata$intervals %>% + filter(DOSNO %in% as.numeric(input$cyclenca)) + # Include manually the calculation of AUCpext.obs and AUCpext.pred mydata$intervals <- mydata$intervals %>% mutate(aucinf.obs.dn = TRUE, From 45e1e525ca9b64449251691aa6378df355ca7f68 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 11 Nov 2024 14:59:32 +0100 Subject: [PATCH 16/85] bug: solved issue of duplicated tmax in results --- R/create_c0_impute_column.R | 20 +++++++++++++------- R/reshape_PKNCA_results.R | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index f67462ad..1bccf237 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -1,7 +1,9 @@ create_c0_impute <- function(mydata) { # Define group columns - group_columns <- unname(unlist(mydata$dose$columns$groups)) + group_columns <- unique(c(unname(unlist(mydata$conc$columns$groups)), + unname(unlist(mydata$dose$columns$groups)))) + route_column <- mydata$dose$columns$route conc_column <- mydata$conc$columns$conc time_column <- mydata$conc$columns$time common_cols <- intersect(unlist(mydata$conc$columns$groups), @@ -9,15 +11,16 @@ create_c0_impute <- function(mydata) { mydata_conc <- merge( x = mydata$conc$data, - y = mydata$dose$data[, common_cols] %>% + y = mydata$dose$data[, group_columns] %>% dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) ) # Define parameters that need to include c0 imputations all_params <- suppressWarnings(apply(mydata$intervals, MARGIN = 2, function(col) any(col))) all_params <- names(all_params[!is.na(all_params) & all_params]) - params_c0 <- setdiff(all_params, c("half.life", "cmax", "tmax", "cmax.dn", - "ctrough", "min.hl.points", "min.hl.r.squared")) + params_noc0 <- c("half.life", "cmax", "tmax", "cmax.dn", + "ctrough", "min.hl.points", "min.hl.r.squared") + params_c0 <- setdiff(all_params, params_noc0) # Process c0_rows and assign c0 imputation strategy c0_rows <- mydata_conc %>% @@ -53,16 +56,19 @@ create_c0_impute <- function(mydata) { ) %>% select(any_of(c(group_columns, "impute"))) + new_intervals <- mydata$intervals %>% dplyr::mutate(across(all_of(all_params), ~FALSE)) + # Update mydata$intervals mydata$intervals <- rbind( mydata$intervals %>% mutate(across(all_of(params_c0), ~ FALSE)) %>% - mutate(impute = NA), + mutate(impute = NA) %>% + dplyr::filter(end == Inf), mydata$intervals %>% left_join(c0_rows, by = group_columns) %>% - mutate(across(all_of(params_c0), ~ TRUE)) + mutate(across(any_of(params_noc0), ~ FALSE)) ) return(mydata) -} +} \ No newline at end of file diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 04c51fbd..4ba4198f 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -16,7 +16,6 @@ #' @export #' reshape_pknca_results <- function(res_nca) { - print("FUNCTION STARTS reshape_pknca_results") # Get all names with units and make a dictionary structure dict_pttestcd_with_units <- res_nca$result %>% @@ -27,11 +26,13 @@ reshape_pknca_results <- function(res_nca) { # Filter out infinite AUCs and pivot the data to incorporate # the parameters into columns with their units infinite_aucs_vals <- res_nca$result %>% + unique() %>% filter(end == Inf) %>% select(-PPORRESU, -exclude) %>% pivot_wider(names_from = PPTESTCD, values_from = PPORRES) infinite_aucs_exclude <- res_nca$result %>% + unique() %>% filter(end == Inf) %>% select(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, PPTESTCD, exclude) %>% mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% From 2bab21b2652c718b0bb9e085ef0def495cba8f9a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 12 Nov 2024 09:59:20 +0100 Subject: [PATCH 17/85] refactor: NCA results with all dose and conc columns first --- inst/shiny/tabs/nca.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index b886424a..5c1cdb6f 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -509,7 +509,9 @@ observeEvent(res_nca(), { )) # Sort alphabetically all columns but the grouping and the exclude columns - group_cols <- c(unname(unlist(res_nca()$data$conc$columns$groups)), "start", "end") + group_cols <- c(unname(unique(c(unlist(res_nca()$data$conc$columns$groups), + unlist(res_nca()$data$dose$columns$groups)) + )), "start", "end") exclude_cols <- names(final_res_nca)[startsWith(names(final_res_nca), "exclude.")] final_res_nca <- final_res_nca[, c( group_cols, From a622e61b9355948b697f8c7d7e80d9ea101cc02a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 13 Nov 2024 14:27:57 +0100 Subject: [PATCH 18/85] bug: fixed impute_method_start_c1 unneded argument issue --- R/PKNCA_impute_method_additions.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index d6c450ae..d7b226e9 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -18,6 +18,7 @@ #' PKNCA_impute_method_start_log(conc, time, start, end) PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { # nolint + ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start if (!any(mask_start)) { @@ -57,7 +58,7 @@ PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = all_concs <- conc[time >= start & time <= end] all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { - c1 <- all_concs[which.min(all_times, na.rm = TRUE)] + c1 <- all_concs[which.min(all_times)] ret <- rbind(ret, data.frame(time = start, conc = c1)) ret <- ret[order(ret$time), ] } From c345c9b1a50156dd87b3dc414bfb20a226d914aa Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 14 Nov 2024 17:03:22 +0100 Subject: [PATCH 19/85] refactor: delete unused functions in reshape --- R/reshape_PKNCA_results.R | 104 +------------------------------------- 1 file changed, 1 insertion(+), 103 deletions(-) diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 4ba4198f..6bd3dd2f 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -101,106 +101,4 @@ reshape_pknca_results <- function(res_nca) { ungroup() return(reshaped_results) -} - - - - -add_lambda_details <- function(conc_data, infinite_aucs) { - result <- conc_data %>% - merge(infinite_aucs) %>% - group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% - arrange(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, IX) %>% - # Deduce if the user performed an exclusion/selection - # to indicate if the slope is manually selected - mutate( - lambda_z_method = ifelse(any(is.excluded.hl) | any(is.included.hl), "Manual", "Best slope") - ) %>% - # Filter out the rows that do not have relation with - # lambda calculation (when calculated) and derive the IX - filter(!exclude_half.life | is.na(lambda.z.time.first) | is.na(lambda.z.n.points)) %>% - filter(TIME >= (lambda.z.time.first + start) | is.na(lambda.z.time.first)) %>% - filter(n() <= lambda.z.n.points | is.na(lambda.z.n.points)) %>% - mutate(lambda_z_ix = paste0(IX, collapse = ",")) %>% - mutate(lambda_z_ix = ifelse(is.na(lambda.z), NA, lambda_z_ix)) %>% - slice(1) %>% - select(any_of(c(names(infinite_aucs), "lambda_z_method", "lambda_z_ix"))) - - return(result) -} - -add_lambda_details <- function(conc_data = res_nca$data$conc$data, infinite_aucs) { - # Merge the datasets - merged_data <- conc_data %>% - merge(infinite_aucs) - - # Identify unique intervals from the column names - intervals <- unique(gsub( - ".*_(\\d+-\\d+)$", - "\\1", - grep("_\\d+-\\d+$", names(infinite_aucs), value = TRUE) - )) - - if (length(intervals) == 0) intervals <- c("") - - # Initialize an empty list to store results for each interval - results_list <- list() - - for (interval in intervals) { - interval_suffix <- if (interval == "") "" else paste0("_", interval) - - result <- merged_data %>% - group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% - arrange(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, IX) %>% - # Deduce if the user performed an exclusion/selection to - # indicate if the slope is manually selected - mutate( - !!paste0("lambda_z_method", interval_suffix) := ifelse( - any(get(paste0("is.excluded.hl", interval_suffix))) | - any(get(paste0("is.included.hl", interval_suffix))), - "Manual", - "Best slope" - ) - ) %>% - # Filter out the rows that do not have relation with - # lambda calculation (when calculated) and derive the IX - filter( - !get(paste0("exclude_half.life", interval_suffix)) | - is.na(get(paste0("lambda.z.time.first", interval_suffix))) | - is.na(get(paste0("lambda.z.n.points", interval_suffix))) - ) %>% - filter( - TIME >= (get(paste0("lambda.z.time.first", interval_suffix)) + start) | - is.na(get(paste0("lambda.z.time.first", interval_suffix))) - ) %>% - filter( - n() <= get(paste0("lambda.z.n.points", interval_suffix)) | - is.na(get(paste0("lambda.z.n.points", interval_suffix))) - ) %>% - mutate(!!paste0("lambda_z_ix", interval_suffix) := paste0(IX, collapse = ",")) %>% - mutate( - !!paste0("lambda_z_ix", interval_suffix) := ifelse( - is.na(get(paste0("lambda.z", interval_suffix))), - NA, - get(paste0("lambda_z_ix", interval_suffix)) - ) - ) %>% - slice(1) %>% - select(any_of(c( - names(infinite_aucs), - paste0("lambda_z_method", interval_suffix), - paste0("lambda_z_ix", interval_suffix) - ))) - - results_list[[interval]] <- result - } - - # Combine results for all intervals - combined_result <- reduce( - results_list, - full_join, - by = c("STUDYID", "PCSPEC", "ANALYTE", "USUBJID", "DOSNO") - ) - - return(combined_result) -} +} \ No newline at end of file From 769b80d3e4962b2741166137621b2ca4c8738143 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 14 Nov 2024 17:09:47 +0100 Subject: [PATCH 20/85] refactor: input selectors for analyte and dosno put together in UI and renamed (select_X) --- R/format_data.R | 12 ++++------ inst/shiny/tabs/nca.R | 49 +++++++++++++++++---------------------- inst/shiny/tabs/outputs.R | 22 +++++++++--------- inst/shiny/ui.R | 12 ++++------ 4 files changed, 41 insertions(+), 54 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 4f95bd96..777f0777 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -65,12 +65,9 @@ format_data <- function(datafile) { #create pknca concentration dataset create_conc <- function(ADNCA, - analyte, group_columns, time_column="AFRLT") { data <- ADNCA %>% - dplyr::filter(ANALYTE == analyte, - if ("EVID" %in% names(ADNCA)) EVID == 0 else TRUE) %>% dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% dplyr::arrange(!!sym(time_column)) %>% dplyr::mutate(TIME = !!sym(time_column)) %>% @@ -108,13 +105,12 @@ create_conc <- function(ADNCA, create_dose <- function(df_conc, group_columns, time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - make_intervals_st_from_dose = TRUE) { + since_lastdose_time_column = "ARRLT") { df_conc %>% - dplyr::mutate(TIME = if (make_intervals_st_from_dose) { - !!sym(time_column) - !!sym(since_lastdose_time_column) - } else !!sym(time_column)) %>% + dplyr::mutate(TIME.dose = !!sym(time_column) - !!sym(since_lastdose_time_column), + TIME = !!sym(time_column) + ) %>% dplyr::filter(TIME >= 0) %>% dplyr::group_by(!!!syms(group_columns)) %>% dplyr::slice(1) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 5c1cdb6f..e4e647fd 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -17,7 +17,7 @@ observeEvent(data(), { updateSelectInput( session, - inputId = "analyte", + inputId = "select_analyte", label = "Choose the analyte :", choices = unique(data()$ANALYTE) ) @@ -94,7 +94,7 @@ observeEvent(input$settings_upload, { # Dose number updateSelectInput( session, - inputId = "cyclenca", + inputId = "select_dosno", label = "Choose the Dose Number:", choices = sort(unique(data() %>% filter(ANALYTE == setts$ANALYTE[1]) %>% pull(DOSNO))), selected = doses_selected @@ -193,17 +193,21 @@ observeEvent(input$submit_analyte, priority = 2, { route_column <- "ROUTE" analyte_column <- "ANALYTE" + # Filter data based on selected analyte and dose numbers + data_filt <- data() %>% + dplyr::filter(!!sym(analyte_column) == input$select_analyte, + DOSNO %in% input$select_dosno, + if ("EVID" %in% names(data())) EVID == 0 else TRUE) + # Segregate the data into concentration and dose records - df_conc <- create_conc(ADNCA = data(), - analyte = input$analyte, + df_conc <- create_conc(ADNCA = data_filt, group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) df_dose <- create_dose(df_conc = df_conc, group_columns = c(group_columns, usubjid_column), time_column = time_column, - since_lastdose_time_column = "ARRLT", - make_intervals_st_from_dose = input$should_impute_c0) + since_lastdose_time_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -307,14 +311,12 @@ observe({ # Choose dosenumbers to be analyzed -observeEvent(input$submit_analyte, priority = -1, { - - req(mydata()) +observeEvent(input$select_analyte, priority = -1, { updateSelectInput( session, - inputId = "cyclenca", + inputId = "select_dosno", label = "Choose the Dose Number:", - choices = unique(mydata()$conc$data %>% filter(ANALYTE == input$analyte) %>% pull(DOSNO)) + choices = unique(data() %>% filter(ANALYTE == input$select_analyte) %>% pull(DOSNO)) ) }) @@ -377,7 +379,7 @@ observeEvent(input$nca, { } # Make the user aware if it forgot to select at least 1 DOSNO - if (is.null(input$cyclenca)) { + if (is.null(input$select_dosno)) { showNotification( "Please select a profile from the 'Settings' tab to proceed.", duration = NULL, @@ -391,14 +393,14 @@ observeEvent(input$nca, { } # Update profiles per patient considering the profiles selected - mydataconc_new <- mydata()$conc$data %>% filter(DOSNO %in% input$cyclenca) + mydataconc_new <- mydata()$conc$data %>% filter(DOSNO %in% input$select_dosno) profiles_per_patient(tapply(mydataconc_new$DOSNO, mydataconc_new$USUBJID, unique)) }) # run the nca upon button click res_nca <- eventReactive(rv$trigger, { - req(!is.null(input$cyclenca)) + req(!is.null(input$select_dosno)) withProgress(message = "Calculating NCA...", value = 0, { req(mydata()) @@ -417,17 +419,8 @@ res_nca <- eventReactive(rv$trigger, { min.hl.points = 3 ) - # Filter the data based on the selected profiles + # Load mydata reactive mydata <- mydata() - - mydata$conc$data <- mydata$conc$data %>% - filter(DOSNO %in% as.numeric(input$cyclenca)) - - mydata$dose$data <- mydata$dose$data %>% - filter(DOSNO %in% as.numeric(input$cyclenca)) - - mydata$intervals <- mydata$intervals %>% - filter(DOSNO %in% as.numeric(input$cyclenca)) # Include manually the calculation of AUCpext.obs and AUCpext.pred mydata$intervals <- mydata$intervals %>% @@ -639,10 +632,10 @@ output$settings_save <- downloadHandler( # Include the rule settings as additional columns setts <- setts_lambda %>% mutate( - ANALYTE = input$analyte, + ANALYTE = input$select_analyte, doses_selected = ifelse( - !is.null(input$cyclenca), - paste0(input$cyclenca, collapse = ","), + !is.null(input$select_dosno), + paste0(input$select_dosno, collapse = ","), unique(mydata()$conc$data$DOSNO) ), method = input$method, @@ -1060,7 +1053,7 @@ observeEvent(list(input$nca, input$search_patient), { patient_profile_plotids( mydata()$conc$data %>% filter( - DOSNO %in% input$cyclenca, + DOSNO %in% input$select_dosno, USUBJID %in% search_patient ) %>% select(USUBJID, DOSNO) %>% diff --git a/inst/shiny/tabs/outputs.R b/inst/shiny/tabs/outputs.R index 7b7b4647..be1c4b9d 100644 --- a/inst/shiny/tabs/outputs.R +++ b/inst/shiny/tabs/outputs.R @@ -124,7 +124,7 @@ output$selectidvar <- renderUI({ # select the cycle to plot the mean concentrations output$cyclemean <- renderUI({ y <- data() %>% - filter(ANALYTE %in% input$analytemean) %>% + filter(ANALYTE %in% input$select_analytemean) %>% pull(DOSNO) %>% unique() selectInput("cyclesmean", "Choose the cycle:", choices = sort(y)) @@ -133,7 +133,7 @@ output$cyclemean <- renderUI({ # render the meanplot output in plotly output$meanplot <- renderPlotly({ req(input$studyidmean) - req(input$analytemean) + req(input$select_analytemean) req(input$cyclesmean) validate( @@ -141,7 +141,7 @@ output$meanplot <- renderPlotly({ data() %>% filter( STUDYID %in% input$studyidmean, - ANALYTE %in% input$analytemean, + ANALYTE %in% input$select_analytemean, DOSNO %in% input$cyclesmean, if ("EVID" %in% names(data)) EVID == 0 else TRUE, NRRLT > 0 @@ -157,7 +157,7 @@ output$meanplot <- renderPlotly({ general_meanplot(data = data(), selected_studyids = input$studyidmean, - selected_analytes = input$analytemean, + selected_analytes = input$select_analytemean, selected_cycles = input$cyclesmean, id_variable = input$selectidvar, plot_ylog = input$logmeanplot, @@ -247,8 +247,8 @@ output$descriptivestats2 <- DT::renderDataTable({ mean_data <- reactive({ data() %>% # mydata()$conc$data %>% filter( - ANALYTE == input$analyte, - DOSNO %in% input$cyclenca + ANALYTE == input$select_analyte, + DOSNO %in% input$select_dosno ) %>% mutate( DOSEA = as.factor(DOSEA), @@ -269,8 +269,8 @@ mean_data <- reactive({ doseescalation_meanplot <- function() { dataset <- mydata()$conc$data %>% filter( - ANALYTE == input$analyte, - DOSNO %in% input$cyclenca + ANALYTE == input$select_analyte, + DOSNO %in% input$select_dosno ) time_label <- paste0("Nominal Time [", unique(dataset$RRLTU), "]") @@ -300,12 +300,12 @@ output$mean_concovertimelog <- renderPlotly( # TAB Dose Norm Conc over Time Plots ---- plot_data <- reactive({ - req(input$analyte) + req(input$select_analyte) data() %>% filter( - ANALYTE == input$analyte, - DOSNO %in% input$cyclenca + ANALYTE == input$select_analyte, + DOSNO %in% input$select_dosno ) %>% select( AFRLT, AVAL, DOSEA, DOSNO, AFRLT, NFRLT, NRRLT, USUBJID, ANALYTE, STUDYID, AVALU, diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index ce97a823..7d960c0e 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -47,7 +47,11 @@ fluidPage( br(), # Selection of analyte - selectInput("analyte", "Choose the analyte :", choices = NULL), + selectInput("select_analyte", "Choose the analyte :", choices = NULL), + selectInput("select_dosno", "Choose the Dose Number:", + multiple = TRUE, + choices = c("Please specify ANALYTE in Data Selection" = "") + ), br(), # Only for relevant parameter calculation in NCA, it won't be at the actual data @@ -60,12 +64,6 @@ fluidPage( DTOutput("datatable"), ), tabPanel("Settings", - selectInput( - "cyclenca", - "Choose the Dose Number:", - multiple = TRUE, - choices = c("Please specify ANALYTE in Data Selection" = "") - ), selectInput( "method", "Extrapolation Method:", From 79d4da420a187e184a11af15fbc9972afcff7d21 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 15 Nov 2024 14:18:50 +0100 Subject: [PATCH 21/85] refactor: change strategy for input of AUC intervals --- R/partial_auc_input.R | 30 ++++++++++++++++++++++++++++++ inst/shiny/tabs/nca.R | 8 ++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 R/partial_auc_input.R diff --git a/R/partial_auc_input.R b/R/partial_auc_input.R new file mode 100644 index 00000000..3de6b95f --- /dev/null +++ b/R/partial_auc_input.R @@ -0,0 +1,30 @@ +#' Define the UI for a single partial AUC input +#' +#' @param id A unique identifier for the input. +#' @param min_sel_value The default minimum value for the input. +#' @param max_sel_value The default maximum value for the input. +#' +#' @return A Shiny UI component for creating a partial AUC input. +#' +#' + +partial_auc_input <- function(id, min_sel_value = 0, max_sel_value = NULL) { + fluidRow( + id = id, + column( + width = 2, shinyWidgets::sliderTextInput(inputId = "rangeInput_", + label = "Interval range", + choices = c(0, "C1", 1:100, "Cn", Inf), + selected = c("C1", Inf), + dragRange = TRUE) + ), + column( + width = 2, shinyWidgets::pickerInput(paste0("timeInputParam_", id), "Parameters:", + choices = sort(setdiff(names(PKNCA::PKNCA.options()$single.dose.aucs), + c("start", "end"))), + options = list(maxItems = NULL), + multiple = TRUE) + ) + ) +} + diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index e4e647fd..48003138 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -348,12 +348,17 @@ observeEvent(input$nca, { req(mydata()) # If there are intervals defined, update the intervals_userinput reactive value if (input$AUCoptions && auc_counter() > 0) { + #browser() # Collect all inputs for the AUC intervals input_names_aucmin <- grep("^timeInputMin_", names(input), value = TRUE) input_names_aucmax <- grep("^timeInputMax_", names(input), value = TRUE) - + input_names_params <- grep("^timeInputParam_", names(input), value = TRUE) + auc_mins <- unlist(lapply(input_names_aucmin, function(name) input[[name]])) auc_maxs <- unlist(lapply(input_names_aucmax, function(name) input[[name]])) + auc_params <- lapply(input_names_params, function(name) input[[name]]) + + c1_intervals <- mydata()$intervals # Define the intervals specified by the user intervals_userinput_data( @@ -364,7 +369,6 @@ observeEvent(input$nca, { # Use the base intervals dataset settings as a reference and cross it with the inputs intervals_userinput <- mydata()$intervals %>% - filter(end == Inf) %>% group_by(STUDYID, ANALYTE, USUBJID, DOSNO) %>% slice(1) %>% ungroup() %>% From 768b97290fb3824125d1ebf564270d5ae87677ca Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 15 Nov 2024 17:44:01 +0100 Subject: [PATCH 22/85] bug: fixed new intervals strategy and align with PKNCA running --- inst/shiny/functions/partial_auc_input.R | 12 +++- inst/shiny/tabs/nca.R | 89 +++++++++++------------- 2 files changed, 49 insertions(+), 52 deletions(-) diff --git a/inst/shiny/functions/partial_auc_input.R b/inst/shiny/functions/partial_auc_input.R index 30c0d132..86612717 100644 --- a/inst/shiny/functions/partial_auc_input.R +++ b/inst/shiny/functions/partial_auc_input.R @@ -12,10 +12,18 @@ partial_auc_input <- function(id, min_sel_value = 0, max_sel_value = NULL) { fluidRow( id = id, column( - width = 6, numericInput(paste0("timeInputMin_", id), "Min:", min = 0, value = min_sel_value) + width = 2, shinyWidgets::sliderTextInput(inputId = paste0("RangeInput_", id), + label = "Interval range", + choices = c(0, "C1", 1:100, "Cn", Inf), + selected = c("C1", Inf), + dragRange = TRUE) ), column( - width = 6, numericInput(paste0("timeInputMax_", id), "Max:", min = 0, value = max_sel_value) + width = 2, shinyWidgets::pickerInput(paste0("ParamInput_", id), "Parameters:", + choices = sort(setdiff(names(PKNCA::PKNCA.options()$single.dose.aucs), + c("start", "end"))), + options = list(maxItems = NULL), + multiple = TRUE) ) ) } diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 48003138..213aa5d1 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -184,6 +184,7 @@ observeEvent(input$settings_upload, { # When an analyte is selected and the user clicks the "Submit" button, # create the PKNCA data object mydata <- reactiveVal(NULL) +mydata_c1cn_intervals <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { # Define explicetely input columns until there are input definitions @@ -244,6 +245,7 @@ observeEvent(input$submit_analyte, priority = 2, { ) ) mydata(mydata) + mydata_c1cn_intervals(mydata$intervals %>% dplyr::filter(end != Inf)) }) # Display the PKNCA data object for the user (concentration records) @@ -312,17 +314,23 @@ observe({ # Choose dosenumbers to be analyzed observeEvent(input$select_analyte, priority = -1, { + doses_options <- data() %>% + filter(ANALYTE == input$select_analyte) %>% + pull(DOSNO) %>% + sort() %>% + unique() + updateSelectInput( session, inputId = "select_dosno", label = "Choose the Dose Number:", - choices = unique(data() %>% filter(ANALYTE == input$select_analyte) %>% pull(DOSNO)) + choices = doses_options, + selected = doses_options[1] ) }) # Partial AUC Selection auc_counter <- reactiveVal(0) # Initialize a counter for the number of partial AUC inputs -intervals_userinput_data <- reactiveVal(NULL) intervals_userinput <- reactiveVal(NULL) # Add a new partial AUC input @@ -346,40 +354,36 @@ rv <- reactiveValues(trigger = 0) # Update the trigger whenever either button is clicked observeEvent(input$nca, { req(mydata()) - # If there are intervals defined, update the intervals_userinput reactive value + + # Use the intervals defined by the user if so if (input$AUCoptions && auc_counter() > 0) { - #browser() + # Collect all inputs for the AUC intervals - input_names_aucmin <- grep("^timeInputMin_", names(input), value = TRUE) - input_names_aucmax <- grep("^timeInputMax_", names(input), value = TRUE) - input_names_params <- grep("^timeInputParam_", names(input), value = TRUE) + input_names_ranges <- grep("^RangeInput_", names(input), value = TRUE) + input_names_params <- grep("^ParamInput_.*[0-9]$", names(input), value = TRUE) - auc_mins <- unlist(lapply(input_names_aucmin, function(name) input[[name]])) - auc_maxs <- unlist(lapply(input_names_aucmax, function(name) input[[name]])) - auc_params <- lapply(input_names_params, function(name) input[[name]]) + starts <- unlist(lapply(input_names_ranges, function(name) input[[name]][1])) + ends <- unlist(lapply(input_names_ranges, function(name) input[[name]][2])) + params <- lapply(input_names_params, function(name) input[[name]]) - c1_intervals <- mydata()$intervals - - # Define the intervals specified by the user - intervals_userinput_data( - data.frame(start = auc_mins, end = auc_maxs) %>% - arrange(start, end) %>% - unique() - ) + # Define the time values at first (C1) and last (Cn) concentrations + c1 <- mydata_c1cn_intervals()$start + cn <- mydata_c1cn_intervals()$end + + # Make a list of dataframes with each of the intervals requested + intervals_list <- lapply(1:length(starts), function(i){ + mydata_c1cn_intervals() %>% + dplyr::mutate( + start = if (starts[i] == "C1") c1 else if (starts[i] == "Cn") cn else as.numeric(starts[i]), + end = if (ends[i] == "C1") c1 else if (ends[i] == "Cn") cn else as.numeric(ends[i]) + ) %>% + # only TRUE for columns specified in params + mutate(across(where(is.logical), ~FALSE)) %>% + mutate(across(params[[i]], ~TRUE)) + }) - # Use the base intervals dataset settings as a reference and cross it with the inputs - intervals_userinput <- mydata()$intervals %>% - group_by(STUDYID, ANALYTE, USUBJID, DOSNO) %>% - slice(1) %>% - ungroup() %>% - select(-start) %>% - select(-end) %>% - crossing(intervals_userinput_data()) %>% - # all dataframe columns equal false except - # aucint.last (without knowing the other column names) - mutate(auclast = FALSE, aucint.last = TRUE, aucinf.obs = FALSE) - # Return the output - intervals_userinput(intervals_userinput) + # Save intervals as a dataframe + intervals_userinput(intervals_list) } # Make the user aware if it forgot to select at least 1 DOSNO @@ -426,32 +430,17 @@ res_nca <- eventReactive(rv$trigger, { # Load mydata reactive mydata <- mydata() - # Include manually the calculation of AUCpext.obs and AUCpext.pred - mydata$intervals <- mydata$intervals %>% - mutate(aucinf.obs.dn = TRUE, - cmax.dn = TRUE, - cav = TRUE, - ctrough = TRUE, - vss.iv.obs = TRUE, - cl.obs = TRUE, - cl.pred = TRUE, - f = if (length(unique(mydata$conc$data$ROUTE)) > 1) TRUE else FALSE, - vz.obs = TRUE) %>% - # If so, include the AUC intervals defined by the user - rbind(intervals_userinput()) %>% - mutate( - aucpext.obs = TRUE, - aucpext.pred = TRUE - ) + # Include manual intervals if specified by the user + if (!is.null(intervals_userinput())) mydata$intervals <- bind_rows(intervals_userinput()) - # Perform C0 imputations for the relevant parameters + # Perform C0 imputations if specified by the user if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) } # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) - + browser() # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") From bf8844bba3b5ca50a28c82bc3352bb6a72ef3f66 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 21 Nov 2024 16:39:26 +0100 Subject: [PATCH 23/85] revert feat: back to old UI function for AUC intervals --- R/partial_auc_input.R | 13 ++----------- inst/shiny/functions/partial_auc_input.R | 12 ++---------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/R/partial_auc_input.R b/R/partial_auc_input.R index 3de6b95f..30c0d132 100644 --- a/R/partial_auc_input.R +++ b/R/partial_auc_input.R @@ -12,19 +12,10 @@ partial_auc_input <- function(id, min_sel_value = 0, max_sel_value = NULL) { fluidRow( id = id, column( - width = 2, shinyWidgets::sliderTextInput(inputId = "rangeInput_", - label = "Interval range", - choices = c(0, "C1", 1:100, "Cn", Inf), - selected = c("C1", Inf), - dragRange = TRUE) + width = 6, numericInput(paste0("timeInputMin_", id), "Min:", min = 0, value = min_sel_value) ), column( - width = 2, shinyWidgets::pickerInput(paste0("timeInputParam_", id), "Parameters:", - choices = sort(setdiff(names(PKNCA::PKNCA.options()$single.dose.aucs), - c("start", "end"))), - options = list(maxItems = NULL), - multiple = TRUE) + width = 6, numericInput(paste0("timeInputMax_", id), "Max:", min = 0, value = max_sel_value) ) ) } - diff --git a/inst/shiny/functions/partial_auc_input.R b/inst/shiny/functions/partial_auc_input.R index 86612717..30c0d132 100644 --- a/inst/shiny/functions/partial_auc_input.R +++ b/inst/shiny/functions/partial_auc_input.R @@ -12,18 +12,10 @@ partial_auc_input <- function(id, min_sel_value = 0, max_sel_value = NULL) { fluidRow( id = id, column( - width = 2, shinyWidgets::sliderTextInput(inputId = paste0("RangeInput_", id), - label = "Interval range", - choices = c(0, "C1", 1:100, "Cn", Inf), - selected = c("C1", Inf), - dragRange = TRUE) + width = 6, numericInput(paste0("timeInputMin_", id), "Min:", min = 0, value = min_sel_value) ), column( - width = 2, shinyWidgets::pickerInput(paste0("ParamInput_", id), "Parameters:", - choices = sort(setdiff(names(PKNCA::PKNCA.options()$single.dose.aucs), - c("start", "end"))), - options = list(maxItems = NULL), - multiple = TRUE) + width = 6, numericInput(paste0("timeInputMax_", id), "Max:", min = 0, value = max_sel_value) ) ) } From 4411231c42106d8d50ecd1cb0f2503564dbfec90 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 22 Nov 2024 17:56:54 +0100 Subject: [PATCH 24/85] fix: interval default start since dose, aucint for manual intervals, adjust reshape for it --- R/create_c0_impute_column.R | 82 +++++++++++++++---------------------- R/format_data.R | 9 ++-- R/reshape_PKNCA_results.R | 32 +++++++-------- inst/shiny/tabs/nca.R | 55 ++++++++++++++----------- inst/shiny/ui.R | 11 ++--- 5 files changed, 90 insertions(+), 99 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index 1bccf237..cf027c59 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -1,74 +1,60 @@ create_c0_impute <- function(mydata) { - # Define group columns - group_columns <- unique(c(unname(unlist(mydata$conc$columns$groups)), - unname(unlist(mydata$dose$columns$groups)))) - route_column <- mydata$dose$columns$route + # Define columns conc_column <- mydata$conc$columns$conc time_column <- mydata$conc$columns$time - common_cols <- intersect(unlist(mydata$conc$columns$groups), - unlist(mydata$dose$columns$groups)) + analyte_column <- mydata$conc$columns$groups$group_analyte + route_column <- mydata$dose$columns$route + duration_column <- mydata$dose$columns$duration + drug_column <- "DRUG" # At some point should be added at least manually in PKNCA mydata object + group_columns <- unique(c(unname(unlist(mydata$conc$columns$groups)), + unname(unlist(mydata$dose$columns$groups)))) - mydata_conc <- merge( + mydata_with_int <- merge( x = mydata$conc$data, y = mydata$dose$data[, group_columns] %>% dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) - ) - - # Define parameters that need to include c0 imputations - all_params <- suppressWarnings(apply(mydata$intervals, MARGIN = 2, function(col) any(col))) - all_params <- names(all_params[!is.na(all_params) & all_params]) - params_noc0 <- c("half.life", "cmax", "tmax", "cmax.dn", - "ctrough", "min.hl.points", "min.hl.r.squared") - params_c0 <- setdiff(all_params, params_noc0) + ) %>% + merge(mydata$intervals) - # Process c0_rows and assign c0 imputation strategy - c0_rows <- mydata_conc %>% - group_by(across(all_of(group_columns))) %>% - arrange(across(all_of(c(group_columns, time_column)))) %>% + # Process imputation strategy based on each interval + new_intervals <- mydata_with_int %>% + group_by(across(all_of(c(group_columns, "start", "end")))) %>% + arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate( vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), - vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")"), - time_dose = !!sym(time_column) - ARRLT + vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")") ) %>% - ungroup() %>% - group_by(across(all_of(group_columns))) %>% + arrange(abs(!!sym(time_column) - start)) %>% slice(1) %>% ungroup() %>% mutate( impute = case_when( - AFRLT == 0 & !is.na(AVAL) ~ NA, + !!sym(time_column) == start & !is.na(!!sym(conc_column)) ~ NA, DOSNO == 1 & - (tolower(ROUTE) == "extravascular" | - ADOSEDUR > 0 | - ANALYTE != DRUG) ~ "start_conc0", + (tolower(!!sym(route_column)) == "extravascular" | + !!sym(duration_column) > 0 | + !!sym(analyte_column) != !!sym(drug_column)) ~ "start_conc0", DOSNO > 1 & - (tolower(ROUTE) == "extravascular" | - ADOSEDUR > 0 | - ANALYTE != DRUG) ~ "start_predose", - tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG & + (tolower(!!sym(route_column)) == "extravascular" | + !!sym(duration_column) > 0 | + !!sym(analyte_column) != !!sym(drug_column)) ~ "start_predose", + tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) & !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), time = eval(parse(text = vr_times)), time.dose = time_dose[1], method = "logslope")) ~ "start_logslope", - tolower(ROUTE) == "intravascular" & ADOSEDUR == 0 & ANALYTE == DRUG ~ "start_c1" + tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) ~ "start_c1" ) ) %>% - select(any_of(c(group_columns, "impute"))) - - new_intervals <- mydata$intervals %>% dplyr::mutate(across(all_of(all_params), ~FALSE)) + # Select only the columns of interest + select(any_of(c(names(mydata$intervals), "impute"))) + + # new_intervals <- merge(mydata$intervals, c0_rows) %>% + # # Make sure the C0 impute is only applied for intervals which start has no concentration record + # dplyr::mutate(impute = ifelse(start %in% eval(parse(text = vr_times)), NA, impute)) + + mydata$intervals = new_intervals - # Update mydata$intervals - mydata$intervals <- rbind( - mydata$intervals %>% - mutate(across(all_of(params_c0), ~ FALSE)) %>% - mutate(impute = NA) %>% - dplyr::filter(end == Inf), - - mydata$intervals %>% - left_join(c0_rows, by = group_columns) %>% - mutate(across(any_of(params_noc0), ~ FALSE)) - ) - return(mydata) -} \ No newline at end of file +} diff --git a/R/format_data.R b/R/format_data.R index 777f0777..3fe8a00e 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -78,7 +78,7 @@ create_conc <- function(ADNCA, #' Create PK Dose Dataset #' -#' This function creates a pharmacokinetic dose dataset from the provided concentration data. +#' This function creates a pharmacokinetic dose dataset from the provided concentration data, including time of dose (TIME) and first (TIME1) and last (TIMELAST) times observed. #' #' @param ADNCA_conc A data frame containing the concentration data. #' @@ -108,11 +108,10 @@ create_dose <- function(df_conc, since_lastdose_time_column = "ARRLT") { df_conc %>% - dplyr::mutate(TIME.dose = !!sym(time_column) - !!sym(since_lastdose_time_column), - TIME = !!sym(time_column) - ) %>% - dplyr::filter(TIME >= 0) %>% + dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% dplyr::group_by(!!!syms(group_columns)) %>% + dplyr::filter(if (any(!!sym(since_lastdose_time_column) >= 0)) !!sym(since_lastdose_time_column) >= 0 else TRUE) %>% + dplyr::mutate(TIME1 = min(!!sym(since_lastdose_time_column)), TIMELAST = max(!!sym(since_lastdose_time_column))) %>% dplyr::slice(1) %>% dplyr::ungroup() } diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 6bd3dd2f..2406fa97 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -4,7 +4,7 @@ #' of the PKNCA package (pk.nca) in a way that each row represents all the main results #' summarized for each profile in each individual/patient. #' -#' @param res_nca The output of PKNCA::pk.nca +#' @param myres The output of PKNCA::pk.nca #' #' @returns A data frame (finalres2) which provides an easy overview on the results from the NCA #' in each profile/subject and how it was computed lambda (half life) and the results @@ -15,23 +15,23 @@ #' @importFrom tidyr pivot_wider pivot_longer #' @export #' -reshape_pknca_results <- function(res_nca) { +reshape_pknca_results <- function(myres) { # Get all names with units and make a dictionary structure - dict_pttestcd_with_units <- res_nca$result %>% + dict_pttestcd_with_units <- myres$result %>% select(PPTESTCD, PPORRESU) %>% unique() %>% pull(PPORRESU, PPTESTCD) # Filter out infinite AUCs and pivot the data to incorporate # the parameters into columns with their units - infinite_aucs_vals <- res_nca$result %>% + infinite_aucs_vals <- myres$result %>% unique() %>% filter(end == Inf) %>% select(-PPORRESU, -exclude) %>% pivot_wider(names_from = PPTESTCD, values_from = PPORRES) - infinite_aucs_exclude <- res_nca$result %>% + infinite_aucs_exclude <- myres$result %>% unique() %>% filter(end == Inf) %>% select(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, PPTESTCD, exclude) %>% @@ -40,7 +40,7 @@ reshape_pknca_results <- function(res_nca) { infinite_aucs <- merge(infinite_aucs_vals, infinite_aucs_exclude) - infinite_aucs_with_lambda <- res_nca$data$conc$data %>% + infinite_aucs_with_lambda <- myres$data$conc$data %>% merge(infinite_aucs) %>% group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% arrange(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, IX) %>% @@ -60,22 +60,22 @@ reshape_pknca_results <- function(res_nca) { select(any_of(c(names(infinite_aucs), "lambda.z.method", "lambda.z.ix"))) - # If there were intervals defined by the user, - # filter out the AUCs corresponding to those intervals - if (any(res_nca$result$PPTESTCD == "aucint.last")) { - interval_aucs_vals <- res_nca$result %>% - filter(PPTESTCD == "aucint.last") %>% + # If there were intervals defined, make independent columns for each + if (any(startsWith(myres$result$PPTESTCD, prefix = "aucint."))) { + + interval_aucs_vals <- myres$result %>% + filter(startsWith(PPTESTCD, prefix = "aucint."), (start != 0 | end != Inf)) %>% mutate( - interval_name = paste0(start, "-", end), + interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) - ) %>% + ) %>% select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name) %>% pivot_wider(names_from = interval_name_col, values_from = PPORRES) - interval_aucs_exclude <- res_nca$result %>% - filter(PPTESTCD == "aucint.last") %>% + interval_aucs_exclude <- myres$result %>% + filter(startsWith(PPTESTCD, prefix = "aucint.")) %>% mutate( - interval_name = paste0(start, "-", end), + interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 213aa5d1..ead95c21 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -184,7 +184,6 @@ observeEvent(input$settings_upload, { # When an analyte is selected and the user clicks the "Submit" button, # create the PKNCA data object mydata <- reactiveVal(NULL) -mydata_c1cn_intervals <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { # Define explicetely input columns until there are input definitions @@ -244,8 +243,13 @@ observeEvent(input$submit_analyte, priority = 2, { timeu = myconc$data$RRLTU[1] ) ) + + # Keep only the default intervals to infinity + mydata$intervals <- mydata$intervals %>% + dplyr::filter(end == Inf) %>% + dplyr::mutate(auclast = TRUE) + mydata(mydata) - mydata_c1cn_intervals(mydata$intervals %>% dplyr::filter(end != Inf)) }) # Display the PKNCA data object for the user (concentration records) @@ -357,29 +361,25 @@ observeEvent(input$nca, { # Use the intervals defined by the user if so if (input$AUCoptions && auc_counter() > 0) { - + # Collect all inputs for the AUC intervals - input_names_ranges <- grep("^RangeInput_", names(input), value = TRUE) - input_names_params <- grep("^ParamInput_.*[0-9]$", names(input), value = TRUE) - - starts <- unlist(lapply(input_names_ranges, function(name) input[[name]][1])) - ends <- unlist(lapply(input_names_ranges, function(name) input[[name]][2])) - params <- lapply(input_names_params, function(name) input[[name]]) - - # Define the time values at first (C1) and last (Cn) concentrations - c1 <- mydata_c1cn_intervals()$start - cn <- mydata_c1cn_intervals()$end + input_names_aucmin <- grep("^timeInputMin_", names(input), value = TRUE) + input_names_aucmax <- grep("^timeInputMax_", names(input), value = TRUE) + starts <- unlist(lapply(input_names_aucmin, function(name) input[[name]])) + ends <- unlist(lapply(input_names_aucmax, function(name) input[[name]])) + # Make a list of dataframes with each of the intervals requested intervals_list <- lapply(1:length(starts), function(i){ - mydata_c1cn_intervals() %>% + mydata()$intervals %>% dplyr::mutate( - start = if (starts[i] == "C1") c1 else if (starts[i] == "Cn") cn else as.numeric(starts[i]), - end = if (ends[i] == "C1") c1 else if (ends[i] == "Cn") cn else as.numeric(ends[i]) + start = start + as.numeric(starts[i]), + end = start + as.numeric(ends[i]) ) %>% # only TRUE for columns specified in params mutate(across(where(is.logical), ~FALSE)) %>% - mutate(across(params[[i]], ~TRUE)) + # Intervals will always only compute AUC values + mutate(across(c("aucint.last", "aucint.inf.obs", "aucint.inf.pred", "aucint.all"), ~TRUE)) }) # Save intervals as a dataframe @@ -429,18 +429,27 @@ res_nca <- eventReactive(rv$trigger, { # Load mydata reactive mydata <- mydata() - - # Include manual intervals if specified by the user - if (!is.null(intervals_userinput())) mydata$intervals <- bind_rows(intervals_userinput()) - # Perform C0 imputations if specified by the user + # Include manual intervals if specified by the user + mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) + browser() + # Define C0 imputations on intervals starting at dose time if specified by the user if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) - } + mydata$impute <- "impute" + # Otherwise if at C0 is not already present, make those intervals start at C1 for auclast + } + # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) - browser() + + # Make the starts and ends of results relative to last dose + myres$result = merge(myres$result, mydata$dose$data) %>% + dplyr::mutate(start = start - !!sym(mydata$dose$columns$time), + end = end - !!sym(mydata$dose$columns$time)) %>% + dplyr::select(names(myres$result)) + # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index 7d960c0e..cc7d4d6e 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -53,13 +53,6 @@ fluidPage( choices = c("Please specify ANALYTE in Data Selection" = "") ), br(), - - # Only for relevant parameter calculation in NCA, it won't be at the actual data - h4("Data imputation"), - checkboxInput(inputId = "should_impute_c0", - label = "Impute C0 when missing", - value = TRUE), - actionButton("submit_analyte", "Submit"), DTOutput("datatable"), ), @@ -72,6 +65,10 @@ fluidPage( ), selected = "lin up/log down" ), + h4("Data imputation"), + checkboxInput(inputId = "should_impute_c0", + label = "Impute C0 when missing", + value = TRUE), br(), checkboxInput("AUCoptions", "Select Partial AUC"), conditionalPanel( From 5c5be0a23c76b7d8d65687174661fe7da4dcfbc4 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 27 Nov 2024 14:57:32 +0100 Subject: [PATCH 25/85] fix: when C0 is not imputed, start is at C1 --- inst/shiny/tabs/nca.R | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index ead95c21..c7388d95 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -432,14 +432,28 @@ res_nca <- eventReactive(rv$trigger, { # Include manual intervals if specified by the user mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) - browser() - # Define C0 imputations on intervals starting at dose time if specified by the user + + # Define start imputations on intervals if specified by the user if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) mydata$impute <- "impute" - - # Otherwise if at C0 is not already present, make those intervals start at C1 for auclast - } + + } else { + # Otherwise, the original intervals should start at C1 for all calculations + + c1_intervals <- mydata$conc$data %>% + group_by(!!!syms(unname(unlist(mydata$dose$columns$groups)))) %>% + arrange(!!sym(mydata$conc$columns$time) <= 0, + !!sym(mydata$conc$columns$time) + ) %>% + select(any_of(unname(unlist(mydata$dose$columns)))) %>% + rename(start = !!sym(mydata$conc$columns$time)) %>% + slice(1) + + mydata$intervals <- bind_rows(merge(mydata()$intervals %>% select(-start), + c1_intervals), + intervals_userinput()) + } # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) From e211bd74b1185a0cff1cf438dbea7fe55797c33b Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 28 Nov 2024 10:30:46 +0100 Subject: [PATCH 26/85] lintr: code cleaning --- R/PKNCA_impute_method_additions.R | 4 +- R/create_c0_impute_column.R | 26 +++++------ R/format_data.R | 50 +++----------------- R/reshape_PKNCA_results.R | 10 ++-- inst/shiny/tabs/nca.R | 76 +++++++++++++++---------------- inst/shiny/ui.R | 5 +- 6 files changed, 66 insertions(+), 105 deletions(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index d7b226e9..2c64ab0c 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -6,7 +6,7 @@ #' @param end Numeric value indicating the end time. #' @param ... Additional arguments (currently not used). #' @param options List of options (currently not used). -#' +#' #' @return A data frame with imputed start concentration. #' @export #' @@ -41,7 +41,7 @@ PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = #' @param end Numeric value indicating the end time. #' @param ... Additional arguments (currently not used). #' @param options List of options (currently not used). -#' +#' #' @return A data frame with imputed start concentration. #' @export #' diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index cf027c59..d73ecba5 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -14,18 +14,18 @@ create_c0_impute <- function(mydata) { x = mydata$conc$data, y = mydata$dose$data[, group_columns] %>% dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) - ) %>% + ) %>% merge(mydata$intervals) # Process imputation strategy based on each interval new_intervals <- mydata_with_int %>% - group_by(across(all_of(c(group_columns, "start", "end")))) %>% - arrange(across(all_of(c(group_columns, time_column)))) %>% + group_by(across(all_of(c(group_columns, "start", "end")))) %>% + arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate( vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")") ) %>% - arrange(abs(!!sym(time_column) - start)) %>% + arrange(abs(!!sym(time_column) - start)) %>% slice(1) %>% ungroup() %>% mutate( @@ -39,22 +39,22 @@ create_c0_impute <- function(mydata) { (tolower(!!sym(route_column)) == "extravascular" | !!sym(duration_column) > 0 | !!sym(analyte_column) != !!sym(drug_column)) ~ "start_predose", - tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) & + tolower(!!sym(route_column)) == "intravascular" & + !!sym(duration_column) == 0 & + !!sym(analyte_column) == !!sym(drug_column) & !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), time = eval(parse(text = vr_times)), time.dose = time_dose[1], method = "logslope")) ~ "start_logslope", - tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) ~ "start_c1" + tolower(!!sym(route_column)) == "intravascular" & + !!sym(duration_column) == 0 & + !!sym(analyte_column) == !!sym(drug_column) ~ "start_c1" ) ) %>% # Select only the columns of interest select(any_of(c(names(mydata$intervals), "impute"))) - - # new_intervals <- merge(mydata$intervals, c0_rows) %>% - # # Make sure the C0 impute is only applied for intervals which start has no concentration record - # dplyr::mutate(impute = ifelse(start %in% eval(parse(text = vr_times)), NA, impute)) - - mydata$intervals = new_intervals - + + mydata$intervals <- new_intervals + return(mydata) } diff --git a/R/format_data.R b/R/format_data.R index 3fe8a00e..cfc1ddd4 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -1,46 +1,10 @@ -#' Format Data for Pharmacokinetic Analysis -#' -#' This function formats a data file for pharmacokinetic analysis by converting specific concentration values to numeric and adjusting time based on dose number. -#' -#' @param datafile A data frame containing the raw data to be formatted. -#' -#' @return A data frame with formatted concentration and time values. -#' -#' @details -#' The function performs the following steps: -#' \itemize{ -#' \item Converts concentration values ('AVAL') that are 'BLQ', 'Negative', 'negative', or 'NEGATIVE' to 0. -#' \item Adjusts the time values ('TIME') based on the dose number ('DOSNO'). If 'DOSNO' is 1, 'TIME' is set to 'AFRLT'; otherwise, it is set to 'TIME'. -#' } -#' -#' @examples -#' \dontrun{ -#' # Example usage: -#' formatted_data <- format_data(raw_data) -#' } -#' -#' @import dplyr -#' @export - -#Format data for pknca -format_data <- function(datafile) { - datafile <- datafile %>% - dplyr::mutate(AVAL = as.numeric(ifelse(AVAL %in% - c("BLQ", "Negative", "negative", "NEGATIVE"), - 0, AVAL)) - )%>% - dplyr::mutate(TIME = ifelse(DOSNO == 1, AFRLT, TIME)) - - return(datafile) -} - #' Create PK Concentration Dataset #' #' This function creates a pharmacokinetic concentration dataset from the provided ADNCA data. #' #' @param ADNCA A data frame containing the ADNCA data. #' @param analyte A character string specifying the analyte of interest. -#' @param proftype A character string specifying the profile type (not used in the function but kept for consistency). + #' #' @return A data frame containing the filtered and processed concentration data. #' @@ -66,19 +30,19 @@ format_data <- function(datafile) { #create pknca concentration dataset create_conc <- function(ADNCA, group_columns, - time_column="AFRLT") { + time_column = "AFRLT") { data <- ADNCA %>% dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% dplyr::arrange(!!sym(time_column)) %>% dplyr::mutate(TIME = !!sym(time_column)) %>% dplyr::group_by(!!!syms(group_columns)) %>% - dplyr::mutate(IX = 1:n()) %>% + dplyr::mutate(IX = seq_len(n())) %>% dplyr::ungroup() } #' Create PK Dose Dataset #' -#' This function creates a pharmacokinetic dose dataset from the provided concentration data, including time of dose (TIME) and first (TIME1) and last (TIMELAST) times observed. +#' This function creates a pharmacokinetic dose dataset from the provided concentration data. #' #' @param ADNCA_conc A data frame containing the concentration data. #' @@ -108,10 +72,10 @@ create_dose <- function(df_conc, since_lastdose_time_column = "ARRLT") { df_conc %>% - dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% + dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% dplyr::group_by(!!!syms(group_columns)) %>% - dplyr::filter(if (any(!!sym(since_lastdose_time_column) >= 0)) !!sym(since_lastdose_time_column) >= 0 else TRUE) %>% - dplyr::mutate(TIME1 = min(!!sym(since_lastdose_time_column)), TIMELAST = max(!!sym(since_lastdose_time_column))) %>% + dplyr::arrange(!!sym(since_lastdose_time_column) < 0, + !!sym(since_lastdose_time_column)) %>% dplyr::slice(1) %>% dplyr::ungroup() } diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 2406fa97..7df53b17 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -26,13 +26,13 @@ reshape_pknca_results <- function(myres) { # Filter out infinite AUCs and pivot the data to incorporate # the parameters into columns with their units infinite_aucs_vals <- myres$result %>% - unique() %>% + unique() %>% filter(end == Inf) %>% select(-PPORRESU, -exclude) %>% pivot_wider(names_from = PPTESTCD, values_from = PPORRES) infinite_aucs_exclude <- myres$result %>% - unique() %>% + unique() %>% filter(end == Inf) %>% select(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, PPTESTCD, exclude) %>% mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% @@ -62,13 +62,13 @@ reshape_pknca_results <- function(myres) { # If there were intervals defined, make independent columns for each if (any(startsWith(myres$result$PPTESTCD, prefix = "aucint."))) { - + interval_aucs_vals <- myres$result %>% filter(startsWith(PPTESTCD, prefix = "aucint."), (start != 0 | end != Inf)) %>% mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) - ) %>% + ) %>% select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name) %>% pivot_wider(names_from = interval_name_col, values_from = PPORRES) @@ -101,4 +101,4 @@ reshape_pknca_results <- function(myres) { ungroup() return(reshaped_results) -} \ No newline at end of file +} diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index c7388d95..35daa2b1 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -41,7 +41,7 @@ observeEvent(input$settings_upload, { type = "error" ) } - + # Compare the dataset with settings for inclusions and exclusions new_data <- data() %>% filter( @@ -90,7 +90,7 @@ observeEvent(input$settings_upload, { choices = data()$ANALYTE[1], selected = setts$ANALYTE[1] ) - + # Dose number updateSelectInput( session, @@ -192,21 +192,21 @@ observeEvent(input$submit_analyte, priority = 2, { time_column <- "AFRLT" route_column <- "ROUTE" analyte_column <- "ANALYTE" - + # Filter data based on selected analyte and dose numbers - data_filt <- data() %>% + data_filt <- data() %>% dplyr::filter(!!sym(analyte_column) == input$select_analyte, DOSNO %in% input$select_dosno, if ("EVID" %in% names(data())) EVID == 0 else TRUE) - + # Segregate the data into concentration and dose records - df_conc <- create_conc(ADNCA = data_filt, + df_conc <- create_conc(ADNCA = data_filt, group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) - df_dose <- create_dose(df_conc = df_conc, + df_dose <- create_dose(df_conc = df_conc, group_columns = c(group_columns, usubjid_column), - time_column = time_column, + time_column = time_column, since_lastdose_time_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) @@ -248,7 +248,7 @@ observeEvent(input$submit_analyte, priority = 2, { mydata$intervals <- mydata$intervals %>% dplyr::filter(end == Inf) %>% dplyr::mutate(auclast = TRUE) - + mydata(mydata) }) @@ -318,17 +318,17 @@ observe({ # Choose dosenumbers to be analyzed observeEvent(input$select_analyte, priority = -1, { - doses_options <- data() %>% - filter(ANALYTE == input$select_analyte) %>% - pull(DOSNO) %>% - sort() %>% + doses_options <- data() %>% + filter(ANALYTE == input$select_analyte) %>% + pull(DOSNO) %>% + sort() %>% unique() - + updateSelectInput( session, inputId = "select_dosno", label = "Choose the Dose Number:", - choices = doses_options, + choices = doses_options, selected = doses_options[1] ) }) @@ -358,24 +358,24 @@ rv <- reactiveValues(trigger = 0) # Update the trigger whenever either button is clicked observeEvent(input$nca, { req(mydata()) - + # Use the intervals defined by the user if so if (input$AUCoptions && auc_counter() > 0) { # Collect all inputs for the AUC intervals input_names_aucmin <- grep("^timeInputMin_", names(input), value = TRUE) input_names_aucmax <- grep("^timeInputMax_", names(input), value = TRUE) - + starts <- unlist(lapply(input_names_aucmin, function(name) input[[name]])) ends <- unlist(lapply(input_names_aucmax, function(name) input[[name]])) # Make a list of dataframes with each of the intervals requested - intervals_list <- lapply(1:length(starts), function(i){ - mydata()$intervals %>% + intervals_list <- lapply(seq_along(starts), function(i) { + mydata()$intervals %>% dplyr::mutate( start = start + as.numeric(starts[i]), end = start + as.numeric(ends[i]) - ) %>% + ) %>% # only TRUE for columns specified in params mutate(across(where(is.logical), ~FALSE)) %>% # Intervals will always only compute AUC values @@ -399,7 +399,7 @@ observeEvent(input$nca, { rv$trigger <- rv$trigger + 1 updateTabsetPanel(session, "ncapanel", selected = "Results") } - + # Update profiles per patient considering the profiles selected mydataconc_new <- mydata()$conc$data %>% filter(DOSNO %in% input$select_dosno) profiles_per_patient(tapply(mydataconc_new$DOSNO, mydataconc_new$USUBJID, unique)) @@ -437,31 +437,29 @@ res_nca <- eventReactive(rv$trigger, { if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) mydata$impute <- "impute" - + } else { - # Otherwise, the original intervals should start at C1 for all calculations - - c1_intervals <- mydata$conc$data %>% - group_by(!!!syms(unname(unlist(mydata$dose$columns$groups)))) %>% - arrange(!!sym(mydata$conc$columns$time) <= 0, - !!sym(mydata$conc$columns$time) - ) %>% - select(any_of(unname(unlist(mydata$dose$columns)))) %>% - rename(start = !!sym(mydata$conc$columns$time)) %>% + # Otherwise, the original intervals should start at C1 for all calculations + + c1_intervals <- mydata$conc$data %>% + group_by(!!!syms(unname(unlist(mydata$dose$columns$groups)))) %>% + arrange(!!sym(mydata$conc$columns$time) <= 0, !!sym(mydata$conc$columns$time)) %>% + select(any_of(unname(unlist(mydata$dose$columns)))) %>% + rename(start = !!sym(mydata$conc$columns$time)) %>% slice(1) - - mydata$intervals <- bind_rows(merge(mydata()$intervals %>% select(-start), - c1_intervals), + + mydata$intervals <- bind_rows(merge(mydata()$intervals %>% select(-start), + c1_intervals), intervals_userinput()) } - + # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) # Make the starts and ends of results relative to last dose - myres$result = merge(myres$result, mydata$dose$data) %>% + myres$result <- merge(myres$result, mydata$dose$data) %>% dplyr::mutate(start = start - !!sym(mydata$dose$columns$time), - end = end - !!sym(mydata$dose$columns$time)) %>% + end = end - !!sym(mydata$dose$columns$time)) %>% dplyr::select(names(myres$result)) # Increment progress to 100% after NCA calculations are complete @@ -519,8 +517,8 @@ observeEvent(res_nca(), { # Sort alphabetically all columns but the grouping and the exclude columns group_cols <- c(unname(unique(c(unlist(res_nca()$data$conc$columns$groups), - unlist(res_nca()$data$dose$columns$groups)) - )), "start", "end") + unlist(res_nca()$data$dose$columns$groups)))), + "start", "end") exclude_cols <- names(final_res_nca)[startsWith(names(final_res_nca), "exclude.")] final_res_nca <- final_res_nca[, c( group_cols, diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index cc7d4d6e..4ad5d18d 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -48,10 +48,9 @@ fluidPage( # Selection of analyte selectInput("select_analyte", "Choose the analyte :", choices = NULL), - selectInput("select_dosno", "Choose the Dose Number:", + selectInput("select_dosno", "Choose the Dose Number:", multiple = TRUE, - choices = c("Please specify ANALYTE in Data Selection" = "") - ), + choices = c("Please specify ANALYTE in Data Selection" = "")), br(), actionButton("submit_analyte", "Submit"), DTOutput("datatable"), From 06fca2fbd72c60bcbe2a89b857a488c983517059 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 28 Nov 2024 17:44:40 +0100 Subject: [PATCH 27/85] fix: issue in slope_selector with new name for input$cyclenca --- inst/shiny/modules/slope_selector.R | 4 ++-- inst/shiny/tabs/nca.R | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inst/shiny/modules/slope_selector.R b/inst/shiny/modules/slope_selector.R index 4d09bff2..d5d0dfd8 100644 --- a/inst/shiny/modules/slope_selector.R +++ b/inst/shiny/modules/slope_selector.R @@ -134,9 +134,9 @@ slope_selector_server <- function( DOSNO %in% cycle_nca, USUBJID %in% search_patient ) %>% - select(USUBJID, DOSNO) %>% + dplyr::select(USUBJID, DOSNO) %>% unique() %>% - arrange(USUBJID, DOSNO) + dplyr::arrange(USUBJID, DOSNO) num_plots <- nrow(patient_profile_plot_ids) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index aa76f862..0839f42f 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -212,10 +212,10 @@ observeEvent(input$submit_analyte, priority = 2, { exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) - + browser() mydose <- PKNCA::PKNCAdose( data = df_dose, - formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID + DOSNO, + formula = DOSEA ~ TIME | STUDYID + PCSPEC + DOSNO + DRUG + USUBJID, route = route_column, time.nominal = "NFRLT", duration = "ADOSEDUR" @@ -725,7 +725,7 @@ slope_rules <- slope_selector_server( mydata, res_nca, profiles_per_patient, - input$cyclenca, + input$select_dosno, rv, reactive(input$settings_upload) ) From a6bddfc9ee2a2949814deaf976214d4edb945398 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 2 Dec 2024 14:42:47 +0100 Subject: [PATCH 28/85] refactor: make own function to create intervals with dose data --- R/format_data.R | 55 +++++++++++++++++++++++++ inst/shiny/tabs/nca.R | 93 ++++++++++++++++--------------------------- 2 files changed, 89 insertions(+), 59 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index cfc1ddd4..20f023fd 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -79,3 +79,58 @@ create_dose <- function(df_conc, dplyr::slice(1) %>% dplyr::ungroup() } + +mydata = readRDS("inst/shiny/mydata3") + +#' Create Dose Intervals Dataset +#' +#' This function creates a dataset with dose intervals and specified pharmacokinetic parameters. +#' +#' @param df_dose A PKNCAdose object. Default from the app is `mydose`. +#' @param params A character vector specifying the pharmacokinetic parameters to include. Default is `c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax")`. +#' @param start_from_last_dose If start of the interval should be based on dose start (TIME) or actual C1 (AFRLT). +#' +#' @return A data frame containing the dose intervals and specified pharmacokinetic parameters. +#' +#' @details +#' The function performs the following steps: +#' \itemize{ +#' \item Creates a vector with all pharmacokinetic parameters. +#' \item Based on dose times, creates a data frame with start and end times. +#' \item Adds logical columns for each specified parameter. +#' } +#' +#' @examples +#' \dontrun{ +#' # Example usage: +#' dose_intervals <- create_dose_intervals(df_dose, params) +#' } +#' +#' @import dplyr +#' @export +create_dose_intervals <- function(mydose = mydose, + params = c("aucinf.obs", "aucint.last", "auclast", "cmax", + "half.life", "tmax", "lambda.z", "lambda.z.n.points", + "r.squared", "adj.r.squared", "lambda.z.time.first"), + start_from_last_dose = TRUE + ){ + + # Based on dose times create a data frame with start and end times + dose_intervals <- mydose$data %>% + group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% + dplyr::arrange(!!sym( mydose$columns$time)) %>% + mutate(start = if (start_from_last_dose) !!sym( mydose$columns$time) else AFRLT, + end = lead(!!sym( mydose$columns$time), + default = Inf)) %>% + ungroup() %>% + select(start, end, unname(unlist(mydose$columns$groups)), DOSNO) %>% + + # Create logical columns with the TRUE and as names params argument + mutate(!!!setNames(rep(TRUE, length(params)), params)) %>% + + # Identify the intervals as the base ones for the NCA analysis + mutate(type_interval = "main") + + return(dose_intervals) +} + diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 0839f42f..f7652d70 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -212,20 +212,23 @@ observeEvent(input$submit_analyte, priority = 2, { exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) - browser() + mydose <- PKNCA::PKNCAdose( data = df_dose, - formula = DOSEA ~ TIME | STUDYID + PCSPEC + DOSNO + DRUG + USUBJID, + formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID, route = route_column, time.nominal = "NFRLT", duration = "ADOSEDUR" ) + myintervals <- create_dose_intervals(mydose) + # Combine the PKNCA objects into the PKNCAdata object # TODO think of case with different units for different analytes mydata <- PKNCA::PKNCAdata( data.conc = myconc, data.dose = mydose, + intervals = myintervals, units = PKNCA::pknca_units_table( concu = myconc$data$PCSTRESU[1], doseu = myconc$data$DOSEU[1], @@ -233,12 +236,7 @@ observeEvent(input$submit_analyte, priority = 2, { timeu = myconc$data$RRLTU[1] ) ) - - # Keep only the default intervals to infinity - mydata$intervals <- mydata$intervals %>% - dplyr::filter(end == Inf) %>% - dplyr::mutate(auclast = TRUE) - + mydata(mydata) }) @@ -342,10 +340,7 @@ observeEvent(input$removeAUC, { } }) # NCA button object - -# Create a reactive values object -rv <- reactiveValues(trigger = 0) -# Update the trigger whenever either button is clicked +myres <- reactiveVal(NULL) observeEvent(input$nca, { req(mydata()) @@ -369,97 +364,77 @@ observeEvent(input$nca, { # only TRUE for columns specified in params mutate(across(where(is.logical), ~FALSE)) %>% # Intervals will always only compute AUC values - mutate(across(c("aucint.last", "aucint.inf.obs", "aucint.inf.pred", "aucint.all"), ~TRUE)) + mutate(across(c("aucint.last", "aucint.inf.obs", "aucint.inf.pred", "aucint.all"), ~TRUE)) %>% + # Identify the intervals as the manual ones created by the user + mutate(type_interval = "manual") }) # Save intervals as a dataframe intervals_userinput(intervals_list) } - - # Make the user aware if it forgot to select at least 1 DOSNO - if (is.null(input$select_dosno)) { - showNotification( - "Please select a profile from the 'Settings' tab to proceed.", - duration = NULL, - closeButton = TRUE, - type = "warning" - ) - } else { - # Lead the user to the Results section - rv$trigger <- rv$trigger + 1 - updateTabsetPanel(session, "ncapanel", selected = "Results") - } - + # Update profiles per patient considering the profiles selected - mydataconc_new <- mydata()$conc$data %>% filter(DOSNO %in% input$select_dosno) - profiles_per_patient(tapply(mydataconc_new$DOSNO, mydataconc_new$USUBJID, unique)) -}) - -# run the nca upon button click - -res_nca <- eventReactive(rv$trigger, { - req(!is.null(input$select_dosno)) - + profiles_per_patient(tapply(mydata()$conc$data$DOSNO, mydata()$conc$data$USUBJID, unique)) + + # Run NCA results withProgress(message = "Calculating NCA...", value = 0, { req(mydata()) - + # Increment progress to 50% after getting dataNCA incProgress(0.5, detail = "Performing NCA calculations...") - + # Use the user inputs to determine the NCA settings to apply PKNCA::PKNCA.options( auc.method = input$method, allow.tmax.in.half.life = TRUE, - + keep_interval_cols = c("DOSNO", "type_interval"), # Make sure the standard options do not prohibit results min.hl.r.squared = 0.001, min.span.ratio = Inf, min.hl.points = 3 ) - + # Load mydata reactive mydata <- mydata() - + # Include manual intervals if specified by the user mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) - + # Define start imputations on intervals if specified by the user if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) mydata$impute <- "impute" - + } else { # Otherwise, the original intervals should start at C1 for all calculations - - c1_intervals <- mydata$conc$data %>% - group_by(!!!syms(unname(unlist(mydata$dose$columns$groups)))) %>% - arrange(!!sym(mydata$conc$columns$time) <= 0, !!sym(mydata$conc$columns$time)) %>% - select(any_of(unname(unlist(mydata$dose$columns)))) %>% - rename(start = !!sym(mydata$conc$columns$time)) %>% - slice(1) - - mydata$intervals <- bind_rows(merge(mydata()$intervals %>% select(-start), - c1_intervals), + mydata$intervals <- bind_rows(create_dose_intervals(mydose, + start_from_last_dose = FALSE), intervals_userinput()) } - + # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) - + # Make the starts and ends of results relative to last dose myres$result <- merge(myres$result, mydata$dose$data) %>% dplyr::mutate(start = start - !!sym(mydata$dose$columns$time), end = end - !!sym(mydata$dose$columns$time)) %>% dplyr::select(names(myres$result)) - + # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") - + # Return the result - return(myres) + myres(myres) + + # Update panel to show results page + updateTabsetPanel(session, "ncapanel", selected = "Results") }) + }) +res_nca <- eventReactive(myres(), return(myres())) + # TABSET: Results ============================================================== # In the result tabset we can view the NCA results, slope caclulation und exclusions table. From 9dfb2a62e3e49ae5d3e1ec2792c7e35edc6697a2 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 2 Dec 2024 14:45:46 +0100 Subject: [PATCH 29/85] fix: adapt lambda_slope_plot to use type_interval column instead of end==Inf --- R/lambda_slope_plot.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/lambda_slope_plot.R b/R/lambda_slope_plot.R index d2debb25..aa8b004d 100644 --- a/R/lambda_slope_plot.R +++ b/R/lambda_slope_plot.R @@ -57,7 +57,7 @@ lambda_slope_plot <- function( # Obtain all information relevant regarding lambda calculation lambda_res <- res_pknca_df %>% - filter(DOSNO == dosno, USUBJID == usubjid, end == Inf) %>% + filter(DOSNO == dosno, USUBJID == usubjid, type_interval == "main") %>% arrange(USUBJID, DOSNO, start, desc(end)) %>% filter(!duplicated(paste0(USUBJID, DOSNO, PPTESTCD))) From 8ad9bf1fb2ff85631bba82530170def413d9fa48 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 2 Dec 2024 14:47:45 +0100 Subject: [PATCH 30/85] fix: adapt create_c0_impute_column to not use artificial time_dose column --- R/create_c0_impute_column.R | 10 +++++----- R/reshape_PKNCA_results.R | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index d73ecba5..ab84d423 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -12,9 +12,8 @@ create_c0_impute <- function(mydata) { mydata_with_int <- merge( x = mydata$conc$data, - y = mydata$dose$data[, group_columns] %>% - dplyr::mutate(time_dose = mydata$dose$data[[time_column]]) - ) %>% + y = mydata$dose$data[, group_columns] + ) %>% merge(mydata$intervals) # Process imputation strategy based on each interval @@ -25,7 +24,8 @@ create_c0_impute <- function(mydata) { vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")") ) %>% - arrange(abs(!!sym(time_column) - start)) %>% + arrange((!!sym(time_column) - start) < 0, + (!!sym(time_column) - start)) %>% slice(1) %>% ungroup() %>% mutate( @@ -44,7 +44,7 @@ create_c0_impute <- function(mydata) { !!sym(analyte_column) == !!sym(drug_column) & !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), time = eval(parse(text = vr_times)), - time.dose = time_dose[1], + time.dose = start[1], method = "logslope")) ~ "start_logslope", tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index faf442c7..35362510 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -27,14 +27,14 @@ reshape_pknca_results <- function(myres) { # the parameters into columns with their units infinite_aucs_vals <- myres$result %>% unique() %>% - filter(end == Inf) %>% - select(-PPORRESU, -exclude) %>% + filter(type_interval == "main") %>% + select(-PPORRESU, -exclude, -type_interval) %>% pivot_wider(names_from = PPTESTCD, values_from = PPORRES) infinite_aucs_exclude <- myres$result %>% unique() %>% - filter(end == Inf) %>% - select(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, PPTESTCD, exclude) %>% + filter(type_interval == "main") %>% + select(-PPORRES, -PPORRESU, -type_interval) %>% mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% pivot_wider(names_from = PPTESTCD, values_from = exclude) @@ -61,24 +61,24 @@ reshape_pknca_results <- function(myres) { # If there were intervals defined, make independent columns for each - if (any(startsWith(myres$result$PPTESTCD, prefix = "aucint."))) { + if (any(myres$result$type_interval == "manual")) { interval_aucs_vals <- myres$result %>% - filter(startsWith(PPTESTCD, prefix = "aucint."), (start != 0 | end != Inf)) %>% + filter(type_interval == "manual") %>% mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) ) %>% - select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name) %>% + select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% pivot_wider(names_from = interval_name_col, values_from = PPORRES) interval_aucs_exclude <- myres$result %>% - filter(startsWith(PPTESTCD, prefix = "aucint.")) %>% + filter(type_interval == "manual") %>% mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% - select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name) %>% + select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% pivot_wider(names_from = interval_name_col, values_from = exclude) interval_aucs <- merge(interval_aucs_vals, interval_aucs_exclude) %>% From 7abe8f2519f7cfaa35b8d4122098a4ab7842fe50 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 2 Dec 2024 14:56:07 +0100 Subject: [PATCH 31/85] fix bug: correct call for mydata$dose instead of mydose --- inst/shiny/tabs/nca.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index f7652d70..9b731a01 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -407,7 +407,7 @@ observeEvent(input$nca, { } else { # Otherwise, the original intervals should start at C1 for all calculations - mydata$intervals <- bind_rows(create_dose_intervals(mydose, + mydata$intervals <- bind_rows(create_dose_intervals(mydata$dose, start_from_last_dose = FALSE), intervals_userinput()) } From 9f7fb16dfb65c8d32dc6f6a6480d18d78bc3e0ed Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 13:22:12 +0100 Subject: [PATCH 32/85] fix: solve issues when C0 is not imputed to start at C1 --- inst/shiny/tabs/nca.R | 52 ++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 9b731a01..1758ec34 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -222,7 +222,7 @@ observeEvent(input$submit_analyte, priority = 2, { ) myintervals <- create_dose_intervals(mydose) - + # Combine the PKNCA objects into the PKNCAdata object # TODO think of case with different units for different analytes mydata <- PKNCA::PKNCAdata( @@ -236,7 +236,7 @@ observeEvent(input$submit_analyte, priority = 2, { timeu = myconc$data$RRLTU[1] ) ) - + mydata(mydata) }) @@ -364,7 +364,8 @@ observeEvent(input$nca, { # only TRUE for columns specified in params mutate(across(where(is.logical), ~FALSE)) %>% # Intervals will always only compute AUC values - mutate(across(c("aucint.last", "aucint.inf.obs", "aucint.inf.pred", "aucint.all"), ~TRUE)) %>% + mutate(across(c("aucint.last", "aucint.inf.obs", + "aucint.inf.pred", "aucint.all"), ~TRUE)) %>% # Identify the intervals as the manual ones created by the user mutate(type_interval = "manual") }) @@ -372,17 +373,17 @@ observeEvent(input$nca, { # Save intervals as a dataframe intervals_userinput(intervals_list) } - + # Update profiles per patient considering the profiles selected profiles_per_patient(tapply(mydata()$conc$data$DOSNO, mydata()$conc$data$USUBJID, unique)) - + # Run NCA results withProgress(message = "Calculating NCA...", value = 0, { req(mydata()) - + # Increment progress to 50% after getting dataNCA incProgress(0.5, detail = "Performing NCA calculations...") - + # Use the user inputs to determine the NCA settings to apply PKNCA::PKNCA.options( auc.method = input$method, @@ -393,44 +394,55 @@ observeEvent(input$nca, { min.span.ratio = Inf, min.hl.points = 3 ) - + # Load mydata reactive mydata <- mydata() - + # Include manual intervals if specified by the user mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) - + # Define start imputations on intervals if specified by the user if (input$should_impute_c0) { mydata <- create_c0_impute(mydata = mydata) mydata$impute <- "impute" - + } else { # Otherwise, the original intervals should start at C1 for all calculations - mydata$intervals <- bind_rows(create_dose_intervals(mydata$dose, - start_from_last_dose = FALSE), - intervals_userinput()) + mydata <- PKNCA::PKNCAdata( + data.conc = mydata$conc, + data.dose = mydata$dose, + intervals = bind_rows(create_dose_intervals(mydata$dose, + start_from_last_dose = FALSE), + intervals_userinput()), + units = PKNCA::pknca_units_table( + concu = mydata$conc$data$PCSTRESU[1], + doseu = mydata$dose$data$DOSEU[1], + amountu = mydata$conc$data$PCSTRESU[1], + timeu = mydata$conc$data$RRLTU[1] + ) + ) + mydata(mydata) + } - + # Perform NCA on the profiles selected myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) - + # Make the starts and ends of results relative to last dose myres$result <- merge(myres$result, mydata$dose$data) %>% dplyr::mutate(start = start - !!sym(mydata$dose$columns$time), end = end - !!sym(mydata$dose$columns$time)) %>% dplyr::select(names(myres$result)) - + # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") - + # Return the result myres(myres) - + # Update panel to show results page updateTabsetPanel(session, "ncapanel", selected = "Results") }) - }) res_nca <- eventReactive(myres(), return(myres())) From 0da010bdc9e8a01a40618ae8c9697cdafe284c55 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 13:23:53 +0100 Subject: [PATCH 33/85] lintr: lint_dir cleaning --- R/create_c0_impute_column.R | 2 +- R/format_data.R | 37 ++++++++++++++++++------------------- inst/shiny/tabs/nca.R | 2 +- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/R/create_c0_impute_column.R b/R/create_c0_impute_column.R index ab84d423..90d15737 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_c0_impute_column.R @@ -13,7 +13,7 @@ create_c0_impute <- function(mydata) { mydata_with_int <- merge( x = mydata$conc$data, y = mydata$dose$data[, group_columns] - ) %>% + ) %>% merge(mydata$intervals) # Process imputation strategy based on each interval diff --git a/R/format_data.R b/R/format_data.R index 20f023fd..c58ad6b9 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -80,16 +80,16 @@ create_dose <- function(df_conc, dplyr::ungroup() } -mydata = readRDS("inst/shiny/mydata3") +mydata <- readRDS("inst/shiny/mydata3") #' Create Dose Intervals Dataset #' #' This function creates a dataset with dose intervals and specified pharmacokinetic parameters. #' #' @param df_dose A PKNCAdose object. Default from the app is `mydose`. -#' @param params A character vector specifying the pharmacokinetic parameters to include. Default is `c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax")`. -#' @param start_from_last_dose If start of the interval should be based on dose start (TIME) or actual C1 (AFRLT). -#' +#' @param params A character vector specifying the pharmacokinetic parameters to include. +#' @param start_from_last_dose Logical defining if start is at time of last dose or C1. +#' #' @return A data frame containing the dose intervals and specified pharmacokinetic parameters. #' #' @details @@ -108,26 +108,25 @@ mydata = readRDS("inst/shiny/mydata3") #' #' @import dplyr #' @export -create_dose_intervals <- function(mydose = mydose, - params = c("aucinf.obs", "aucint.last", "auclast", "cmax", +create_dose_intervals <- function(mydose = mydose, + params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first"), - start_from_last_dose = TRUE - ){ - + start_from_last_dose = TRUE) { + # Based on dose times create a data frame with start and end times dose_intervals <- mydose$data %>% - group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% - dplyr::arrange(!!sym( mydose$columns$time)) %>% - mutate(start = if (start_from_last_dose) !!sym( mydose$columns$time) else AFRLT, - end = lead(!!sym( mydose$columns$time), - default = Inf)) %>% - ungroup() %>% - select(start, end, unname(unlist(mydose$columns$groups)), DOSNO) %>% - + group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% + dplyr::arrange(!!sym(mydose$columns$time)) %>% + mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) else !!sym("AFRLT"), + end = lead(!!sym(mydose$columns$time), + default = Inf)) %>% + ungroup() %>% + select(start, end, unname(unlist(mydose$columns$groups)), DOSNO) %>% + # Create logical columns with the TRUE and as names params argument - mutate(!!!setNames(rep(TRUE, length(params)), params)) %>% - + mutate(!!!setNames(rep(TRUE, length(params)), params)) %>% + # Identify the intervals as the base ones for the NCA analysis mutate(type_interval = "main") diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 1758ec34..5e5a243b 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -422,7 +422,7 @@ observeEvent(input$nca, { ) ) mydata(mydata) - + } # Perform NCA on the profiles selected From c85f76a9b62047ee4df6fc07a15fb3ce15d44507 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 13:42:11 +0100 Subject: [PATCH 34/85] fix oldrel: deleted line used for testing --- R/format_data.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index c58ad6b9..485a8390 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -80,8 +80,6 @@ create_dose <- function(df_conc, dplyr::ungroup() } -mydata <- readRDS("inst/shiny/mydata3") - #' Create Dose Intervals Dataset #' #' This function creates a dataset with dose intervals and specified pharmacokinetic parameters. From 978c802331a5b93626beb7efac6ceff6901db5ae Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 13:53:04 +0100 Subject: [PATCH 35/85] fix: update roxygen2 documentation for format_data.R functions --- NAMESPACE | 3 +++ man/create_conc.Rd | 5 +---- man/create_dose.Rd | 9 ++++++-- man/create_dose_intervals.Rd | 41 ++++++++++++++++++++++++++++++++++++ man/format_data.Rd | 38 --------------------------------- man/partial_auc_input.Rd | 21 ++++++++++++++++++ man/reshape_pknca_results.Rd | 4 ++-- 7 files changed, 75 insertions(+), 46 deletions(-) create mode 100644 man/create_dose_intervals.Rd delete mode 100644 man/format_data.Rd create mode 100644 man/partial_auc_input.Rd diff --git a/NAMESPACE b/NAMESPACE index 41c31eec..2b21b95d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,11 +1,14 @@ # Generated by roxygen2: do not edit by hand +export(PKNCA_impute_method_start_c1) +export(PKNCA_impute_method_start_log) export(anonymize_pk_data) export(apply_filters) export(as_factor_preserve_label) export(calculate_summary_stats) export(create_conc) export(create_dose) +export(create_dose_intervals) export(filter_breaks) export(flexible_violinboxplot) export(general_lineplot) diff --git a/man/create_conc.Rd b/man/create_conc.Rd index 175b734e..5c11177c 100644 --- a/man/create_conc.Rd +++ b/man/create_conc.Rd @@ -4,15 +4,12 @@ \alias{create_conc} \title{Create PK Concentration Dataset} \usage{ -create_conc(ADNCA, analyte, proftype) +create_conc(ADNCA, group_columns, time_column = "AFRLT") } \arguments{ \item{ADNCA}{A data frame containing the ADNCA data.} \item{analyte}{A character string specifying the analyte of interest.} - -\item{proftype}{A character string specifying the profile type -(not used in the function but kept for consistency).} } \value{ A data frame containing the filtered and processed concentration data. diff --git a/man/create_dose.Rd b/man/create_dose.Rd index 67d42256..633c8c32 100644 --- a/man/create_dose.Rd +++ b/man/create_dose.Rd @@ -4,10 +4,15 @@ \alias{create_dose} \title{Create PK Dose Dataset} \usage{ -create_dose(adnca_conc) +create_dose( + df_conc, + group_columns, + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT" +) } \arguments{ -\item{adnca_conc}{A data frame containing the concentration data.} +\item{ADNCA_conc}{A data frame containing the concentration data.} } \value{ A data frame containing the dose data. diff --git a/man/create_dose_intervals.Rd b/man/create_dose_intervals.Rd new file mode 100644 index 00000000..a0aba515 --- /dev/null +++ b/man/create_dose_intervals.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/format_data.R +\name{create_dose_intervals} +\alias{create_dose_intervals} +\title{Create Dose Intervals Dataset} +\usage{ +create_dose_intervals( + mydose = mydose, + params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", + "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first"), + start_from_last_dose = TRUE +) +} +\arguments{ +\item{params}{A character vector specifying the pharmacokinetic parameters to include.} + +\item{start_from_last_dose}{Logical defining if start is at time of last dose or C1.} + +\item{df_dose}{A PKNCAdose object. Default from the app is \code{mydose}.} +} +\value{ +A data frame containing the dose intervals and specified pharmacokinetic parameters. +} +\description{ +This function creates a dataset with dose intervals and specified pharmacokinetic parameters. +} +\details{ +The function performs the following steps: +\itemize{ +\item Creates a vector with all pharmacokinetic parameters. +\item Based on dose times, creates a data frame with start and end times. +\item Adds logical columns for each specified parameter. +} +} +\examples{ +\dontrun{ + # Example usage: + dose_intervals <- create_dose_intervals(df_dose, params) +} + +} diff --git a/man/format_data.Rd b/man/format_data.Rd deleted file mode 100644 index ee7a97d2..00000000 --- a/man/format_data.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/format_data.R -\name{format_data} -\alias{format_data} -\title{Format Data for Pharmacokinetic Analysis} -\usage{ -format_data(datafile) -} -\arguments{ -\item{datafile}{A data frame containing the raw data to be formatted.} -} -\value{ -A data frame with formatted concentration and time values. -} -\description{ -This function formats a data file for pharmacokinetic analysis by converting specific -concentration values to numeric and adjusting time based on dose number. -} -\details{ -The function performs the following steps: -\itemize{ -\item{ -Converts concentration values ('AVAL') that are 'BLQ', 'Negative', -'negative', or 'NEGATIVE' to 0. -} -\item{ -Adjusts the time values ('TIME') based on the dose number ('DOSNO'). If 'DOSNO' is 1, -'TIME' is set to 'AFRLT'; otherwise, it is set to 'TIME'. -} -} -} -\examples{ -\dontrun{ - # Example usage: - formatted_data <- format_data(raw_data) -} - -} diff --git a/man/partial_auc_input.Rd b/man/partial_auc_input.Rd new file mode 100644 index 00000000..6bbc8749 --- /dev/null +++ b/man/partial_auc_input.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/partial_auc_input.R +\name{partial_auc_input} +\alias{partial_auc_input} +\title{Define the UI for a single partial AUC input} +\usage{ +partial_auc_input(id, min_sel_value = 0, max_sel_value = NULL) +} +\arguments{ +\item{id}{A unique identifier for the input.} + +\item{min_sel_value}{The default minimum value for the input.} + +\item{max_sel_value}{The default maximum value for the input.} +} +\value{ +A Shiny UI component for creating a partial AUC input. +} +\description{ +Define the UI for a single partial AUC input +} diff --git a/man/reshape_pknca_results.Rd b/man/reshape_pknca_results.Rd index 7800ab38..16268b90 100644 --- a/man/reshape_pknca_results.Rd +++ b/man/reshape_pknca_results.Rd @@ -4,10 +4,10 @@ \alias{reshape_pknca_results} \title{Reshape PKNCA Results} \usage{ -reshape_pknca_results(res_nca) +reshape_pknca_results(myres) } \arguments{ -\item{res_nca}{The output of PKNCA::pk.nca} +\item{myres}{The output of PKNCA::pk.nca} } \value{ A data frame which provides an easy overview on the results from the NCA From b9c26dfc4aaa66c1c8fb4292cbec5bf223fac70e Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 14:11:50 +0100 Subject: [PATCH 36/85] fix: spellcheck added words to WORDLIST --- inst/WORDLIST | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inst/WORDLIST b/inst/WORDLIST index 548d118c..d69e2a8b 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -45,3 +45,5 @@ timepoint visualizable xpt codebase +PKNCAdose +UI \ No newline at end of file From 446cd63e7845325afb4156453f87422fc0f9624b Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 3 Dec 2024 14:56:09 +0100 Subject: [PATCH 37/85] fix: roxygen2 for missing documetnation PKNCA_impute_method_additions.R --- man/PKNCA_impute_method_start_c1.Rd | 34 ++++++++++++++++++++++++++++ man/PKNCA_impute_method_start_log.Rd | 34 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 man/PKNCA_impute_method_start_c1.Rd create mode 100644 man/PKNCA_impute_method_start_log.Rd diff --git a/man/PKNCA_impute_method_start_c1.Rd b/man/PKNCA_impute_method_start_c1.Rd new file mode 100644 index 00000000..0d0cc3c3 --- /dev/null +++ b/man/PKNCA_impute_method_start_c1.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/PKNCA_impute_method_additions.R +\name{PKNCA_impute_method_start_c1} +\alias{PKNCA_impute_method_start_c1} +\title{This function imputes the start concentration using the first concentration after dose} +\usage{ +PKNCA_impute_method_start_c1(conc, time, start, end, ..., options = list()) +} +\arguments{ +\item{conc}{Numeric vector of concentrations.} + +\item{time}{Numeric vector of times corresponding to the concentrations.} + +\item{start}{Numeric value indicating the start/dose time.} + +\item{end}{Numeric value indicating the end time.} + +\item{...}{Additional arguments (currently not used).} + +\item{options}{List of options (currently not used).} +} +\value{ +A data frame with imputed start concentration. +} +\description{ +This function imputes the start concentration using the first concentration after dose +} +\examples{ +conc <- c(1, 2, 3, 4, 5) +time <- c(0, 1, 2, 3, 4) +start <- 0 +end <- 4 +PKNCA_impute_method_start_c1(conc, time, start, end) +} diff --git a/man/PKNCA_impute_method_start_log.Rd b/man/PKNCA_impute_method_start_log.Rd new file mode 100644 index 00000000..6817b202 --- /dev/null +++ b/man/PKNCA_impute_method_start_log.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/PKNCA_impute_method_additions.R +\name{PKNCA_impute_method_start_log} +\alias{PKNCA_impute_method_start_log} +\title{This function imputes the start concentration using the log slope method.} +\usage{ +PKNCA_impute_method_start_log(conc, time, start, end, ..., options = list()) +} +\arguments{ +\item{conc}{Numeric vector of concentrations.} + +\item{time}{Numeric vector of times corresponding to the concentrations.} + +\item{start}{Numeric value indicating the start/dose time.} + +\item{end}{Numeric value indicating the end time.} + +\item{...}{Additional arguments (currently not used).} + +\item{options}{List of options (currently not used).} +} +\value{ +A data frame with imputed start concentration. +} +\description{ +This function imputes the start concentration using the log slope method. +} +\examples{ +conc <- c(1, 2, 3, 4, 5) +time <- c(0, 1, 2, 3, 4) +start <- 0 +end <- 4 +PKNCA_impute_method_start_log(conc, time, start, end) +} From ad4d55a84ce4f7a7800e1fbffd385232817522dc Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 5 Dec 2024 15:03:34 +0100 Subject: [PATCH 38/85] fix: solved issue app crashes with auc rule sets --- R/format_data.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/format_data.R b/R/format_data.R index 485a8390..cfd0f958 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -109,7 +109,8 @@ create_dose <- function(df_conc, create_dose_intervals <- function(mydose = mydose, params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", - "r.squared", "adj.r.squared", "lambda.z.time.first"), + "r.squared", "adj.r.squared", "lambda.z.time.first", + "aucpext.obs", "aucpext.pred"), start_from_last_dose = TRUE) { # Based on dose times create a data frame with start and end times From c5d834c3a967c8f5e30239c94c89567147b0aa77 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 5 Dec 2024 16:11:26 +0100 Subject: [PATCH 39/85] fix: created pknca_trigger to run slope_selector when apply/save changes --- inst/shiny/modules/slope_selector.R | 5 +- inst/shiny/tabs/nca.R | 115 ++++++++++++++-------------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/inst/shiny/modules/slope_selector.R b/inst/shiny/modules/slope_selector.R index d5d0dfd8..5e1be38f 100644 --- a/inst/shiny/modules/slope_selector.R +++ b/inst/shiny/modules/slope_selector.R @@ -95,7 +95,7 @@ slope_selector_ui <- function(id) { .SLOPE_SELECTOR_COLUMNS <- c("TYPE", "PATIENT", "PROFILE", "IXrange", "REASON") slope_selector_server <- function( - id, mydata, res_nca, profiles_per_patient, cycle_nca, rv, settings_upload + id, mydata, res_nca, profiles_per_patient, cycle_nca, pk_nca_trigger, settings_upload ) { moduleServer(id, function(input, output, session) { log_trace("{id}: Attaching server") @@ -354,7 +354,8 @@ slope_selector_server <- function( #' saves and implements provided ruleset observeEvent(input$save_ruleset, { mydata(.filter_slopes(mydata(), manual_slopes(), profiles_per_patient())) - rv$trigger <- rv$trigger + 1 + pk_nca_trigger <- pk_nca_trigger() + pk_nca_trigger(pk_nca_trigger + 1) }) #' Plot data is a local reactive copy of full data. The purpose is to display data that diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 5e5a243b..534ca3e5 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -324,6 +324,7 @@ observeEvent(input$select_analyte, priority = -1, { # Partial AUC Selection auc_counter <- reactiveVal(0) # Initialize a counter for the number of partial AUC inputs intervals_userinput <- reactiveVal(NULL) +pk_nca_trigger <- reactiveVal(0) # Add a new partial AUC input observeEvent(input$addAUC, { @@ -377,76 +378,74 @@ observeEvent(input$nca, { # Update profiles per patient considering the profiles selected profiles_per_patient(tapply(mydata()$conc$data$DOSNO, mydata()$conc$data$USUBJID, unique)) - # Run NCA results - withProgress(message = "Calculating NCA...", value = 0, { - req(mydata()) - - # Increment progress to 50% after getting dataNCA - incProgress(0.5, detail = "Performing NCA calculations...") - - # Use the user inputs to determine the NCA settings to apply - PKNCA::PKNCA.options( - auc.method = input$method, - allow.tmax.in.half.life = TRUE, - keep_interval_cols = c("DOSNO", "type_interval"), - # Make sure the standard options do not prohibit results - min.hl.r.squared = 0.001, - min.span.ratio = Inf, - min.hl.points = 3 - ) + # Use the user inputs to determine the NCA settings to apply + PKNCA::PKNCA.options( + auc.method = input$method, + allow.tmax.in.half.life = TRUE, + keep_interval_cols = c("DOSNO", "type_interval"), + # Make sure the standard options do not prohibit results + min.hl.r.squared = 0.001, + min.span.ratio = Inf, + min.hl.points = 3 + ) - # Load mydata reactive - mydata <- mydata() + # Load mydata reactive + mydata <- mydata() - # Include manual intervals if specified by the user - mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) + # Include manual intervals if specified by the user + mydata$intervals <- bind_rows(mydata$intervals, intervals_userinput()) - # Define start imputations on intervals if specified by the user - if (input$should_impute_c0) { - mydata <- create_c0_impute(mydata = mydata) - mydata$impute <- "impute" + # Define start imputations on intervals if specified by the user + if (input$should_impute_c0) { + mydata <- create_c0_impute(mydata = mydata) + mydata$impute <- "impute" - } else { - # Otherwise, the original intervals should start at C1 for all calculations - mydata <- PKNCA::PKNCAdata( - data.conc = mydata$conc, - data.dose = mydata$dose, - intervals = bind_rows(create_dose_intervals(mydata$dose, - start_from_last_dose = FALSE), - intervals_userinput()), - units = PKNCA::pknca_units_table( - concu = mydata$conc$data$PCSTRESU[1], - doseu = mydata$dose$data$DOSEU[1], - amountu = mydata$conc$data$PCSTRESU[1], - timeu = mydata$conc$data$RRLTU[1] - ) + } else { + # Otherwise, the original intervals should start at C1 for all calculations + mydata <- PKNCA::PKNCAdata( + data.conc = mydata$conc, + data.dose = mydata$dose, + intervals = bind_rows(create_dose_intervals(mydata$dose, + start_from_last_dose = FALSE), + intervals_userinput()), + units = PKNCA::pknca_units_table( + concu = mydata$conc$data$PCSTRESU[1], + doseu = mydata$dose$data$DOSEU[1], + amountu = mydata$conc$data$PCSTRESU[1], + timeu = mydata$conc$data$RRLTU[1] ) - mydata(mydata) - - } - - # Perform NCA on the profiles selected - myres <- PKNCA::pk.nca(data = mydata, verbose = FALSE) + ) + mydata(mydata) + } + + # Perform NCA on the profiles selected + pk_nca_trigger <- pk_nca_trigger() + pk_nca_trigger(pk_nca_trigger + 1) + + # Update panel to show results page + updateTabsetPanel(session, "ncapanel", selected = "Results") +}) - # Make the starts and ends of results relative to last dose - myres$result <- merge(myres$result, mydata$dose$data) %>% - dplyr::mutate(start = start - !!sym(mydata$dose$columns$time), - end = end - !!sym(mydata$dose$columns$time)) %>% - dplyr::select(names(myres$result)) +res_nca <- eventReactive(pk_nca_trigger(), { + req(mydata()) + withProgress(message = "Calculating NCA...", value = 0, { + myres <- PKNCA::pk.nca(data = mydata(), verbose = FALSE) + # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") - + + # Make the starts and ends of results relative to last dose + myres$result <- merge(myres$result, mydata()$dose$data) %>% + dplyr::mutate(start = start - !!sym(mydata()$dose$columns$time), + end = end - !!sym(mydata()$dose$columns$time)) %>% + dplyr::select(names(myres$result)) + # Return the result - myres(myres) - - # Update panel to show results page - updateTabsetPanel(session, "ncapanel", selected = "Results") + return(myres) }) }) -res_nca <- eventReactive(myres(), return(myres())) - # TABSET: Results ============================================================== # In the result tabset we can view the NCA results, slope caclulation und exclusions table. @@ -713,7 +712,7 @@ slope_rules <- slope_selector_server( res_nca, profiles_per_patient, input$select_dosno, - rv, + pk_nca_trigger, reactive(input$settings_upload) ) From fda231d7a0821d49c3778effd4beda1c610c7964 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 5 Dec 2024 16:45:44 +0100 Subject: [PATCH 40/85] refactor: data selection tab with arranged dataset by subject --- inst/shiny/tabs/nca.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 534ca3e5..486141ec 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -192,7 +192,8 @@ observeEvent(input$submit_analyte, priority = 2, { # Segregate the data into concentration and dose records df_conc <- create_conc(ADNCA = data_filt, group_columns = c(group_columns, usubjid_column, analyte_column), - time_column = time_column) + time_column = time_column) %>% + dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) df_dose <- create_dose(df_conc = df_conc, group_columns = c(group_columns, usubjid_column), @@ -417,30 +418,29 @@ observeEvent(input$nca, { ) mydata(mydata) } - + # Perform NCA on the profiles selected pk_nca_trigger <- pk_nca_trigger() pk_nca_trigger(pk_nca_trigger + 1) - + # Update panel to show results page updateTabsetPanel(session, "ncapanel", selected = "Results") }) - res_nca <- eventReactive(pk_nca_trigger(), { req(mydata()) withProgress(message = "Calculating NCA...", value = 0, { myres <- PKNCA::pk.nca(data = mydata(), verbose = FALSE) - + # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") - + # Make the starts and ends of results relative to last dose myres$result <- merge(myres$result, mydata()$dose$data) %>% dplyr::mutate(start = start - !!sym(mydata()$dose$columns$time), end = end - !!sym(mydata()$dose$columns$time)) %>% dplyr::select(names(myres$result)) - + # Return the result return(myres) }) From baecfb818ee23e2ff5707cfbe6f149838272a71b Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 6 Dec 2024 10:13:54 +0100 Subject: [PATCH 41/85] aesthetics: add hovering message and new label in checkbox C0 imputations --- inst/shiny/ui.R | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index 1ec80ee2..e6df9412 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -65,9 +65,20 @@ fluidPage( selected = "lin up/log down" ), h4("Data imputation"), + tags$div( checkboxInput(inputId = "should_impute_c0", - label = "Impute C0 when missing", + label = "Impute concentration at t0 when missing", value = TRUE), + id = "checkbox_id", + title = paste( + "Imputes a start-of-interval concentration for calculating non-observational parameters:", + "If DOSNO = 1 & IV bolus: C0 = 0", + "If DOSNO > 1 & not IV bolus: C0 = predose", + "If IV bolus & monoexponential data: logslope", + "If IV bolus & not monoexponential data: C0 = C1", + sep = "\n" + ) + ), br(), checkboxInput("AUCoptions", "Select Partial AUC"), conditionalPanel( From f29cff01780bd3d83f91300096e31cafac607171 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 6 Dec 2024 11:49:53 +0100 Subject: [PATCH 42/85] fix: lintr, roxygen doc and clast added to default params in NCA --- R/format_data.R | 2 +- inst/shiny/ui.R | 25 ++++++++++++------------- man/create_dose_intervals.Rd | 5 +++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index cfd0f958..561f67e0 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -110,7 +110,7 @@ create_dose_intervals <- function(mydose = mydose, params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first", - "aucpext.obs", "aucpext.pred"), + "aucpext.obs", "aucpext.pred", "clast.obs"), start_from_last_dose = TRUE) { # Based on dose times create a data frame with start and end times diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index e6df9412..607ce6b5 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -65,19 +65,18 @@ fluidPage( selected = "lin up/log down" ), h4("Data imputation"), - tags$div( - checkboxInput(inputId = "should_impute_c0", - label = "Impute concentration at t0 when missing", - value = TRUE), - id = "checkbox_id", - title = paste( - "Imputes a start-of-interval concentration for calculating non-observational parameters:", - "If DOSNO = 1 & IV bolus: C0 = 0", - "If DOSNO > 1 & not IV bolus: C0 = predose", - "If IV bolus & monoexponential data: logslope", - "If IV bolus & not monoexponential data: C0 = C1", - sep = "\n" - ) + tags$div(checkboxInput(inputId = "should_impute_c0", + label = "Impute concentration at t0 when missing", + value = TRUE), + id = "checkbox_id", + title = paste( + "Imputes a start-of-interval concentration + to calculate non-observational parameters:", + "If DOSNO = 1 & IV bolus: C0 = 0", + "If DOSNO > 1 & not IV bolus: C0 = predose", + "If IV bolus & monoexponential data: logslope", + "If IV bolus & not monoexponential data: C0 = C1", + sep = "\n") ), br(), checkboxInput("AUCoptions", "Select Partial AUC"), diff --git a/man/create_dose_intervals.Rd b/man/create_dose_intervals.Rd index a0aba515..0ea6f440 100644 --- a/man/create_dose_intervals.Rd +++ b/man/create_dose_intervals.Rd @@ -6,8 +6,9 @@ \usage{ create_dose_intervals( mydose = mydose, - params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", - "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first"), + params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "clast.obs", "half.life", + "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", + "lambda.z.time.first", "aucpext.obs", "aucpext.pred"), start_from_last_dose = TRUE ) } From 54315df9ee46cd579b19604e758d457bd7ebaafc Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 9 Dec 2024 14:16:56 +0100 Subject: [PATCH 43/85] fix: reporting all parameters instead of just auc related for intervals --- R/reshape_PKNCA_results.R | 4 ++-- inst/shiny/tabs/nca.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 35362510..945341c5 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -64,7 +64,7 @@ reshape_pknca_results <- function(myres) { if (any(myres$result$type_interval == "manual")) { interval_aucs_vals <- myres$result %>% - filter(type_interval == "manual") %>% + filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) @@ -73,7 +73,7 @@ reshape_pknca_results <- function(myres) { pivot_wider(names_from = interval_name_col, values_from = PPORRES) interval_aucs_exclude <- myres$result %>% - filter(type_interval == "manual") %>% + filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 486141ec..2f994838 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -416,8 +416,8 @@ observeEvent(input$nca, { timeu = mydata$conc$data$RRLTU[1] ) ) - mydata(mydata) } + mydata(mydata) # Perform NCA on the profiles selected pk_nca_trigger <- pk_nca_trigger() From de139f70de02085728ffa332ebee9ca21be8d7d6 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 10 Dec 2024 15:12:52 +0100 Subject: [PATCH 44/85] documentation: roxygen update --- man/create_dose_intervals.Rd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/man/create_dose_intervals.Rd b/man/create_dose_intervals.Rd index 0ea6f440..ee7c575b 100644 --- a/man/create_dose_intervals.Rd +++ b/man/create_dose_intervals.Rd @@ -6,9 +6,9 @@ \usage{ create_dose_intervals( mydose = mydose, - params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "clast.obs", "half.life", - "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", - "lambda.z.time.first", "aucpext.obs", "aucpext.pred"), + params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", + "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first", + "aucpext.obs", "aucpext.pred", "clast.obs"), start_from_last_dose = TRUE ) } From 09ba650eb0aa17375614c220b000626e2fcf006a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 19 Dec 2024 09:51:34 +0100 Subject: [PATCH 45/85] fix: delete partial_auc_input.R from R/ folder and leave in inst/shiny/functions --- R/partial_auc_input.R | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 R/partial_auc_input.R diff --git a/R/partial_auc_input.R b/R/partial_auc_input.R deleted file mode 100644 index 30c0d132..00000000 --- a/R/partial_auc_input.R +++ /dev/null @@ -1,21 +0,0 @@ -#' Define the UI for a single partial AUC input -#' -#' @param id A unique identifier for the input. -#' @param min_sel_value The default minimum value for the input. -#' @param max_sel_value The default maximum value for the input. -#' -#' @return A Shiny UI component for creating a partial AUC input. -#' -#' - -partial_auc_input <- function(id, min_sel_value = 0, max_sel_value = NULL) { - fluidRow( - id = id, - column( - width = 6, numericInput(paste0("timeInputMin_", id), "Min:", min = 0, value = min_sel_value) - ), - column( - width = 6, numericInput(paste0("timeInputMax_", id), "Max:", min = 0, value = max_sel_value) - ) - ) -} From 4d608ac3a4945eb35c1d981e878728c03f0f42b0 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 19 Dec 2024 17:28:29 +0100 Subject: [PATCH 46/85] fix: add tests and prevent input errors in format_data.R functions --- R/format_data.R | 38 +++- tests/testthat/test-format_data.R | 288 ++++++++++++++++++++++++++++++ 2 files changed, 321 insertions(+), 5 deletions(-) create mode 100644 tests/testthat/test-format_data.R diff --git a/R/format_data.R b/R/format_data.R index 561f67e0..1eb3d795 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -31,6 +31,15 @@ create_conc <- function(ADNCA, group_columns, time_column = "AFRLT") { + if (nrow(ADNCA) == 0) { + stop("Input dataframe is empty. Please provide a valid ADNCA dataframe.") + } + + missing_columns <- setdiff(c(group_columns, time_column), colnames(ADNCA)) + if (length(missing_columns) > 0) { + stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) + } + data <- ADNCA %>% dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% dplyr::arrange(!!sym(time_column)) %>% @@ -69,7 +78,17 @@ create_conc <- function(ADNCA, create_dose <- function(df_conc, group_columns, time_column = "AFRLT", - since_lastdose_time_column = "ARRLT") { + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") { + if (nrow(df_conc) == 0) { + stop("Input dataframe is empty. Please provide a valid concentration dataframe.") + } + + required_columns <- c(group_columns, time_column, since_lastdose_time_column, route_column) + missing_columns <- setdiff(required_columns, colnames(df_conc)) + if (length(missing_columns) > 0) { + stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) + } df_conc %>% dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% @@ -77,7 +96,8 @@ create_dose <- function(df_conc, dplyr::arrange(!!sym(since_lastdose_time_column) < 0, !!sym(since_lastdose_time_column)) %>% dplyr::slice(1) %>% - dplyr::ungroup() + dplyr::ungroup() %>% + dplyr::mutate(ROUTE = !!sym(route_column)) } #' Create Dose Intervals Dataset @@ -112,16 +132,24 @@ create_dose_intervals <- function(mydose = mydose, "r.squared", "adj.r.squared", "lambda.z.time.first", "aucpext.obs", "aucpext.pred", "clast.obs"), start_from_last_dose = TRUE) { + if (!inherits(mydose, "PKNCAdose")) { + stop("Input must be a PKNCAdose object from the PKNCA package.") + } + + required_columns <- c(unname(unlist(mydose$columns$groups)), mydose$columns$time) + missing_columns <- setdiff(required_columns, colnames(mydose$data)) + if (length(missing_columns) > 0) { + stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) + } # Based on dose times create a data frame with start and end times dose_intervals <- mydose$data %>% group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% dplyr::arrange(!!sym(mydose$columns$time)) %>% mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) else !!sym("AFRLT"), - end = lead(!!sym(mydose$columns$time), - default = Inf)) %>% + end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% ungroup() %>% - select(start, end, unname(unlist(mydose$columns$groups)), DOSNO) %>% + select(any_of(c("start", "end", unname(unlist(mydose$columns$groups)), "DOSNO"))) %>% # Create logical columns with the TRUE and as names params argument mutate(!!!setNames(rep(TRUE, length(params)), params)) %>% diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R new file mode 100644 index 00000000..ecbddc26 --- /dev/null +++ b/tests/testthat/test-format_data.R @@ -0,0 +1,288 @@ +library(testthat) +library(dplyr) +library(PKNCA) + +test_that("create_conc generates correct dataset", { + # Generate sample ADNCA data + ADNCA <- data.frame( + STUDYID = rep(1, 10), + USUBJID = rep(1:2, each = 5), + PCSPEC = rep("Plasma", 10), + DRUG = rep("DrugA", 10), + ANALYTE = rep("Analyte1", 10), + AFRLT = seq(0, 9), + AVAL = runif(10) + ) + + # Call create_conc + df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") + + # Test if df_conc is a data frame + expect_s3_class(df_conc, "data.frame") + + # Test if df_conc has the correct columns + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "AFRLT", "AVAL", "conc_groups", "TIME", "IX") %in% colnames(df_conc))) + + # Test if df_conc is correctly grouped and arranged + expect_equal(df_conc$TIME, df_conc$AFRLT) + expect_equal(df_conc$IX, rep(1:5, 2)) + + # Test if df_conc can be used with PKNCAconc by testing its output + expect_s3_class( + PKNCAconc( + df_conc, + formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, + exclude_half.life = "exclude_half.life", + time.nominal = "NFRLT" + ), + "PKNCAconc" + ) +}) + +test_that("create_conc generates correct dataset with multiple doses", { + # Generate sample ADNCA data with at least two doses per subject + ADNCA <- data.frame( + STUDYID = rep(1, 20), + USUBJID = rep(1:2, each = 10), + PCSPEC = rep("Plasma", 20), + DRUG = rep("DrugA", 20), + ANALYTE = rep("Analyte1", 20), + AFRLT = rep(seq(0, 9), 2), + ARRLT = c(rep(seq(0, 4), 2), rep(seq(0, 4), 2)), + ROUTE = "intravascular", + DOSNO = rep(rep(1:2, each = 5), 2), + AVAL = runif(20) + ) + + # Call create_conc + df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "DOSNO"), time_column = "AFRLT") + + # Test if df_conc is a data frame + expect_s3_class(df_conc, "data.frame") + + # Test if df_conc has the correct columns + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "DOSNO", "AFRLT", "AVAL", "conc_groups", "TIME", "IX") %in% colnames(df_conc))) + + # Test if df_conc is correctly grouped and arranged + expect_equal(df_conc$TIME, df_conc$AFRLT) + expect_equal(df_conc %>% + dplyr::arrange(USUBJID, DOSNO) %>% + dplyr::pull(IX), + rep(1:5, 4)) + + # Test if df_conc can be used with PKNCAconc by testing its output + expect_s3_class( + PKNCAconc( + df_conc, + formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, + exclude_half.life = "exclude_half.life", + time.nominal = "NFRLT" + ), + "PKNCAconc" + ) +}) + +test_that("create_conc handles empty input", { + ADNCA <- data.frame() + expect_error(create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT"), + regexp = "Input dataframe is empty. Please provide a valid ADNCA dataframe.") +}) + +test_that("create_conc handles missing columns", { + ADNCA <- data.frame( + STUDYID = rep(1, 10), + USUBJID = rep(1:2, each = 5), + PCSPEC = rep("Plasma", 10), + DRUG = rep("DrugA", 10), + AFRLT = seq(0, 9), + AVAL = runif(10) + ) + expect_error(create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT"), + regexp = "Missing required columns: ANALYTE") +}) + +test_that("create_conc handles multiple analytes", { + ADNCA <- data.frame( + STUDYID = rep(1, 20), + USUBJID = rep(1, each = 10), + PCSPEC = rep("Plasma", 20), + DRUG = rep("DrugA", 20), + ANALYTE = rep(c("Analyte1", "Analyte2"), each = 10), + AFRLT = rep(seq(0, 9), 2), + ARRLT = rep(seq(0, 9), 2), + AVAL = runif(20) + ) + df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") + expect_equal(nrow(df_conc), 20) + expect_equal(length(unique(df_conc$ANALYTE)), 2) +}) + +test_that("create_dose generates correct dataset", { + # Generate sample ADNCA data with at least two doses per subject + ADNCA <- data.frame( + STUDYID = rep(1, 20), + USUBJID = rep(1:2, each = 10), + PCSPEC = rep("Plasma", 20), + DRUG = rep("DrugA", 20), + ANALYTE = rep("Analyte1", 20), + AFRLT = rep(seq(0, 9), 2), + ARRLT = rep(seq(0, 4), 4), + NFRLT = rep(seq(0, 9), 2), + DOSEA = rep(c(5, 10), each = 10), + ROUTE = rep(c("intravascular", "extravascular"), each = 10), + ADOSEDUR = rep(c(0, 0), each = 10), + AVAL = runif(20) + ) + + # Call create_conc + df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") + + # Call create_dose + df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + + # Test if df_dose is a data frame + expect_s3_class(df_dose, "data.frame") + + # Test if df_dose has the correct columns + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "AFRLT", "ARRLT", "AVAL", "conc_groups", "TIME", "IX", "ROUTE") %in% colnames(df_dose))) + + # Test if df_dose can be used with PKNCAdose by testing its output + expect_s3_class( + PKNCAdose( + data = df_dose, + formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID, + route = "ROUTE", + time.nominal = "NFRLT", + duration = "ADOSEDUR" + ), + "PKNCAdose" + ) + + # Test if each subject has at least two doses + dose_counts <- df_dose %>% group_by(USUBJID) %>% summarise(n = n()) + expect_true(all(dose_counts$n >= 2)) +}) + +test_that("create_dose handles empty input", { + df_conc <- data.frame() + expect_error(create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE"), + regexp = "Input dataframe is empty. Please provide a valid concentration dataframe.") +}) + +test_that("create_dose_intervals handles empty input", { + mydose <- list(data = data.frame(), columns = list(groups = c("STUDYID", "USUBJID"), time = "TIME")) + expect_error(create_dose_intervals(mydose), + regexp = "Input dataframe is empty. Please provide a valid dose dataframe.") +}) + +test_that("create_dose_intervals handles incorrect input type", { + mydose <- list(data = data.frame(STUDYID = 1, USUBJID = 1, TIME = 0), columns = list(groups = c("STUDYID", "USUBJID"), time = "TIME")) + expect_error(create_dose_intervals(mydose), + regexp = "Input must be a PKNCAdose object from the PKNCA package.") +}) + +test_that("create_dose handles negative time values", { + df_conc <- data.frame( + STUDYID = rep(1, 10), + USUBJID = rep(1:2, each = 5), + PCSPEC = rep("Plasma", 10), + DRUG = rep("DrugA", 10), + ANALYTE = rep("Analyte1", 10), + AFRLT = c(-1, 0, 1, 2, 3, -1, 0, 1, 2, 3), + ARRLT = c(-1, 0, 1, 2, 3, -1, 0, 1, 2, 3), + ROUTE = rep(c("intravascular", "extravascular"), each = 5), + DOSEA = 10, + AVAL = runif(10) + ) + df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + expect_true(all(df_dose$AFRLT >= 0)) +}) + +test_that("create_dose handles multiple analytes", { + df_conc <- data.frame( + STUDYID = rep(1, 20), + USUBJID = rep(1:2, each = 10), + PCSPEC = rep("Plasma", 20), + DRUG = rep("DrugA", 20), + ANALYTE = rep(rep(c("Analyte1", "Analyte2"), 2), each = 5), + AFRLT = rep(seq(0, 9), 2), + ARRLT = c(rep(seq(0, 4), 2), rep(seq(5, 9), 2)), + ROUTE = rep(c("intravascular", "extravascular"), each = 10), + DOSEA = 10, + AVAL = runif(20) + ) + df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + expect_equal(nrow(df_dose), 4) + expect_equal(length(unique(df_dose$ANALYTE)), 2) +}) + +test_that("create_dose_intervals generates correct dataset", { + # Generate sample ADNCA data with at least two doses per subject + ADNCA <- data.frame( + STUDYID = rep(1, 20), + USUBJID = rep(1:2, each = 10), + PCSPEC = rep("Plasma", 20), + DRUG = rep("DrugA", 20), + ANALYTE = rep("Analyte1", 20), + AFRLT = rep(seq(0, 9), 2), + ARRLT = c(rep(seq(0, 4), 2), rep(seq(5, 9), 2)), + NFRLT = rep(seq(0, 9), 2), + ROUTE = "extravascular", + DOSEA = 10, + ADOSEDUR = 0, + AVAL = runif(20) + ) + + # Call create_conc + df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") + + # Call create_dose + df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + + # Generate PKNCAconc and PKNCAdose objects + myconc <- PKNCAconc( + df_conc, + formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, + exclude_half.life = "exclude_half.life", + time.nominal = "NFRLT" + ) + + mydose <- PKNCAdose( + data = df_dose, + formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID, + route = "ROUTE", + time.nominal = "NFRLT", + duration = "ADOSEDUR" + ) + + # Define the other arguments for the dose intervals + params <- c("cmax", "tmax", "half.life") + + # Call create_dose_intervals + myintervals <- create_dose_intervals(mydose, params = params, start_from_last_dose = TRUE) + + # Test if myintervals is a data frame + expect_s3_class(myintervals, "data.frame") + + # Test if myintervals has the correct columns + expect_true(all(c("start", "end", "STUDYID", "USUBJID", "type_interval") %in% colnames(myintervals))) + + # Test if interval types are classified as "main" + expect_true(all(myintervals$type_interval == "main")) + + # Test if myintervals can be used with PKNCAdata by testing its output + expect_s3_class( + PKNCA::PKNCAdata( + data.conc = myconc, + data.dose = mydose, + intervals = myintervals, + units = PKNCA::pknca_units_table( + concu = myconc$data$PCSTRESU[1], + doseu = myconc$data$DOSEU[1], + amountu = myconc$data$PCSTRESU[1], + timeu = myconc$data$RRLTU[1] + ) + ), + "PKNCAdata" + ) +}) From 21b1b68afdfeea3e5883311316d449afdf988d4c Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 20 Dec 2024 10:27:49 +0100 Subject: [PATCH 47/85] fix: issue with select_analyte after merge --- inst/shiny/tabs/nca.R | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 9483f188..ece87065 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -307,6 +307,7 @@ observe({ # Choose dosenumbers to be analyzed observeEvent(input$select_analyte, priority = -1, { + req(data()) doses_options <- data() %>% filter(ANALYTE == input$select_analyte) %>% pull(DOSNO) %>% From 2a4d8b6ff280e554398ffd0e0d66e99a41b69fa4 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 20 Dec 2024 12:19:28 +0100 Subject: [PATCH 48/85] test: add tests for PKNCA_impute_method_additions.R and prevent NA in start_log --- R/PKNCA_impute_method_additions.R | 6 ++- .../test-PKNCA_impute_method_additions.R | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 tests/testthat/test-PKNCA_impute_method_additions.R diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index 2c64ab0c..dd0cbee6 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -26,8 +26,10 @@ PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { c0 <- PKNCA::pk.calc.c0(all_concs, all_times, method = "logslope") - ret <- rbind(ret, data.frame(time = start, conc = c0)) - ret <- ret[order(ret$time), ] + if (!is.na(c0)) { + ret <- rbind(ret, data.frame(time = start, conc = c0)) + ret <- ret[order(ret$time), ] + } } } ret diff --git a/tests/testthat/test-PKNCA_impute_method_additions.R b/tests/testthat/test-PKNCA_impute_method_additions.R new file mode 100644 index 00000000..776622e7 --- /dev/null +++ b/tests/testthat/test-PKNCA_impute_method_additions.R @@ -0,0 +1,51 @@ +test_that("PKNCA_impute_method_start_log", { + # No imputation when start is in the data + expect_equal( + PKNCA_impute_method_start_log(conc = 3:1, time = 0:2, start = 0, end = 2), + data.frame(conc = 3:1, time = 0:2) + ) + # Impute when start is not in the data + expect_equal( + PKNCA_impute_method_start_log(conc = 3:1, time = 1:3, start = 0, end = 3), + data.frame(conc = c(4.5, 3:1), time = 0:3), + ignore_attr = TRUE + ) + # Data outside the interval are ignored (before interval) + expect_equal( + PKNCA_impute_method_start_log(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), + data.frame(conc = c(0, 4, 2:1), time = c(-1, 0, 1:2)), + ignore_attr = TRUE + ) + # No modification if no C1 -> C2 decline in samples + expect_equal( + PKNCA_impute_method_start_log(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), + data.frame(conc = c(1, 1, 1), time = 1:3), + ignore_attr = TRUE + ) + # No modification if C1 = C2 in samples + expect_equal( + PKNCA_impute_method_start_log(conc = c(3,3,1), time = 1:3, start = 0, end = 3), + data.frame(conc = c(3, 3, 1), time = 1:3), + ignore_attr = TRUE + ) +}) + +test_that("PKNCA_impute_method_start_c1", { + # No imputation when start is in the data + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = 0:2, start = 0, end = 2), + data.frame(conc = 1:3, time = 0:2) + ) + # Impute when start is not in the data + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = 1:3, start = 0, end = 3), + data.frame(conc = c(1, 1:3), time = 0:3), + ignore_attr = TRUE + ) + # Data outside the interval are ignored (before interval) + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = c(-1, 1:2), start = 0, end = 2), + data.frame(conc = c(1, 2, 2:3), time = c(-1, 0, 1:2)), + ignore_attr = TRUE + ) +}) From db2b8e8865e35683daf46cb464a27b7251c2b2a1 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 27 Dec 2024 11:11:42 +0100 Subject: [PATCH 49/85] refactor: create_c0_impute testing, column preventions and renaming (create_start_impute) --- ..._impute_column.R => create_start_impute.R} | 56 +++++++-- inst/shiny/tabs/nca.R | 2 +- tests/testthat/test-create_start_impute.R | 106 ++++++++++++++++++ 3 files changed, 156 insertions(+), 8 deletions(-) rename R/{create_c0_impute_column.R => create_start_impute.R} (53%) create mode 100644 tests/testthat/test-create_start_impute.R diff --git a/R/create_c0_impute_column.R b/R/create_start_impute.R similarity index 53% rename from R/create_c0_impute_column.R rename to R/create_start_impute.R index 90d15737..219577c7 100644 --- a/R/create_c0_impute_column.R +++ b/R/create_start_impute.R @@ -1,4 +1,19 @@ -create_c0_impute <- function(mydata) { +#' Create C0 Impute Column +#' +#' Defines an impute column in the intervals of the PKNCAdata object based on data +#' +#' @param mydata A PKNCAdata object containing concentration and dose data. +#' @return A PKNCAdata object with updated intervals table including start imputation strategies. +#' @import dplyr +#' @importFrom rlang sym +#' @importFrom PKNCA pk.calc.c0 +#' @export +#' +#' @examples +#' \dontrun{ +#' mydata <- create_start_impute(mydata) +#' } +create_start_impute <- function(mydata) { # Define columns conc_column <- mydata$conc$columns$conc @@ -7,18 +22,44 @@ create_c0_impute <- function(mydata) { route_column <- mydata$dose$columns$route duration_column <- mydata$dose$columns$duration drug_column <- "DRUG" # At some point should be added at least manually in PKNCA mydata object - group_columns <- unique(c(unname(unlist(mydata$conc$columns$groups)), - unname(unlist(mydata$dose$columns$groups)))) + conc_group_columns <- unname(unlist(mydata$conc$columns$groups)) + dose_group_columns <- unname(unlist(mydata$dose$columns$groups)) + group_columns <- unique(c(conc_group_columns, dose_group_columns)) + + # Define dose number (DOSNO) if not present in dose data + if (!"DOSNO" %in% mydata$dose$data) { + mydata$dose$data <- mydata$dose$data %>% + group_by(across(all_of(c(unname(unlist(mydata$dose$columns$groups)))))) %>% + mutate(DOSNO = row_number()) %>% + ungroup() + } mydata_with_int <- merge( - x = mydata$conc$data, - y = mydata$dose$data[, group_columns] + x = mydata$conc$data %>% + dplyr::select(any_of(c(conc_group_columns, conc_column, time_column))), + y = mydata$dose$data %>% + dplyr::select(any_of(c(dose_group_columns, route_column, + duration_column, "DOSNO", "DRUG"))) ) %>% merge(mydata$intervals) + # Define dosing drug as analyte if not present + if (!"DRUG" %in% colnames(mydata_with_int)) { + if (length(analyte_column) == 1) { + mydata_with_int <- mydata_with_int %>% + mutate(DRUG = !!sym(analyte_column)) + drug_column <- "DRUG" + } else { + mydata_with_int <- mydata_with_int %>% + mutate(DRUG = "A", ANALYTE = "A") + drug_column <- "DRUG" + analyte_column <- "ANALYTE" + } + } + # Process imputation strategy based on each interval new_intervals <- mydata_with_int %>% - group_by(across(all_of(c(group_columns, "start", "end")))) %>% + group_by(across(all_of(c(group_columns, "DOSNO", "start", "end")))) %>% arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate( vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), @@ -28,6 +69,7 @@ create_c0_impute <- function(mydata) { (!!sym(time_column) - start)) %>% slice(1) %>% ungroup() %>% + rowwise() %>% mutate( impute = case_when( !!sym(time_column) == start & !is.na(!!sym(conc_column)) ~ NA, @@ -44,7 +86,7 @@ create_c0_impute <- function(mydata) { !!sym(analyte_column) == !!sym(drug_column) & !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), time = eval(parse(text = vr_times)), - time.dose = start[1], + time.dose = start, method = "logslope")) ~ "start_logslope", tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index ece87065..7cbd12d6 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -399,7 +399,7 @@ observeEvent(input$nca, { # Define start imputations on intervals if specified by the user if (input$should_impute_c0) { - mydata <- create_c0_impute(mydata = mydata) + mydata <- create_start_impute(mydata = mydata) mydata$impute <- "impute" } else { diff --git a/tests/testthat/test-create_start_impute.R b/tests/testthat/test-create_start_impute.R new file mode 100644 index 00000000..4a5b9810 --- /dev/null +++ b/tests/testthat/test-create_start_impute.R @@ -0,0 +1,106 @@ +library(testthat) +library(dplyr) +library(PKNCA) + +# Create concentration, dose and interval datasets with all imputation cases +conc_data <- data.frame( + conc = c(1:3, c(1, 2, 0.5), 1:3, 6:4, 6:4, rep(2, 3), 1:3, 6:4), + time = c(0:2, c(1, 2, 2.5), 4:6, c(1, 2, 2.5), 4:6, c(1, 2, 2.5), c(1, 2, 2.5), c(1, 2, 2.5)), + route = c(rep("extravascular", 9), rep("intravascular", 15)), + analyte = c(rep("A", 21), rep("B", 3)), + USUBJID = c(rep(1, 3), rep(2, 6), rep(3, 6), rep(4, 3), rep(5, 3), rep(6, 3)), + DOSNO = c(rep(1, 3), rep(rep(1:2, each = 3), 2), rep(1, 3), rep(1, 3), rep(1, 3)) +) + +dose_data <- data.frame( + time = c(0, 0, 3, 0, 3, 0, 0, 0), + route = c(rep("extravascular", 3), rep("intravascular", 5)), + dose = 1, + DRUG = "A", + duration = c(0, 0, 0, 0, 0, 0, 1, 0), + USUBJID = c(1, rep(2, 2), rep(3, 2), 4, 5, 6), + DOSNO = c(1, rep(c(1, 2), each = 2), 1, 1, 1) +) + +intervals_data <- data.frame( + start = c(0, 0, 3, 0, 3, 0, 0, 0), + end = c(3, 3, 6, 3, 6, 3, 3, 3), + USUBJID = c(1, rep(2, 2), rep(3, 2), 4, 5, 6), + DOSNO = c(1, 1, 2, 1, 2, 1, 1, 1), # Include second dose profile for USUBJID 6 + tmax = TRUE, + auc.obs = TRUE, + auc.pred = TRUE +) + +conc_obj <- PKNCAconc(conc_data, conc ~ time | USUBJID + DOSNO / analyte) +dose_obj <- PKNCAdose(dose_data, dose ~ time | USUBJID + DOSNO, + duration = "duration", route = "route") +mydata <- PKNCAdata(conc_obj, dose_obj, intervals = intervals_data) + +# Apply the function +result <- create_start_impute(mydata) + + +test_that("create_start_impute does not add impute (NA) when start is in PKNCAconc", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 1, DOSNO == 1) %>% + dplyr::pull(impute), + NA_character_) +}) + +test_that("create_start_impute: conc0 when route is extravascular (first dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 2, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") +}) + +test_that("create_start_impute: predose when route is extravascular (later dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 2, DOSNO == 2) %>% + dplyr::pull(impute), + "start_predose") +}) + +test_that("create_start_impute: logslope when route is IV bolus (first dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 3, DOSNO == 1) %>% + dplyr::pull(impute), + "start_logslope") +}) + +test_that("create_start_impute: logslope when route is IV bolus (later dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 3, DOSNO == 2) %>% + dplyr::pull(impute), + "start_logslope") +}) + +test_that("create_start_impute: c1 when route is IV bolus not monodecaying (first dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 4, DOSNO == 1) %>% + dplyr::pull(impute), + "start_c1") +}) + +test_that("create_start_impute: conc0 when route is IV bolus not monodecaying (first dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 5, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") +}) + +test_that("create_start_impute: conc0 when route is IV bolus not monodecaying (first dose)", { + # Check the values in the impute column + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 6, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") +}) From 61d3ae185990ea2f2d93e48dda012a7ddf4cee3f Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 27 Dec 2024 12:48:49 +0100 Subject: [PATCH 50/85] fix: lintr code cleaning and roxygen documentation --- NAMESPACE | 3 + R/format_data.R | 8 +- man/create_dose.Rd | 3 +- man/create_start_impute.Rd | 22 +++ man/partial_auc_input.Rd | 21 --- .../test-PKNCA_impute_method_additions.R | 2 +- tests/testthat/test-format_data.R | 140 ++++++++++++------ 7 files changed, 125 insertions(+), 74 deletions(-) create mode 100644 man/create_start_impute.Rd delete mode 100644 man/partial_auc_input.Rd diff --git a/NAMESPACE b/NAMESPACE index 542d2e42..78c143aa 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,6 +9,7 @@ export(calculate_summary_stats) export(create_conc) export(create_dose) export(create_dose_intervals) +export(create_start_impute) export(filter_breaks) export(flexible_violinboxplot) export(general_lineplot) @@ -38,6 +39,7 @@ importFrom(PKNCA,PKNCA.options) importFrom(PKNCA,PKNCAconc) importFrom(PKNCA,PKNCAdata) importFrom(PKNCA,PKNCAdose) +importFrom(PKNCA,pk.calc.c0) importFrom(PKNCA,pk.nca) importFrom(PKNCA,pknca_units_table) importFrom(dplyr,across) @@ -86,6 +88,7 @@ importFrom(reactable,renderReactable) importFrom(reactable.extras,dropdown_extra) importFrom(reactable.extras,text_extra) importFrom(rio,export_list) +importFrom(rlang,sym) importFrom(rmarkdown,render) importFrom(shinyBS,bsModal) importFrom(shinyFiles,shinyDirChoose) diff --git a/R/format_data.R b/R/format_data.R index 1eb3d795..2a135f73 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -34,12 +34,12 @@ create_conc <- function(ADNCA, if (nrow(ADNCA) == 0) { stop("Input dataframe is empty. Please provide a valid ADNCA dataframe.") } - + missing_columns <- setdiff(c(group_columns, time_column), colnames(ADNCA)) if (length(missing_columns) > 0) { stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } - + data <- ADNCA %>% dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% dplyr::arrange(!!sym(time_column)) %>% @@ -83,7 +83,7 @@ create_dose <- function(df_conc, if (nrow(df_conc) == 0) { stop("Input dataframe is empty. Please provide a valid concentration dataframe.") } - + required_columns <- c(group_columns, time_column, since_lastdose_time_column, route_column) missing_columns <- setdiff(required_columns, colnames(df_conc)) if (length(missing_columns) > 0) { @@ -135,7 +135,7 @@ create_dose_intervals <- function(mydose = mydose, if (!inherits(mydose, "PKNCAdose")) { stop("Input must be a PKNCAdose object from the PKNCA package.") } - + required_columns <- c(unname(unlist(mydose$columns$groups)), mydose$columns$time) missing_columns <- setdiff(required_columns, colnames(mydose$data)) if (length(missing_columns) > 0) { diff --git a/man/create_dose.Rd b/man/create_dose.Rd index 633c8c32..70d30fc2 100644 --- a/man/create_dose.Rd +++ b/man/create_dose.Rd @@ -8,7 +8,8 @@ create_dose( df_conc, group_columns, time_column = "AFRLT", - since_lastdose_time_column = "ARRLT" + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE" ) } \arguments{ diff --git a/man/create_start_impute.Rd b/man/create_start_impute.Rd new file mode 100644 index 00000000..caae391b --- /dev/null +++ b/man/create_start_impute.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_start_impute.R +\name{create_start_impute} +\alias{create_start_impute} +\title{Create C0 Impute Column} +\usage{ +create_start_impute(mydata) +} +\arguments{ +\item{mydata}{A PKNCAdata object containing concentration and dose data.} +} +\value{ +A PKNCAdata object with updated intervals table including start imputation strategies. +} +\description{ +Defines an impute column in the intervals of the PKNCAdata object based on data +} +\examples{ +\dontrun{ +mydata <- create_start_impute(mydata) +} +} diff --git a/man/partial_auc_input.Rd b/man/partial_auc_input.Rd deleted file mode 100644 index 6bbc8749..00000000 --- a/man/partial_auc_input.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/partial_auc_input.R -\name{partial_auc_input} -\alias{partial_auc_input} -\title{Define the UI for a single partial AUC input} -\usage{ -partial_auc_input(id, min_sel_value = 0, max_sel_value = NULL) -} -\arguments{ -\item{id}{A unique identifier for the input.} - -\item{min_sel_value}{The default minimum value for the input.} - -\item{max_sel_value}{The default maximum value for the input.} -} -\value{ -A Shiny UI component for creating a partial AUC input. -} -\description{ -Define the UI for a single partial AUC input -} diff --git a/tests/testthat/test-PKNCA_impute_method_additions.R b/tests/testthat/test-PKNCA_impute_method_additions.R index 776622e7..bdc51c7f 100644 --- a/tests/testthat/test-PKNCA_impute_method_additions.R +++ b/tests/testthat/test-PKNCA_impute_method_additions.R @@ -24,7 +24,7 @@ test_that("PKNCA_impute_method_start_log", { ) # No modification if C1 = C2 in samples expect_equal( - PKNCA_impute_method_start_log(conc = c(3,3,1), time = 1:3, start = 0, end = 3), + PKNCA_impute_method_start_log(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), data.frame(conc = c(3, 3, 1), time = 1:3), ignore_attr = TRUE ) diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index ecbddc26..c345b25e 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -13,20 +13,23 @@ test_that("create_conc generates correct dataset", { AFRLT = seq(0, 9), AVAL = runif(10) ) - + # Call create_conc - df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") - + df_conc <- create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT") + # Test if df_conc is a data frame expect_s3_class(df_conc, "data.frame") - + # Test if df_conc has the correct columns - expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "AFRLT", "AVAL", "conc_groups", "TIME", "IX") %in% colnames(df_conc))) - + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", + "AFRLT", "AVAL", "conc_groups", "TIME", "IX") %in% colnames(df_conc))) + # Test if df_conc is correctly grouped and arranged expect_equal(df_conc$TIME, df_conc$AFRLT) expect_equal(df_conc$IX, rep(1:5, 2)) - + # Test if df_conc can be used with PKNCAconc by testing its output expect_s3_class( PKNCAconc( @@ -53,23 +56,29 @@ test_that("create_conc generates correct dataset with multiple doses", { DOSNO = rep(rep(1:2, each = 5), 2), AVAL = runif(20) ) - + # Call create_conc - df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "DOSNO"), time_column = "AFRLT") - + df_conc <- create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE", "DOSNO"), + time_column = "AFRLT") + # Test if df_conc is a data frame expect_s3_class(df_conc, "data.frame") - + # Test if df_conc has the correct columns - expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "DOSNO", "AFRLT", "AVAL", "conc_groups", "TIME", "IX") %in% colnames(df_conc))) - + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE", "DOSNO", + "AFRLT", "AVAL", "conc_groups", + "TIME", "IX") %in% colnames(df_conc))) + # Test if df_conc is correctly grouped and arranged expect_equal(df_conc$TIME, df_conc$AFRLT) - expect_equal(df_conc %>% - dplyr::arrange(USUBJID, DOSNO) %>% - dplyr::pull(IX), + expect_equal(df_conc %>% + dplyr::arrange(USUBJID, DOSNO) %>% + dplyr::pull(IX), rep(1:5, 4)) - + # Test if df_conc can be used with PKNCAconc by testing its output expect_s3_class( PKNCAconc( @@ -84,7 +93,9 @@ test_that("create_conc generates correct dataset with multiple doses", { test_that("create_conc handles empty input", { ADNCA <- data.frame() - expect_error(create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT"), + expect_error(create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT"), regexp = "Input dataframe is empty. Please provide a valid ADNCA dataframe.") }) @@ -97,7 +108,9 @@ test_that("create_conc handles missing columns", { AFRLT = seq(0, 9), AVAL = runif(10) ) - expect_error(create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT"), + expect_error(create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT"), regexp = "Missing required columns: ANALYTE") }) @@ -112,7 +125,9 @@ test_that("create_conc handles multiple analytes", { ARRLT = rep(seq(0, 9), 2), AVAL = runif(20) ) - df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") + df_conc <- create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT") expect_equal(nrow(df_conc), 20) expect_equal(length(unique(df_conc$ANALYTE)), 2) }) @@ -133,19 +148,27 @@ test_that("create_dose generates correct dataset", { ADOSEDUR = rep(c(0, 0), each = 10), AVAL = runif(20) ) - + # Call create_conc - df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") - + df_conc <- create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT") + # Call create_dose - df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") - + df_dose <- create_dose(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT", since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") + # Test if df_dose is a data frame expect_s3_class(df_dose, "data.frame") - + # Test if df_dose has the correct columns - expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE", "AFRLT", "ARRLT", "AVAL", "conc_groups", "TIME", "IX", "ROUTE") %in% colnames(df_dose))) - + expect_true(all(c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE", "AFRLT", + "ARRLT", "AVAL", "conc_groups", + "TIME", "IX", "ROUTE") %in% colnames(df_dose))) + # Test if df_dose can be used with PKNCAdose by testing its output expect_s3_class( PKNCAdose( @@ -157,7 +180,7 @@ test_that("create_dose generates correct dataset", { ), "PKNCAdose" ) - + # Test if each subject has at least two doses dose_counts <- df_dose %>% group_by(USUBJID) %>% summarise(n = n()) expect_true(all(dose_counts$n >= 2)) @@ -165,18 +188,26 @@ test_that("create_dose generates correct dataset", { test_that("create_dose handles empty input", { df_conc <- data.frame() - expect_error(create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE"), + expect_error(create_dose(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE"), regexp = "Input dataframe is empty. Please provide a valid concentration dataframe.") }) test_that("create_dose_intervals handles empty input", { - mydose <- list(data = data.frame(), columns = list(groups = c("STUDYID", "USUBJID"), time = "TIME")) + mydose <- list(data = data.frame(), + columns = list(groups = c("STUDYID", "USUBJID"), + time = "TIME")) expect_error(create_dose_intervals(mydose), regexp = "Input dataframe is empty. Please provide a valid dose dataframe.") }) test_that("create_dose_intervals handles incorrect input type", { - mydose <- list(data = data.frame(STUDYID = 1, USUBJID = 1, TIME = 0), columns = list(groups = c("STUDYID", "USUBJID"), time = "TIME")) + mydose <- list(data = data.frame(STUDYID = 1, USUBJID = 1, TIME = 0), + columns = list(groups = c("STUDYID", "USUBJID"), + time = "TIME")) expect_error(create_dose_intervals(mydose), regexp = "Input must be a PKNCAdose object from the PKNCA package.") }) @@ -194,7 +225,11 @@ test_that("create_dose handles negative time values", { DOSEA = 10, AVAL = runif(10) ) - df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + df_dose <- create_dose(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") expect_true(all(df_dose$AFRLT >= 0)) }) @@ -211,7 +246,11 @@ test_that("create_dose handles multiple analytes", { DOSEA = 10, AVAL = runif(20) ) - df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") + df_dose <- create_dose(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") expect_equal(nrow(df_dose), 4) expect_equal(length(unique(df_dose$ANALYTE)), 2) }) @@ -232,13 +271,19 @@ test_that("create_dose_intervals generates correct dataset", { ADOSEDUR = 0, AVAL = runif(20) ) - + # Call create_conc - df_conc <- create_conc(ADNCA, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT") - + df_conc <- create_conc(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT") + # Call create_dose - df_dose <- create_dose(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", since_lastdose_time_column = "ARRLT", route_column = "ROUTE") - + df_dose <- create_dose(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") + # Generate PKNCAconc and PKNCAdose objects myconc <- PKNCAconc( df_conc, @@ -246,7 +291,7 @@ test_that("create_dose_intervals generates correct dataset", { exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" ) - + mydose <- PKNCAdose( data = df_dose, formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID, @@ -254,22 +299,23 @@ test_that("create_dose_intervals generates correct dataset", { time.nominal = "NFRLT", duration = "ADOSEDUR" ) - + # Define the other arguments for the dose intervals params <- c("cmax", "tmax", "half.life") - + # Call create_dose_intervals myintervals <- create_dose_intervals(mydose, params = params, start_from_last_dose = TRUE) - + # Test if myintervals is a data frame expect_s3_class(myintervals, "data.frame") - + # Test if myintervals has the correct columns - expect_true(all(c("start", "end", "STUDYID", "USUBJID", "type_interval") %in% colnames(myintervals))) - + expect_true(all(c("start", "end", "STUDYID", + "USUBJID", "type_interval") %in% colnames(myintervals))) + # Test if interval types are classified as "main" expect_true(all(myintervals$type_interval == "main")) - + # Test if myintervals can be used with PKNCAdata by testing its output expect_s3_class( PKNCA::PKNCAdata( From 0fd56f78b62e94b1870cf8f567afbc53df8a8a57 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 30 Dec 2024 11:18:51 +0100 Subject: [PATCH 51/85] fix: update description and wordlist --- DESCRIPTION | 5 +++-- inst/WORDLIST | 10 +++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 2466aac4..89a2642f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: aNCA -Title: (Pre-)clinical NCA in a dynamic shiny app +Title: (Pre-)Clinical NCA in a Dynamic Shiny App Version: 0.0.0.9000 Authors@R: c( person("Ercan", "Suekuer", , "ercan.suekuer@roche.com", role = c("aut", "cre"), @@ -55,7 +55,8 @@ Imports: tidyr, tools, utils, - zip + zip, + rlang Encoding: UTF-8 Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.2 diff --git a/inst/WORDLIST b/inst/WORDLIST index d69e2a8b..24055110 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,9 +1,6 @@ ADNCA ADPP -AFRLT AUClast -AVAL -BLQ Bärtschi CDISC DOSEA @@ -13,6 +10,8 @@ IQROUTE NCA PCSPEC PKNCA +PKNCAdata +PKNCAdose Pharmacokinetic Pre RO @@ -25,8 +24,8 @@ analyte analytes anonymized anonymizes -cheatsheet cmax +codebase csv customizable ggplot @@ -44,6 +43,3 @@ summarization timepoint visualizable xpt -codebase -PKNCAdose -UI \ No newline at end of file From cc65e0af1845ab1e2a7fb1ae60695ff4dd546783 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 30 Dec 2024 16:14:21 +0100 Subject: [PATCH 52/85] fix: impossible test deleted and improved results column order display --- R/format_data.R | 2 +- inst/shiny/tabs/nca.R | 13 ++++++------- tests/testthat/test-format_data.R | 10 +--------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 2a135f73..32ddfd7c 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -92,7 +92,7 @@ create_dose <- function(df_conc, df_conc %>% dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% - dplyr::group_by(!!!syms(group_columns)) %>% + dplyr::group_by(!!!syms(c(group_columns, "TIME"))) %>% dplyr::arrange(!!sym(since_lastdose_time_column) < 0, !!sym(since_lastdose_time_column)) %>% dplyr::slice(1) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 7cbd12d6..8e3b233e 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -496,14 +496,13 @@ observeEvent(res_nca(), { # Sort alphabetically all columns but the grouping and the exclude columns group_cols <- c(unname(unique(c(unlist(res_nca()$data$conc$columns$groups), - unlist(res_nca()$data$dose$columns$groups)))), - "start", "end") + unlist(res_nca()$data$dose$columns$groups))))) + int_cols <- c("DOSNO", "start", "end") exclude_cols <- names(final_res_nca)[startsWith(names(final_res_nca), "exclude.")] - final_res_nca <- final_res_nca[, c( - group_cols, - sort(setdiff(names(final_res_nca), c(group_cols, exclude_cols))), - sort(exclude_cols) - )] + param_cols <- names(final_res_nca)[endsWith(names(final_res_nca), "]")] + other_cols <- setdiff(names(final_res_nca), c(group_cols, int_cols, exclude_cols, param_cols)) + final_res_nca <- final_res_nca %>% + dplyr::select(any_of(c(group_cols, int_cols, param_cols, exclude_cols, other_cols))) # Create a reshaped object final_res_nca( diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index c345b25e..eaf17725 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -132,7 +132,7 @@ test_that("create_conc handles multiple analytes", { expect_equal(length(unique(df_conc$ANALYTE)), 2) }) -test_that("create_dose generates correct dataset", { +test_that("create_dose generates when missing the dose number column", { # Generate sample ADNCA data with at least two doses per subject ADNCA <- data.frame( STUDYID = rep(1, 20), @@ -196,14 +196,6 @@ test_that("create_dose handles empty input", { regexp = "Input dataframe is empty. Please provide a valid concentration dataframe.") }) -test_that("create_dose_intervals handles empty input", { - mydose <- list(data = data.frame(), - columns = list(groups = c("STUDYID", "USUBJID"), - time = "TIME")) - expect_error(create_dose_intervals(mydose), - regexp = "Input dataframe is empty. Please provide a valid dose dataframe.") -}) - test_that("create_dose_intervals handles incorrect input type", { mydose <- list(data = data.frame(STUDYID = 1, USUBJID = 1, TIME = 0), columns = list(groups = c("STUDYID", "USUBJID"), From ed64b88f05faedb2505a354eb8b4740605e5876d Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 3 Jan 2025 13:49:35 +0100 Subject: [PATCH 53/85] style: add details to function description and rename PKNCA_impute_method_start_log(slope) --- NAMESPACE | 2 +- R/PKNCA_impute_method_additions.R | 10 +++++----- inst/WORDLIST.txt | 4 ++-- man/PKNCA_impute_method_start_c1.Rd | 2 +- ... => PKNCA_impute_method_start_logslope.Rd} | 19 +++++++++++++------ .../test-PKNCA_impute_method_additions.R | 12 ++++++------ 6 files changed, 28 insertions(+), 21 deletions(-) rename man/{PKNCA_impute_method_start_log.Rd => PKNCA_impute_method_start_logslope.Rd} (71%) diff --git a/NAMESPACE b/NAMESPACE index 78c143aa..ff100cea 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,7 @@ # Generated by roxygen2: do not edit by hand export(PKNCA_impute_method_start_c1) -export(PKNCA_impute_method_start_log) +export(PKNCA_impute_method_start_logslope) export(anonymize_pk_data) export(apply_filters) export(as_factor_preserve_label) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index dd0cbee6..1d536fa1 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -11,13 +11,13 @@ #' @export #' #' @examples -#' conc <- c(1, 2, 3, 4, 5) -#' time <- c(0, 1, 2, 3, 4) +#' conc <- c(5, 4, 3, 2, 1) +#' time <- c(1, 2, 3, 4, 5) #' start <- 0 #' end <- 4 -#' PKNCA_impute_method_start_log(conc, time, start, end) +#' PKNCA_impute_method_start_logslope(conc, time, start, end) -PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = list()) { # nolint +PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., options = list()) { # nolint ret <- data.frame(conc = conc, time = time) mask_start <- time %in% start @@ -49,7 +49,7 @@ PKNCA_impute_method_start_log <- function(conc, time, start, end, ..., options = #' #' @examples #' conc <- c(1, 2, 3, 4, 5) -#' time <- c(0, 1, 2, 3, 4) +#' time <- c(1, 2, 3, 4, 5) #' start <- 0 #' end <- 4 #' PKNCA_impute_method_start_c1(conc, time, start, end) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index 3f2be47f..40ef7417 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -38,5 +38,5 @@ summarization timepoint visualizable xpt -PKNCA_impute_method_start_log -PKNCA_impute_method_start_c1 \ No newline at end of file +PKNCA_impute_method_start_logslope +PKNCA_impute_method_start_c1 diff --git a/man/PKNCA_impute_method_start_c1.Rd b/man/PKNCA_impute_method_start_c1.Rd index 0d0cc3c3..48d98193 100644 --- a/man/PKNCA_impute_method_start_c1.Rd +++ b/man/PKNCA_impute_method_start_c1.Rd @@ -27,7 +27,7 @@ This function imputes the start concentration using the first concentration afte } \examples{ conc <- c(1, 2, 3, 4, 5) -time <- c(0, 1, 2, 3, 4) +time <- c(1, 2, 3, 4, 5) start <- 0 end <- 4 PKNCA_impute_method_start_c1(conc, time, start, end) diff --git a/man/PKNCA_impute_method_start_log.Rd b/man/PKNCA_impute_method_start_logslope.Rd similarity index 71% rename from man/PKNCA_impute_method_start_log.Rd rename to man/PKNCA_impute_method_start_logslope.Rd index 6817b202..5486075f 100644 --- a/man/PKNCA_impute_method_start_log.Rd +++ b/man/PKNCA_impute_method_start_logslope.Rd @@ -1,10 +1,17 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/PKNCA_impute_method_additions.R -\name{PKNCA_impute_method_start_log} -\alias{PKNCA_impute_method_start_log} +\name{PKNCA_impute_method_start_logslope} +\alias{PKNCA_impute_method_start_logslope} \title{This function imputes the start concentration using the log slope method.} \usage{ -PKNCA_impute_method_start_log(conc, time, start, end, ..., options = list()) +PKNCA_impute_method_start_logslope( + conc, + time, + start, + end, + ..., + options = list() +) } \arguments{ \item{conc}{Numeric vector of concentrations.} @@ -26,9 +33,9 @@ A data frame with imputed start concentration. This function imputes the start concentration using the log slope method. } \examples{ -conc <- c(1, 2, 3, 4, 5) -time <- c(0, 1, 2, 3, 4) +conc <- c(5, 4, 3, 2, 1) +time <- c(1, 2, 3, 4, 5) start <- 0 end <- 4 -PKNCA_impute_method_start_log(conc, time, start, end) +PKNCA_impute_method_start_logslope(conc, time, start, end) } diff --git a/tests/testthat/test-PKNCA_impute_method_additions.R b/tests/testthat/test-PKNCA_impute_method_additions.R index bdc51c7f..473f940c 100644 --- a/tests/testthat/test-PKNCA_impute_method_additions.R +++ b/tests/testthat/test-PKNCA_impute_method_additions.R @@ -1,30 +1,30 @@ -test_that("PKNCA_impute_method_start_log", { +test_that("PKNCA_impute_method_start_logslope", { # No imputation when start is in the data expect_equal( - PKNCA_impute_method_start_log(conc = 3:1, time = 0:2, start = 0, end = 2), + PKNCA_impute_method_start_logslope(conc = 3:1, time = 0:2, start = 0, end = 2), data.frame(conc = 3:1, time = 0:2) ) # Impute when start is not in the data expect_equal( - PKNCA_impute_method_start_log(conc = 3:1, time = 1:3, start = 0, end = 3), + PKNCA_impute_method_start_logslope(conc = 3:1, time = 1:3, start = 0, end = 3), data.frame(conc = c(4.5, 3:1), time = 0:3), ignore_attr = TRUE ) # Data outside the interval are ignored (before interval) expect_equal( - PKNCA_impute_method_start_log(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), + PKNCA_impute_method_start_logslope(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), data.frame(conc = c(0, 4, 2:1), time = c(-1, 0, 1:2)), ignore_attr = TRUE ) # No modification if no C1 -> C2 decline in samples expect_equal( - PKNCA_impute_method_start_log(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), + PKNCA_impute_method_start_logslope(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), data.frame(conc = c(1, 1, 1), time = 1:3), ignore_attr = TRUE ) # No modification if C1 = C2 in samples expect_equal( - PKNCA_impute_method_start_log(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), + PKNCA_impute_method_start_logslope(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), data.frame(conc = c(3, 3, 1), time = 1:3), ignore_attr = TRUE ) From b9d7f360f15b60b17c6c8bc60124c79681312180 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 3 Jan 2025 14:20:24 +0100 Subject: [PATCH 54/85] style: time == start & link on PKNCA custom function guidelines --- R/PKNCA_impute_method_additions.R | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index 1d536fa1..106f2330 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -8,6 +8,10 @@ #' @param options List of options (currently not used). #' #' @return A data frame with imputed start concentration. +#' @details +#' This function adheres to the structure required by the `PKNCA` package to work with its +#' functionalities. For more information, see the +#' [PKNCA Data Imputation Vignette](https://cran.r-project.org/web/packages/PKNCA/vignettes). #' @export #' #' @examples @@ -19,20 +23,19 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., options = list()) { # nolint - ret <- data.frame(conc = conc, time = time) - mask_start <- time %in% start - if (!any(mask_start)) { + d_conc_time <- data.frame(conc = conc, time = time) + if (!any(time == start)) { all_concs <- conc[time >= start & time <= end] all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { c0 <- PKNCA::pk.calc.c0(all_concs, all_times, method = "logslope") if (!is.na(c0)) { - ret <- rbind(ret, data.frame(time = start, conc = c0)) - ret <- ret[order(ret$time), ] + d_conc_time <- rbind(d_conc_time, data.frame(time = start, conc = c0)) + d_conc_time <- d_conc_time[order(d_conc_time$time), ] } } } - ret + d_conc_time } #' This function imputes the start concentration using the first concentration after dose @@ -45,6 +48,10 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., opti #' @param options List of options (currently not used). #' #' @return A data frame with imputed start concentration. +#' @details +#' This function adheres to the structure required by the `PKNCA` package to work with its +#' functionalities.For more information, see the +#' [PKNCA Data Imputation Vignette](https://cran.r-project.org/web/packages/PKNCA/vignettes). #' @export #' #' @examples @@ -54,16 +61,15 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., opti #' end <- 4 #' PKNCA_impute_method_start_c1(conc, time, start, end) PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { # nolint - ret <- data.frame(conc = conc, time = time) - mask_start <- time %in% start - if (!any(mask_start)) { + d_conc_time <- data.frame(conc = conc, time = time) + if (!any(time == start)) { all_concs <- conc[time >= start & time <= end] all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { c1 <- all_concs[which.min(all_times)] - ret <- rbind(ret, data.frame(time = start, conc = c1)) - ret <- ret[order(ret$time), ] + d_conc_time <- rbind(d_conc_time, data.frame(time = start, conc = c1)) + d_conc_time <- d_conc_time[order(d_conc_time$time), ] } } - ret + d_conc_time } From 3f28c2440dca7139622b19c0d3b6f486743224ab Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 3 Jan 2025 14:26:26 +0100 Subject: [PATCH 55/85] test: modify tests from expect_s3_class to expect_no_error for nested functions --- tests/testthat/test-format_data.R | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index eaf17725..db13e847 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -31,14 +31,13 @@ test_that("create_conc generates correct dataset", { expect_equal(df_conc$IX, rep(1:5, 2)) # Test if df_conc can be used with PKNCAconc by testing its output - expect_s3_class( + expect_no_error( PKNCAconc( df_conc, formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" - ), - "PKNCAconc" + ) ) }) @@ -80,14 +79,13 @@ test_that("create_conc generates correct dataset with multiple doses", { rep(1:5, 4)) # Test if df_conc can be used with PKNCAconc by testing its output - expect_s3_class( + expect_no_error( PKNCAconc( df_conc, formula = AVAL ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID / ANALYTE, exclude_half.life = "exclude_half.life", time.nominal = "NFRLT" - ), - "PKNCAconc" + ) ) }) @@ -170,15 +168,14 @@ test_that("create_dose generates when missing the dose number column", { "TIME", "IX", "ROUTE") %in% colnames(df_dose))) # Test if df_dose can be used with PKNCAdose by testing its output - expect_s3_class( + expect_no_error( PKNCAdose( data = df_dose, formula = DOSEA ~ TIME | STUDYID + PCSPEC + DRUG + USUBJID, route = "ROUTE", time.nominal = "NFRLT", duration = "ADOSEDUR" - ), - "PKNCAdose" + ) ) # Test if each subject has at least two doses @@ -309,7 +306,7 @@ test_that("create_dose_intervals generates correct dataset", { expect_true(all(myintervals$type_interval == "main")) # Test if myintervals can be used with PKNCAdata by testing its output - expect_s3_class( + expect_no_error( PKNCA::PKNCAdata( data.conc = myconc, data.dose = mydose, @@ -320,7 +317,6 @@ test_that("create_dose_intervals generates correct dataset", { amountu = myconc$data$PCSTRESU[1], timeu = myconc$data$RRLTU[1] ) - ), - "PKNCAdata" + ) ) }) From 67f759359ab44a40980d12e102b5a2ef618ee76c Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 3 Jan 2025 14:57:37 +0100 Subject: [PATCH 56/85] style: delete unnecessary variable assignment in function --- R/format_data.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/format_data.R b/R/format_data.R index 32ddfd7c..1a9767d3 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -40,7 +40,7 @@ create_conc <- function(ADNCA, stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } - data <- ADNCA %>% + ADNCA %>% dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% dplyr::arrange(!!sym(time_column)) %>% dplyr::mutate(TIME = !!sym(time_column)) %>% From 48d6a4ca8cb7d5e5ab1c996e426ef35b4afa15bb Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 3 Jan 2025 15:17:00 +0100 Subject: [PATCH 57/85] documentation: update roxygen2 --- man/PKNCA_impute_method_start_c1.Rd | 5 +++++ man/PKNCA_impute_method_start_logslope.Rd | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/man/PKNCA_impute_method_start_c1.Rd b/man/PKNCA_impute_method_start_c1.Rd index 48d98193..36f63b93 100644 --- a/man/PKNCA_impute_method_start_c1.Rd +++ b/man/PKNCA_impute_method_start_c1.Rd @@ -25,6 +25,11 @@ A data frame with imputed start concentration. \description{ This function imputes the start concentration using the first concentration after dose } +\details{ +This function adheres to the structure required by the \code{PKNCA} package to work with its +functionalities.For more information, see the +\href{https://cran.r-project.org/web/packages/PKNCA/vignettes}{PKNCA Data Imputation Vignette}. +} \examples{ conc <- c(1, 2, 3, 4, 5) time <- c(1, 2, 3, 4, 5) diff --git a/man/PKNCA_impute_method_start_logslope.Rd b/man/PKNCA_impute_method_start_logslope.Rd index 5486075f..1d75f6d5 100644 --- a/man/PKNCA_impute_method_start_logslope.Rd +++ b/man/PKNCA_impute_method_start_logslope.Rd @@ -32,6 +32,11 @@ A data frame with imputed start concentration. \description{ This function imputes the start concentration using the log slope method. } +\details{ +This function adheres to the structure required by the \code{PKNCA} package to work with its +functionalities. For more information, see the +\href{https://cran.r-project.org/web/packages/PKNCA/vignettes}{PKNCA Data Imputation Vignette}. +} \examples{ conc <- c(5, 4, 3, 2, 1) time <- c(1, 2, 3, 4, 5) From 1ca26288378865a4d15623d41733857e6d4d1935 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Wed, 8 Jan 2025 10:02:26 +0100 Subject: [PATCH 58/85] fix: filtering later and using dose.time + arrlt for non-t0 solves partially problem --- R/format_data.R | 5 +++-- inst/shiny/tabs/nca.R | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 1a9767d3..02b081ae 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -144,10 +144,11 @@ create_dose_intervals <- function(mydose = mydose, # Based on dose times create a data frame with start and end times dose_intervals <- mydose$data %>% + mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) + else !!sym(mydose$columns$time) + !!sym("ARRLT")) %>% group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% dplyr::arrange(!!sym(mydose$columns$time)) %>% - mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) else !!sym("AFRLT"), - end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% + dplyr::mutate(end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% ungroup() %>% select(any_of(c("start", "end", unname(unlist(mydose$columns$groups)), "DOSNO"))) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 8e3b233e..65c41163 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -183,14 +183,8 @@ observeEvent(input$submit_analyte, priority = 2, { route_column <- "ROUTE" analyte_column <- "ANALYTE" - # Filter data based on selected analyte and dose numbers - data_filt <- data() %>% - dplyr::filter(!!sym(analyte_column) == input$select_analyte, - DOSNO %in% input$select_dosno, - if ("EVID" %in% names(data())) EVID == 0 else TRUE) - # Segregate the data into concentration and dose records - df_conc <- create_conc(ADNCA = data_filt, + df_conc <- create_conc(ADNCA = data(), group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) %>% dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) @@ -206,6 +200,12 @@ observeEvent(input$submit_analyte, priority = 2, { df_conc$REASON <- NA # Exclusions will have preferential reason statements than inclusions df_conc$exclude_half.life <- FALSE + # Filter data based on selected analyte and dose numbers + df_conc <- df_conc %>% + dplyr::filter(!!sym(analyte_column) %in% input$select_analyte, + DOSNO %in% input$select_dosno, + if ("EVID" %in% names(data())) EVID == 0 else TRUE) + # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, From d47f758639d3114a778a475d4ac640f82e0117d9 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 14:05:14 +0100 Subject: [PATCH 59/85] data: corect ADOSEDUR (ADOSEDUR<0 turned into |ADOSEDUR|) --- inst/shiny/data/DummyRO_ADNCA.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/inst/shiny/data/DummyRO_ADNCA.csv b/inst/shiny/data/DummyRO_ADNCA.csv index d1ff413b..d7d3f9f6 100644 --- a/inst/shiny/data/DummyRO_ADNCA.csv +++ b/inst/shiny/data/DummyRO_ADNCA.csv @@ -175,22 +175,22 @@ "XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1679.33,-0.67,0,1680,1.56,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.18,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",1.56,"ug/mL",0,"2022-03-21 13:40:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-14 14:07:00",188,90,"kg","cm",1.2,1680 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",10,1681.58,1.58,0.5,1680.5,11.6,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",11.6,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1.02,1680 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,1848.45,0.45,0,1848,1.3,"Analyte01","ug/mL","intravascular",35,45,"M","WHITE",1.02,"Hours","mg",0,"Analyte01","Cycle 4 Day 15",1.3,"ug/mL",0,"2022-03-28 14:18:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-21 13:40:00",188,90,"kg","cm",1,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4700.02,2852.02,840,2688,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4700.02,2852.02,840,2688,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4865.52,3017.52,1008,2856,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 6 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5034.27,3186.27,1176,3024,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3023.78,1175.78,1176.5,3024.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5201.43,3353.43,1344,3192,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.09,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5368.93,3520.93,1512,3360,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 7 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5564.37,3716.37,1680,3528,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5564.37,3716.37,1680,3528,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,3555.45,1707.45,1680.5,3528.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5708.23,3860.23,1848,3696,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.05,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5708.23,3860.23,1848,3696,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,5877.57,4029.57,2016,3864,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 8 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.03,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6042.87,4194.87,2184,4032,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.05,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4032.28,2184.28,2184.5,4032.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6208.95,4360.95,NA,NA,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 0",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6208.95,4360.95,NA,NA,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 0",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6233.22,4385.22,NA,NA,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Obinutuzumab Retreatment 1 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.07,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6379.88,4531.88,2520,4368,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 9 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.04,1848 -"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6547.18,4699.18,2688,4536,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",-0.01,1848 +"XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6547.18,4699.18,2688,4536,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,4536.82,2688.82,2688.5,4536.5,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 1",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6717.65,4869.65,2856,4704,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 8",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.02,1848 "XX01",11106,"Analyte01","SERUM","EVERY WEEK",11,6884.13,5036.13,3024,4872,0,"Analyte01","ug/mL","intravascular",3.5,45,"M","WHITE",0.02,"Hours","mg",0,"Analyte01","Cycle 10 Day 15",0,"ug/mL",0,"2022-01-03 18:04:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2022-03-28 14:18:00",188,90,"kg","cm",0.01,1848 From c4e1d09bf02c91272c008dc57a008774b4960f53 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 15:11:56 +0100 Subject: [PATCH 60/85] data: adapt USUBJID=11102, DOSNO=9 to a reasonable dose time (AFRLT-ARRLT = 1680.5) adnca2 %>% mutate(AFRLT = ifelse(DOSNO==9 & USUBJID==11102, AFRLT + 168, AFRLT), NFRLT = ifelse(DOSNO==9 & USUBJID==11102, NFRLT + 168, NFRLT) ) --- inst/shiny/data/DummyRO_ADNCA.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/shiny/data/DummyRO_ADNCA.csv b/inst/shiny/data/DummyRO_ADNCA.csv index d7d3f9f6..4d85ce9c 100644 --- a/inst/shiny/data/DummyRO_ADNCA.csv +++ b/inst/shiny/data/DummyRO_ADNCA.csv @@ -42,9 +42,9 @@ "XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1343.77,-0.230000000000001,0,1344,4.05,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",4.05,"ug/mL",0,"2021-09-29 13:33:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-22 14:06:00",163,54.9,"kg","cm",0.48,1344 "XX01",11102,"Analyte01","SERUM","EVERY WEEK",7,1345.63,1.63,0.5,1344.5,16.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 3 Day 15",16.5,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.47,1344 "XX01",11102,"Analyte01","SERUM","EVERY WEEK",8,1512.88,0.879999999999999,0,1512,3.88,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",3.88,"ug/mL",0,"2021-10-06 12:30:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-09-29 13:33:00",163,54.9,"kg","cm",0.46,1512 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.03,1.53,0,1512.5,18.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",18.5,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.5,1512.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1513.07,0.569999999999999,167.5,1680,3.13,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.13,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.52,1512.5 -"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1514.1,1.6,168,1680.5,14.7,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",14.7,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1682.03,1.53,0,1680.5,18.5,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 1",18.5,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.5,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1681.07,0.569999999999999,167.5,1848,3.13,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.52,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",3.13,"ug/mL",0,"2021-10-13 12:47:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-06 12:30:00",163,54.9,"kg","cm",0.52,1512.5 +"XX01",11102,"Analyte01","SERUM","EVERY WEEK",9,1682.1,1.6,168,1848.5,14.7,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 4 Day 8",14.7,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,1512.5 "XX01",11102,"Analyte01","SERUM","EVERY WEEK",10,2016.35,0.349999999999999,0,2016,0.893,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 1",0.893,"ug/mL",0,"2021-10-27 13:32:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-13 12:47:00",163,54.9,"kg","cm",0.51,2016 "XX01",11102,"Analyte01","SERUM","EVERY WEEK",11,2184.98,0.979999999999999,0,2184,2.05,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.53,"Hours","mg",0,"Analyte01","Cycle 5 Day 8",2.05,"ug/mL",0,"2021-11-03 12:29:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-10-27 13:32:00",163,54.9,"kg","cm",0.58,2184 "XX01",11102,"Analyte01","SERUM","EVERY WEEK",12,2349.92,-2.08,0,2352,2.83,"Analyte01","ug/mL","intravascular",35,74,"F","WHITE",0.5,"Hours","mg",0,"Analyte01","Cycle 5 Day 15",2.83,"ug/mL",0,"2021-11-10 12:05:00",339203,"Dummy Treatment Arm A","Dummy Treatment Arm P","2021-11-03 12:29:00",163,54.9,"kg","cm",0.51,2352 From 5cf5267bc19ce8bd45197dc72608235b02d396e1 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 15:14:20 +0100 Subject: [PATCH 61/85] fix: solve issue with end% dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% - dplyr::group_by(!!!syms(c(group_columns, "TIME"))) %>% + dplyr::group_by(!!!syms(c(group_columns))) %>% dplyr::arrange(!!sym(since_lastdose_time_column) < 0, !!sym(since_lastdose_time_column)) %>% dplyr::slice(1) %>% From b2128c8f4f51b2ac1371745842525f6e23e74756 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 15:16:07 +0100 Subject: [PATCH 62/85] refactor: lintr code cleaning --- R/format_data.R | 6 +++--- inst/shiny/tabs/nca.R | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 9f3478d8..6e98861e 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -144,11 +144,11 @@ create_dose_intervals <- function(mydose = mydose, # Based on dose times create a data frame with start and end times dose_intervals <- mydose$data %>% - mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) - else !!sym(mydose$columns$time) + !!sym("ARRLT")) %>% + mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) + else !!sym(mydose$columns$time) + !!sym("ARRLT")) %>% group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% dplyr::arrange(!!sym(mydose$columns$time)) %>% - dplyr::mutate(end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% + dplyr::mutate(end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% ungroup() %>% select(any_of(c("start", "end", unname(unlist(mydose$columns$groups)), "DOSNO"))) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 65c41163..e7abb360 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -205,7 +205,7 @@ observeEvent(input$submit_analyte, priority = 2, { dplyr::filter(!!sym(analyte_column) %in% input$select_analyte, DOSNO %in% input$select_dosno, if ("EVID" %in% names(data())) EVID == 0 else TRUE) - + # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, From 4d1c6fbc67a41418f3fee14463bb053b996b1315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20J=2E=20Rodr=C3=ADguez?= <68994823+Gero1999@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:33:23 +0100 Subject: [PATCH 63/85] style: apply suggestions from m-kolomanski MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mateusz Kołomański <63905560+m-kolomanski@users.noreply.github.com> --- R/create_start_impute.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index 219577c7..afe99769 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -29,7 +29,7 @@ create_start_impute <- function(mydata) { # Define dose number (DOSNO) if not present in dose data if (!"DOSNO" %in% mydata$dose$data) { mydata$dose$data <- mydata$dose$data %>% - group_by(across(all_of(c(unname(unlist(mydata$dose$columns$groups)))))) %>% + group_by(across(all_of(dose_group_columns))) %>% mutate(DOSNO = row_number()) %>% ungroup() } @@ -44,7 +44,7 @@ create_start_impute <- function(mydata) { merge(mydata$intervals) # Define dosing drug as analyte if not present - if (!"DRUG" %in% colnames(mydata_with_int)) { + if (!drug_column %in% colnames(mydata_with_int)) { if (length(analyte_column) == 1) { mydata_with_int <- mydata_with_int %>% mutate(DRUG = !!sym(analyte_column)) From 87ccead6859c16fb14dbaf67a251387ae0e94913 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 15:47:10 +0100 Subject: [PATCH 64/85] style: drug_column call instead of hardcoded "DRUG" in create_start_impute.R --- R/create_start_impute.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index afe99769..bb6df400 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -21,7 +21,7 @@ create_start_impute <- function(mydata) { analyte_column <- mydata$conc$columns$groups$group_analyte route_column <- mydata$dose$columns$route duration_column <- mydata$dose$columns$duration - drug_column <- "DRUG" # At some point should be added at least manually in PKNCA mydata object + drug_column <- "DRUG" # TODO: At some point should be mapped manually in the App conc_group_columns <- unname(unlist(mydata$conc$columns$groups)) dose_group_columns <- unname(unlist(mydata$dose$columns$groups)) group_columns <- unique(c(conc_group_columns, dose_group_columns)) @@ -44,10 +44,10 @@ create_start_impute <- function(mydata) { merge(mydata$intervals) # Define dosing drug as analyte if not present - if (!drug_column %in% colnames(mydata_with_int)) { + if (!drug_column %in% colnames(mydata_with_int) | is.null(drug_column)) { if (length(analyte_column) == 1) { - mydata_with_int <- mydata_with_int %>% - mutate(DRUG = !!sym(analyte_column)) + mydata_with_int <- dplyr::mutate(mydata_with_int, + DRUG = !!sym(analyte_column)) drug_column <- "DRUG" } else { mydata_with_int <- mydata_with_int %>% From 76ece7957c0cf346bbc3e4143228037396163bac Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 15:48:17 +0100 Subject: [PATCH 65/85] style: lintr code cleaning --- R/create_start_impute.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index bb6df400..8aba534c 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -44,7 +44,7 @@ create_start_impute <- function(mydata) { merge(mydata$intervals) # Define dosing drug as analyte if not present - if (!drug_column %in% colnames(mydata_with_int) | is.null(drug_column)) { + if (!drug_column %in% colnames(mydata_with_int) || is.null(drug_column)) { if (length(analyte_column) == 1) { mydata_with_int <- dplyr::mutate(mydata_with_int, DRUG = !!sym(analyte_column)) From 94a96e6920762a011619e01d3d9e4551f631f47a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 16:06:33 +0100 Subject: [PATCH 66/85] style: improve conditional syntax in create_start_impute.R --- R/create_start_impute.R | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index 8aba534c..5dff6a73 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -44,16 +44,14 @@ create_start_impute <- function(mydata) { merge(mydata$intervals) # Define dosing drug as analyte if not present - if (!drug_column %in% colnames(mydata_with_int) || is.null(drug_column)) { - if (length(analyte_column) == 1) { - mydata_with_int <- dplyr::mutate(mydata_with_int, - DRUG = !!sym(analyte_column)) - drug_column <- "DRUG" + if (!drug_column %in% colnames(mydata_with_int)) { + if (analyte_column %in% colnames(mydata_with_int)) { + drug_column <- analyte_column } else { - mydata_with_int <- mydata_with_int %>% - mutate(DRUG = "A", ANALYTE = "A") - drug_column <- "DRUG" + mydata_with_int <- dplyr::mutate(mydata_with_int, + ANALYTE = "A") analyte_column <- "ANALYTE" + drug_column <- analyte_column } } From 7e3d79e82281b0239092d22c51f58f312b026bad Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 16:23:54 +0100 Subject: [PATCH 67/85] style issue: clean computation of pk.calc.c0 logslope --- R/create_start_impute.R | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index 5dff6a73..b2edaecd 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -59,9 +59,10 @@ create_start_impute <- function(mydata) { new_intervals <- mydata_with_int %>% group_by(across(all_of(c(group_columns, "DOSNO", "start", "end")))) %>% arrange(across(all_of(c(group_columns, time_column)))) %>% - dplyr::mutate( - vr_avals = paste0("c(", paste0(!!sym(conc_column), collapse = ","), ")"), - vr_times = paste0("c(", paste0(!!sym(time_column), collapse = ","), ")") + dplyr::mutate(is.possible.c0.logslope = !is.na(pk.calc.c0(conc = !!sym(conc_column), + time = !!sym(time_column), + time.dose = start[1], + method = "logslope")) ) %>% arrange((!!sym(time_column) - start) < 0, (!!sym(time_column) - start)) %>% @@ -82,10 +83,7 @@ create_start_impute <- function(mydata) { tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) & - !is.na(PKNCA::pk.calc.c0(conc = eval(parse(text = vr_avals)), - time = eval(parse(text = vr_times)), - time.dose = start, - method = "logslope")) ~ "start_logslope", + is.possible.c0.logslope ~ "start_logslope", tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0 & !!sym(analyte_column) == !!sym(drug_column) ~ "start_c1" From bd01bd28a494cfc7bd38c108b860273a72396091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20J=2E=20Rodr=C3=ADguez?= <68994823+Gero1999@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:46:11 +0100 Subject: [PATCH 68/85] style: suggestions from code review m-kolomanski MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mateusz Kołomański <63905560+m-kolomanski@users.noreply.github.com> --- R/create_start_impute.R | 8 +++--- R/format_data.R | 13 ++++----- inst/shiny/modules/slope_selector.R | 3 +-- inst/shiny/tabs/nca.R | 3 +-- inst/shiny/ui.R | 33 ++++++++++++++--------- tests/testthat/test-create_start_impute.R | 14 ++++++---- tests/testthat/test-format_data.R | 4 --- 7 files changed, 41 insertions(+), 37 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index b2edaecd..3186e4c3 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -64,8 +64,10 @@ create_start_impute <- function(mydata) { time.dose = start[1], method = "logslope")) ) %>% - arrange((!!sym(time_column) - start) < 0, - (!!sym(time_column) - start)) %>% + arrange( + (!!sym(time_column) - start) < 0, + (!!sym(time_column) - start) + ) %>% slice(1) %>% ungroup() %>% rowwise() %>% @@ -94,5 +96,5 @@ create_start_impute <- function(mydata) { mydata$intervals <- new_intervals - return(mydata) + mydata } diff --git a/R/format_data.R b/R/format_data.R index 6e98861e..72159b8e 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -6,7 +6,7 @@ #' @param analyte A character string specifying the analyte of interest. #' -#' @return A data frame containing the filtered and processed concentration data. +#' @returns A data frame containing the filtered and processed concentration data. #' #' @details #' The function performs the following steps: @@ -27,10 +27,7 @@ #' @import dplyr #' @export -#create pknca concentration dataset -create_conc <- function(ADNCA, - group_columns, - time_column = "AFRLT") { +create_conc <- function(ADNCA, group_columns, time_column = "AFRLT") { if (nrow(ADNCA) == 0) { stop("Input dataframe is empty. Please provide a valid ADNCA dataframe.") } @@ -55,7 +52,7 @@ create_conc <- function(ADNCA, #' #' @param ADNCA_conc A data frame containing the concentration data. #' -#' @return A data frame containing the dose data. +#' @returns A data frame containing the dose data. #' #' @details #' The function performs the following steps: @@ -108,7 +105,7 @@ create_dose <- function(df_conc, #' @param params A character vector specifying the pharmacokinetic parameters to include. #' @param start_from_last_dose Logical defining if start is at time of last dose or C1. #' -#' @return A data frame containing the dose intervals and specified pharmacokinetic parameters. +#' @returns A data frame containing the dose intervals and specified pharmacokinetic parameters. #' #' @details #' The function performs the following steps: @@ -126,7 +123,7 @@ create_dose <- function(df_conc, #' #' @import dplyr #' @export -create_dose_intervals <- function(mydose = mydose, +create_dose_intervals <- function(mydose, params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first", diff --git a/inst/shiny/modules/slope_selector.R b/inst/shiny/modules/slope_selector.R index 5e1be38f..51b9c094 100644 --- a/inst/shiny/modules/slope_selector.R +++ b/inst/shiny/modules/slope_selector.R @@ -354,8 +354,7 @@ slope_selector_server <- function( #' saves and implements provided ruleset observeEvent(input$save_ruleset, { mydata(.filter_slopes(mydata(), manual_slopes(), profiles_per_patient())) - pk_nca_trigger <- pk_nca_trigger() - pk_nca_trigger(pk_nca_trigger + 1) + pk_nca_trigger(pk_nca_trigger() + 1) }) #' Plot data is a local reactive copy of full data. The purpose is to display data that diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index e7abb360..134761b8 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -421,8 +421,7 @@ observeEvent(input$nca, { mydata(mydata) # Perform NCA on the profiles selected - pk_nca_trigger <- pk_nca_trigger() - pk_nca_trigger(pk_nca_trigger + 1) + pk_nca_trigger(pk_nca_trigger() + 1) # Update panel to show results page updateTabsetPanel(session, "ncapanel", selected = "Results") diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index 74674d19..e17cdb2e 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -48,9 +48,12 @@ fluidPage( # Selection of analyte selectInput("select_analyte", "Choose the analyte :", choices = NULL), - selectInput("select_dosno", "Choose the Dose Number:", - multiple = TRUE, - choices = c("Please specify ANALYTE in Data Selection" = "")), + selectInput( + "select_dosno", + "Choose the Dose Number:", + multiple = TRUE, + choices = c("Please specify ANALYTE in Data Selection" = "") + ), br(), actionButton("submit_analyte", "Submit"), DTOutput("datatable"), @@ -65,18 +68,22 @@ fluidPage( selected = "lin up/log down" ), h4("Data imputation"), - tags$div(checkboxInput(inputId = "should_impute_c0", - label = "Impute concentration at t0 when missing", - value = TRUE), + tags$div( + checkboxInput( + inputId = "should_impute_c0", + label = "Impute concentration at t0 when missing", + value = TRUE + ), id = "checkbox_id", title = paste( - "Imputes a start-of-interval concentration - to calculate non-observational parameters:", - "If DOSNO = 1 & IV bolus: C0 = 0", - "If DOSNO > 1 & not IV bolus: C0 = predose", - "If IV bolus & monoexponential data: logslope", - "If IV bolus & not monoexponential data: C0 = C1", - sep = "\n") + "Imputes a start-of-interval concentration + to calculate non-observational parameters:", + "If DOSNO = 1 & IV bolus: C0 = 0", + "If DOSNO > 1 & not IV bolus: C0 = predose", + "If IV bolus & monoexponential data: logslope", + "If IV bolus & not monoexponential data: C0 = C1", + sep = "\n" + ) ), br(), checkboxInput("AUCoptions", "Select Partial AUC"), diff --git a/tests/testthat/test-create_start_impute.R b/tests/testthat/test-create_start_impute.R index 4a5b9810..ce0e8d17 100644 --- a/tests/testthat/test-create_start_impute.R +++ b/tests/testthat/test-create_start_impute.R @@ -38,15 +38,19 @@ dose_obj <- PKNCAdose(dose_data, dose ~ time | USUBJID + DOSNO, mydata <- PKNCAdata(conc_obj, dose_obj, intervals = intervals_data) # Apply the function -result <- create_start_impute(mydata) +test_that("create_start_impute works without issue", { + expect_no_error({ + result <<- create_start_impute(mydata) + }) +}) test_that("create_start_impute does not add impute (NA) when start is in PKNCAconc", { # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 1, DOSNO == 1) %>% - dplyr::pull(impute), - NA_character_) + not_imputed <- result$intervals %>% + dplyr::filter(USUBJID == 1, DOSNO == 1) %>% + dplyr::pull(impute) + expect_equal(not_imputed, NA_character_) }) test_that("create_start_impute: conc0 when route is extravascular (first dose)", { diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index db13e847..d89b8854 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -1,7 +1,3 @@ -library(testthat) -library(dplyr) -library(PKNCA) - test_that("create_conc generates correct dataset", { # Generate sample ADNCA data ADNCA <- data.frame( From f752aefed433945c9d7c2e503250641d280b4cca Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Mon, 13 Jan 2025 17:17:54 +0100 Subject: [PATCH 69/85] nitpick: solve nitpicks pointed out by m-kolomanski --- R/create_start_impute.R | 4 +--- R/format_data.R | 32 +++++++++++++------------------- R/reshape_PKNCA_results.R | 3 +-- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index b2edaecd..54705701 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -56,7 +56,7 @@ create_start_impute <- function(mydata) { } # Process imputation strategy based on each interval - new_intervals <- mydata_with_int %>% + mydata$intervals <- mydata_with_int %>% group_by(across(all_of(c(group_columns, "DOSNO", "start", "end")))) %>% arrange(across(all_of(c(group_columns, time_column)))) %>% dplyr::mutate(is.possible.c0.logslope = !is.na(pk.calc.c0(conc = !!sym(conc_column), @@ -92,7 +92,5 @@ create_start_impute <- function(mydata) { # Select only the columns of interest select(any_of(c(names(mydata$intervals), "impute"))) - mydata$intervals <- new_intervals - return(mydata) } diff --git a/R/format_data.R b/R/format_data.R index 6e98861e..5c6d6313 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -10,13 +10,11 @@ #' #' @details #' The function performs the following steps: -#' \itemize{ -#' \item Filters the data for the specified analyte and event ID (EVID == 0). -#' \item Creates a 'groups' column by concatenating 'USUBJID' and 'DOSNO'. -#' \item Filters out negative time values. -#' \item Arranges the data by 'STUDYID', 'USUBJID', 'PCSPEC', 'DOSNO', and 'TIME'. -#' \item Adds an index column ('IX') within each group. -#' } +#' - Filters the data for the specified analyte and event ID (EVID == 0). +#' - Creates a 'groups' column by concatenating 'USUBJID' and 'DOSNO'. +#' - Filters out negative time values. +#' - Arranges the data by 'STUDYID', 'USUBJID', 'PCSPEC', 'DOSNO', and 'TIME'. +#' - Adds an index column ('IX') within each group. #' #' @examples #' \dontrun{ @@ -59,12 +57,10 @@ create_conc <- function(ADNCA, #' #' @details #' The function performs the following steps: -#' \itemize{ -#' \item Arranges the data by 'USUBJID' and 'DOSNO'. -#' \item Groups the data by 'USUBJID' and 'DOSNO'. -#' \item Selects the first row within each group. -#' \item Converts 'DOSEA' to numeric and retains the 'ROUTE' as 'IQROUTE'. -#' } +#' - Arranges the data by 'USUBJID' and 'DOSNO'. +#' - Groups the data by 'USUBJID' and 'DOSNO'. +#' - Selects the first row within each group. +#' - Converts 'DOSEA' to numeric and retains the 'ROUTE' as 'IQROUTE'. #' #' @examples #' \dontrun{ @@ -112,11 +108,9 @@ create_dose <- function(df_conc, #' #' @details #' The function performs the following steps: -#' \itemize{ -#' \item Creates a vector with all pharmacokinetic parameters. -#' \item Based on dose times, creates a data frame with start and end times. -#' \item Adds logical columns for each specified parameter. -#' } +#' - Creates a vector with all pharmacokinetic parameters. +#' - Based on dose times, creates a data frame with start and end times. +#' - Adds logical columns for each specified parameter. #' #' @examples #' \dontrun{ @@ -158,6 +152,6 @@ create_dose_intervals <- function(mydose = mydose, # Identify the intervals as the base ones for the NCA analysis mutate(type_interval = "main") - return(dose_intervals) + dose_intervals } diff --git a/R/reshape_PKNCA_results.R b/R/reshape_PKNCA_results.R index 945341c5..0f407892 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/reshape_PKNCA_results.R @@ -95,10 +95,9 @@ reshape_pknca_results <- function(myres) { } # Do a final standardization of the results reshaped - reshaped_results <- all_aucs %>% + all_aucs %>% # Define the number of decimals to round the results mutate(across(where(is.numeric), ~ round(.x, 3))) %>% ungroup() - return(reshaped_results) } From cb43585847c8b45a011b95a0636e09e1ae4e0d5b Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 14 Jan 2025 11:04:50 +0100 Subject: [PATCH 70/85] refactor: rename reshape_PKNCA_results to pivot_wider_pknca_results --- NAMESPACE | 2 +- ..._results.R => pivot_wider_pknca_results.R} | 73 ++++++++++--------- inst/shiny/tabs/nca.R | 4 +- man/create_dose_intervals.Rd | 2 +- ...esults.Rd => pivot_wider_pknca_results.Rd} | 12 +-- tests/testthat/test-create_start_impute.R | 4 - 6 files changed, 48 insertions(+), 49 deletions(-) rename R/{reshape_PKNCA_results.R => pivot_wider_pknca_results.R} (50%) rename man/{reshape_pknca_results.Rd => pivot_wider_pknca_results.Rd} (56%) diff --git a/NAMESPACE b/NAMESPACE index ff100cea..164559fc 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,8 +17,8 @@ export(general_meanplot) export(geometric_mean) export(has_label) export(lambda_slope_plot) +export(pivot_wider_pknca_results) export(pptestcd_dict) -export(reshape_pknca_results) export(run_app) export(set_empty_label) import(bslib) diff --git a/R/reshape_PKNCA_results.R b/R/pivot_wider_pknca_results.R similarity index 50% rename from R/reshape_PKNCA_results.R rename to R/pivot_wider_pknca_results.R index 0f407892..c32b110a 100644 --- a/R/reshape_PKNCA_results.R +++ b/R/pivot_wider_pknca_results.R @@ -2,7 +2,9 @@ #' #' This function reshapes the structure of the results produced by the main function #' of the PKNCA package (pk.nca) in a way that each row represents all the main results -#' summarized for each profile in each individual/patient. +#' summarized for each profile in each individual/patient. Excluding the ID variables, +#' each column name corresponds with a calculated parameter and between brackets its +#' corresponding units. AUC intervals, if present, are be added as additional columns. #' #' @param myres The output of PKNCA::pk.nca #' @@ -15,71 +17,70 @@ #' @importFrom tidyr pivot_wider pivot_longer #' @export #' -reshape_pknca_results <- function(myres) { +pivot_wider_pknca_results <- function(myres) { # Get all names with units and make a dictionary structure dict_pttestcd_with_units <- myres$result %>% - select(PPTESTCD, PPORRESU) %>% - unique() %>% + dplyr::select(PPTESTCD, PPORRESU) %>% + dplyr::distinct() %>% pull(PPORRESU, PPTESTCD) # Filter out infinite AUCs and pivot the data to incorporate # the parameters into columns with their units infinite_aucs_vals <- myres$result %>% - unique() %>% - filter(type_interval == "main") %>% - select(-PPORRESU, -exclude, -type_interval) %>% - pivot_wider(names_from = PPTESTCD, values_from = PPORRES) + dplyr::distinct() %>% + dplyr::filter(type_interval == "main") %>% + dplyr::select(-PPORRESU, -exclude, -type_interval) %>% + tidyr::pivot_wider(names_from = PPTESTCD, values_from = PPORRES) infinite_aucs_exclude <- myres$result %>% - unique() %>% - filter(type_interval == "main") %>% - select(-PPORRES, -PPORRESU, -type_interval) %>% - mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% - pivot_wider(names_from = PPTESTCD, values_from = exclude) + dplyr::distinct() %>% + dplyr::filter(type_interval == "main") %>% + dplyr::select(-PPORRES, -PPORRESU, -type_interval) %>% + dplyr::mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% + tidyr::pivot_wider(names_from = PPTESTCD, values_from = exclude) infinite_aucs <- merge(infinite_aucs_vals, infinite_aucs_exclude) - infinite_aucs_with_lambda <- myres$data$conc$data %>% - merge(infinite_aucs) %>% + infinite_aucs_with_lambda <- dplyr::inner_join(myres$data$conc$data, infinite_aucs) %>% group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% arrange(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, IX) %>% - # Deduce if the user perform an exclusion/selection to indicate if the slope - # is manually selected - mutate(lambda.z.method = ifelse( + # Deduce if the user perform an exclusion/dplyr::selection to indicate if the slope + # is manually dplyr::selected + dplyr::mutate(lambda.z.method = ifelse( any(is.excluded.hl) | any(is.included.hl), "Manual", "Best slope" )) %>% - # Filter out the rows that do not have relation with lambda calculation (when calculated) + # dplyr::filter out the rows that do not have relation with lambda calculation (when calculated) # and derive the IX - filter(!exclude_half.life | is.na(lambda.z.time.first) | is.na(lambda.z.n.points)) %>% - filter(TIME >= (lambda.z.time.first + start) | is.na(lambda.z.time.first)) %>% - filter(row_number() <= lambda.z.n.points | is.na(lambda.z.n.points)) %>% - mutate(lambda.z.ix = paste0(IX, collapse = ",")) %>% - mutate(lambda.z.ix = ifelse(is.na(lambda.z), NA, lambda.z.ix)) %>% - slice(1) %>% - select(any_of(c(names(infinite_aucs), "lambda.z.method", "lambda.z.ix"))) + dplyr::filter(!exclude_half.life | is.na(lambda.z.time.first) | is.na(lambda.z.n.points)) %>% + dplyr::filter(TIME >= (lambda.z.time.first + start) | is.na(lambda.z.time.first)) %>% + dplyr::filter(row_number() <= lambda.z.n.points | is.na(lambda.z.n.points)) %>% + dplyr::mutate(lambda.z.ix = paste0(IX, collapse = ",")) %>% + dplyr::mutate(lambda.z.ix = ifelse(is.na(lambda.z), NA, lambda.z.ix)) %>% + dplyr::slice(1) %>% + dplyr::select(any_of(c(names(infinite_aucs), "lambda.z.method", "lambda.z.ix"))) # If there were intervals defined, make independent columns for each if (any(myres$result$type_interval == "manual")) { interval_aucs_vals <- myres$result %>% - filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% - mutate( + dplyr::filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% + dplyr::mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) ) %>% - select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% - pivot_wider(names_from = interval_name_col, values_from = PPORRES) + dplyr::select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% + tidyr::pivot_wider(names_from = interval_name_col, values_from = PPORRES) interval_aucs_exclude <- myres$result %>% - filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% - mutate( + dplyr::filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% + dplyr::mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% - select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% - pivot_wider(names_from = interval_name_col, values_from = exclude) + dplyr::select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% + tidyr::pivot_wider(names_from = interval_name_col, values_from = exclude) interval_aucs <- merge(interval_aucs_vals, interval_aucs_exclude) %>% # Rename column names to include the units in parenthesis @@ -97,7 +98,7 @@ reshape_pknca_results <- function(myres) { # Do a final standardization of the results reshaped all_aucs %>% # Define the number of decimals to round the results - mutate(across(where(is.numeric), ~ round(.x, 3))) %>% - ungroup() + dplyr::mutate(across(where(is.numeric), ~ round(.x, 3))) %>% + dplyr::ungroup() } diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 134761b8..fd9e8fa0 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -460,7 +460,7 @@ final_res_nca <- reactiveVal(NULL) observeEvent(res_nca(), { # Create a reshaped object that will be used to display the results in the UI - final_res_nca <- reshape_pknca_results(res_nca()) + final_res_nca <- pivot_wider_pknca_results(res_nca()) # Get all inputs which are TRUE and start with 'rule_' for (rule_input in grep("^rule_", names(input), value = TRUE)) { @@ -676,7 +676,7 @@ observe({ # Slope settings output$preslopesettings <- DT::renderDataTable({ # Reshape results and only choose the columns that are relevant to half life calculation - preslopesettings <- reshape_pknca_results(res_nca()) %>% + preslopesettings <- pivot_wider_pknca_results(res_nca()) %>% select( any_of(c("USUBJID", "DOSNO")), starts_with("lambda.z"), diff --git a/man/create_dose_intervals.Rd b/man/create_dose_intervals.Rd index ee7c575b..9424a784 100644 --- a/man/create_dose_intervals.Rd +++ b/man/create_dose_intervals.Rd @@ -5,7 +5,7 @@ \title{Create Dose Intervals Dataset} \usage{ create_dose_intervals( - mydose = mydose, + mydose, params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first", "aucpext.obs", "aucpext.pred", "clast.obs"), diff --git a/man/reshape_pknca_results.Rd b/man/pivot_wider_pknca_results.Rd similarity index 56% rename from man/reshape_pknca_results.Rd rename to man/pivot_wider_pknca_results.Rd index 16268b90..678cc308 100644 --- a/man/reshape_pknca_results.Rd +++ b/man/pivot_wider_pknca_results.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/reshape_PKNCA_results.R -\name{reshape_pknca_results} -\alias{reshape_pknca_results} +% Please edit documentation in R/pivot_wider_pknca_results.R +\name{pivot_wider_pknca_results} +\alias{pivot_wider_pknca_results} \title{Reshape PKNCA Results} \usage{ -reshape_pknca_results(myres) +pivot_wider_pknca_results(myres) } \arguments{ \item{myres}{The output of PKNCA::pk.nca} @@ -17,5 +17,7 @@ of the NCA parameters (cmax, AUC, AUClast) \description{ This function reshapes the structure of the results produced by the main function of the PKNCA package (pk.nca) in a way that each row represents all the main results -summarized for each profile in each individual/patient. +summarized for each profile in each individual/patient. Excluding the ID variables, +each column name corresponds with a calculated parameter and between brackets its +corresponding units. AUC intervals, if present, are be added as additional columns. } diff --git a/tests/testthat/test-create_start_impute.R b/tests/testthat/test-create_start_impute.R index ce0e8d17..25b291f7 100644 --- a/tests/testthat/test-create_start_impute.R +++ b/tests/testthat/test-create_start_impute.R @@ -1,7 +1,3 @@ -library(testthat) -library(dplyr) -library(PKNCA) - # Create concentration, dose and interval datasets with all imputation cases conc_data <- data.frame( conc = c(1:3, c(1, 2, 0.5), 1:3, 6:4, 6:4, rep(2, 3), 1:3, 6:4), From fb31b670bee90c36db6718c8ebb7798c377dd0a1 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 14 Jan 2025 13:52:15 +0100 Subject: [PATCH 71/85] refactor: change the names of format_data.R functions and update documentation --- NAMESPACE | 6 +- R/format_data.R | 76 ++++----- R/pivot_wider_pknca_results.R | 11 +- inst/shiny/tabs/nca.R | 26 +-- ...reate_conc.Rd => format_pkncaconc_data.Rd} | 14 +- ...rvals.Rd => format_pkncadata_intervals.Rd} | 12 +- ...reate_dose.Rd => format_pkncadose_data.Rd} | 22 +-- tests/testthat/test-create_start_impute.R | 4 +- tests/testthat/test-format_data.R | 148 ++++++++++-------- 9 files changed, 161 insertions(+), 158 deletions(-) rename man/{create_conc.Rd => format_pkncaconc_data.Rd} (61%) rename man/{create_dose_intervals.Rd => format_pkncadata_intervals.Rd} (82%) rename man/{create_dose.Rd => format_pkncadose_data.Rd} (60%) diff --git a/NAMESPACE b/NAMESPACE index 164559fc..4d0a6d37 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,12 +6,12 @@ export(anonymize_pk_data) export(apply_filters) export(as_factor_preserve_label) export(calculate_summary_stats) -export(create_conc) -export(create_dose) -export(create_dose_intervals) export(create_start_impute) export(filter_breaks) export(flexible_violinboxplot) +export(format_pkncaconc_data) +export(format_pkncadata_intervals) +export(format_pkncadose_data) export(general_lineplot) export(general_meanplot) export(geometric_mean) diff --git a/R/format_data.R b/R/format_data.R index abc8ffdd..e791ff28 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -10,22 +10,20 @@ #' #' @details #' The function performs the following steps: -#' - Filters the data for the specified analyte and event ID (EVID == 0). #' - Creates a 'groups' column by concatenating 'USUBJID' and 'DOSNO'. -#' - Filters out negative time values. -#' - Arranges the data by 'STUDYID', 'USUBJID', 'PCSPEC', 'DOSNO', and 'TIME'. -#' - Adds an index column ('IX') within each group. +#' - Arranges and groups the data by groups_column. +#' - Adds an index column ('IX') 1:n within each group of length n. #' #' @examples #' \dontrun{ #' # Example usage: -#' conc_data <- create_conc(ADNCA, "analyte_name", "profile_type") +#' conc_data <- format_pkncaconc_data(ADNCA, "analyte_name", "profile_type") #' } #' #' @import dplyr #' @export -create_conc <- function(ADNCA, group_columns, time_column = "AFRLT") { +format_pkncaconc_data <- function(ADNCA, group_columns, time_column = "AFRLT") { if (nrow(ADNCA) == 0) { stop("Input dataframe is empty. Please provide a valid ADNCA dataframe.") } @@ -54,36 +52,29 @@ create_conc <- function(ADNCA, group_columns, time_column = "AFRLT") { #' #' @details #' The function performs the following steps: -#' - Arranges the data by 'USUBJID' and 'DOSNO'. -#' - Groups the data by 'USUBJID' and 'DOSNO'. -#' - Selects the first row within each group. -#' - Converts 'DOSEA' to numeric and retains the 'ROUTE' as 'IQROUTE'. -#' -#' @examples -#' \dontrun{ -#' # Example usage: -#' dose_data <- create_dose(conc_data) -#' } +#' - Arranges and groups the data by group_columns +#' - Derives the dose time as: time_column - since_lastdose_time_column +#' - Selects the first row within each group (arranged by since_lastdose_time_column) #' #' @import dplyr #' @export -create_dose <- function(df_conc, - group_columns, - time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") { - if (nrow(df_conc) == 0) { +format_pkncadose_data <- function(pkncaconc_data, + group_columns, + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") { + if (nrow(pkncaconc_data) == 0) { stop("Input dataframe is empty. Please provide a valid concentration dataframe.") } required_columns <- c(group_columns, time_column, since_lastdose_time_column, route_column) - missing_columns <- setdiff(required_columns, colnames(df_conc)) + missing_columns <- setdiff(required_columns, colnames(pkncaconc_data)) if (length(missing_columns) > 0) { stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } - df_conc %>% + pkncaconc_data %>% dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% dplyr::group_by(!!!syms(c(group_columns))) %>% dplyr::arrange(!!sym(since_lastdose_time_column) < 0, @@ -97,7 +88,7 @@ create_dose <- function(df_conc, #' #' This function creates a dataset with dose intervals and specified pharmacokinetic parameters. #' -#' @param df_dose A PKNCAdose object. Default from the app is `mydose`. +#' @param df_dose A PKNCAdose object #' @param params A character vector specifying the pharmacokinetic parameters to include. #' @param start_from_last_dose Logical defining if start is at time of last dose or C1. #' @@ -112,36 +103,37 @@ create_dose <- function(df_conc, #' @examples #' \dontrun{ #' # Example usage: -#' dose_intervals <- create_dose_intervals(df_dose, params) +#' dose_intervals <- format_pkncadata_intervals(df_dose, params) #' } #' #' @import dplyr #' @export -create_dose_intervals <- function(mydose, - params = c("aucinf.obs", "aucint.last", "auclast", "cmax", - "half.life", "tmax", "lambda.z", "lambda.z.n.points", - "r.squared", "adj.r.squared", "lambda.z.time.first", - "aucpext.obs", "aucpext.pred", "clast.obs"), - start_from_last_dose = TRUE) { - if (!inherits(mydose, "PKNCAdose")) { +format_pkncadata_intervals <- function(pknca_dose, + params = c("aucinf.obs", "aucint.last", "auclast", + "cmax", "half.life", "tmax", "lambda.z", + "lambda.z.n.points", "r.squared", + "adj.r.squared", "lambda.z.time.first", + "aucpext.obs", "aucpext.pred", "clast.obs"), + start_from_last_dose = TRUE) { + if (!inherits(pknca_dose, "PKNCAdose")) { stop("Input must be a PKNCAdose object from the PKNCA package.") } - required_columns <- c(unname(unlist(mydose$columns$groups)), mydose$columns$time) - missing_columns <- setdiff(required_columns, colnames(mydose$data)) + required_columns <- c(unname(unlist(pknca_dose$columns$groups)), pknca_dose$columns$time) + missing_columns <- setdiff(required_columns, colnames(pknca_dose$data)) if (length(missing_columns) > 0) { stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } # Based on dose times create a data frame with start and end times - dose_intervals <- mydose$data %>% - mutate(start = if (start_from_last_dose) !!sym(mydose$columns$time) - else !!sym(mydose$columns$time) + !!sym("ARRLT")) %>% - group_by(!!!syms(unname(unlist(mydose$columns$groups)))) %>% - dplyr::arrange(!!sym(mydose$columns$time)) %>% - dplyr::mutate(end = lead(as.numeric(!!sym(mydose$columns$time)), default = Inf)) %>% + dose_intervals <- pknca_dose$data %>% + mutate(start = if (start_from_last_dose) !!sym(pknca_dose$columns$time) + else !!sym(pknca_dose$columns$time) + !!sym("ARRLT")) %>% + group_by(!!!syms(unname(unlist(pknca_dose$columns$groups)))) %>% + dplyr::arrange(!!sym(pknca_dose$columns$time)) %>% + dplyr::mutate(end = lead(as.numeric(!!sym(pknca_dose$columns$time)), default = Inf)) %>% ungroup() %>% - select(any_of(c("start", "end", unname(unlist(mydose$columns$groups)), "DOSNO"))) %>% + select(any_of(c("start", "end", unname(unlist(pknca_dose$columns$groups)), "DOSNO"))) %>% # Create logical columns with the TRUE and as names params argument mutate(!!!setNames(rep(TRUE, length(params)), params)) %>% diff --git a/R/pivot_wider_pknca_results.R b/R/pivot_wider_pknca_results.R index c32b110a..7e773e75 100644 --- a/R/pivot_wider_pknca_results.R +++ b/R/pivot_wider_pknca_results.R @@ -3,7 +3,7 @@ #' This function reshapes the structure of the results produced by the main function #' of the PKNCA package (pk.nca) in a way that each row represents all the main results #' summarized for each profile in each individual/patient. Excluding the ID variables, -#' each column name corresponds with a calculated parameter and between brackets its +#' each column name corresponds with a calculated parameter and between brackets its #' corresponding units. AUC intervals, if present, are be added as additional columns. #' #' @param myres The output of PKNCA::pk.nca @@ -70,8 +70,10 @@ pivot_wider_pknca_results <- function(myres) { interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) ) %>% - dplyr::select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% - tidyr::pivot_wider(names_from = interval_name_col, values_from = PPORRES) + dplyr::select(-exclude, -PPORRESU, -start, -end, + -PPTESTCD, -interval_name, -type_interval) %>% + tidyr::pivot_wider(names_from = interval_name_col, + values_from = PPORRES) interval_aucs_exclude <- myres$result %>% dplyr::filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% @@ -79,7 +81,8 @@ pivot_wider_pknca_results <- function(myres) { interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% - dplyr::select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% + dplyr::select(-PPORRES, -PPORRESU, -start, -end, + -PPTESTCD, -interval_name, -type_interval) %>% tidyr::pivot_wider(names_from = interval_name_col, values_from = exclude) interval_aucs <- merge(interval_aucs_vals, interval_aucs_exclude) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index fd9e8fa0..794bfb3f 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -184,15 +184,15 @@ observeEvent(input$submit_analyte, priority = 2, { analyte_column <- "ANALYTE" # Segregate the data into concentration and dose records - df_conc <- create_conc(ADNCA = data(), - group_columns = c(group_columns, usubjid_column, analyte_column), - time_column = time_column) %>% + df_conc <- format_pkncaconc_data(ADNCA = data(), + group_columns = c(group_columns, usubjid_column, analyte_column), + time_column = time_column) %>% dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) - df_dose <- create_dose(df_conc = df_conc, - group_columns = c(group_columns, usubjid_column), - time_column = time_column, - since_lastdose_time_column = "ARRLT") + df_dose <- format_pkncadose_data(pkncaconc_data = df_conc, + group_columns = c(group_columns, usubjid_column), + time_column = time_column, + since_lastdose_time_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) df_conc$is.excluded.hl <- FALSE @@ -222,7 +222,7 @@ observeEvent(input$submit_analyte, priority = 2, { duration = "ADOSEDUR" ) - myintervals <- create_dose_intervals(mydose) + myintervals <- format_pkncadata_intervals(mydose) # Combine the PKNCA objects into the PKNCAdata object # TODO think of case with different units for different analytes @@ -407,9 +407,13 @@ observeEvent(input$nca, { mydata <- PKNCA::PKNCAdata( data.conc = mydata$conc, data.dose = mydata$dose, - intervals = bind_rows(create_dose_intervals(mydata$dose, - start_from_last_dose = FALSE), - intervals_userinput()), + intervals = bind_rows( + format_pkncadata_intervals( + mydata$dose, + start_from_last_dose = FALSE + ), + intervals_userinput() + ), units = PKNCA::pknca_units_table( concu = mydata$conc$data$PCSTRESU[1], doseu = mydata$dose$data$DOSEU[1], diff --git a/man/create_conc.Rd b/man/format_pkncaconc_data.Rd similarity index 61% rename from man/create_conc.Rd rename to man/format_pkncaconc_data.Rd index 5c11177c..097ec621 100644 --- a/man/create_conc.Rd +++ b/man/format_pkncaconc_data.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/format_data.R -\name{create_conc} -\alias{create_conc} +\name{format_pkncaconc_data} +\alias{format_pkncaconc_data} \title{Create PK Concentration Dataset} \usage{ -create_conc(ADNCA, group_columns, time_column = "AFRLT") +format_pkncaconc_data(ADNCA, group_columns, time_column = "AFRLT") } \arguments{ \item{ADNCA}{A data frame containing the ADNCA data.} @@ -20,17 +20,15 @@ This function creates a pharmacokinetic concentration dataset from the provided \details{ The function performs the following steps: \itemize{ -\item Filters the data for the specified analyte and event ID (EVID == 0). \item Creates a 'groups' column by concatenating 'USUBJID' and 'DOSNO'. -\item Filters out negative time values. -\item Arranges the data by 'STUDYID', 'USUBJID', 'PCSPEC', 'DOSNO', and 'TIME'. -\item Adds an index column ('IX') within each group. +\item Arranges and groups the data by groups_column. +\item Adds an index column ('IX') 1:n within each group of length n. } } \examples{ \dontrun{ # Example usage: - conc_data <- create_conc(ADNCA, "analyte_name", "profile_type") + conc_data <- format_pkncaconc_data(ADNCA, "analyte_name", "profile_type") } } diff --git a/man/create_dose_intervals.Rd b/man/format_pkncadata_intervals.Rd similarity index 82% rename from man/create_dose_intervals.Rd rename to man/format_pkncadata_intervals.Rd index 9424a784..bdc07e30 100644 --- a/man/create_dose_intervals.Rd +++ b/man/format_pkncadata_intervals.Rd @@ -1,11 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/format_data.R -\name{create_dose_intervals} -\alias{create_dose_intervals} +\name{format_pkncadata_intervals} +\alias{format_pkncadata_intervals} \title{Create Dose Intervals Dataset} \usage{ -create_dose_intervals( - mydose, +format_pkncadata_intervals( + pknca_dose, params = c("aucinf.obs", "aucint.last", "auclast", "cmax", "half.life", "tmax", "lambda.z", "lambda.z.n.points", "r.squared", "adj.r.squared", "lambda.z.time.first", "aucpext.obs", "aucpext.pred", "clast.obs"), @@ -17,7 +17,7 @@ create_dose_intervals( \item{start_from_last_dose}{Logical defining if start is at time of last dose or C1.} -\item{df_dose}{A PKNCAdose object. Default from the app is \code{mydose}.} +\item{df_dose}{A PKNCAdose object} } \value{ A data frame containing the dose intervals and specified pharmacokinetic parameters. @@ -36,7 +36,7 @@ The function performs the following steps: \examples{ \dontrun{ # Example usage: - dose_intervals <- create_dose_intervals(df_dose, params) + dose_intervals <- format_pkncadata_intervals(df_dose, params) } } diff --git a/man/create_dose.Rd b/man/format_pkncadose_data.Rd similarity index 60% rename from man/create_dose.Rd rename to man/format_pkncadose_data.Rd index 70d30fc2..086bebb0 100644 --- a/man/create_dose.Rd +++ b/man/format_pkncadose_data.Rd @@ -1,11 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/format_data.R -\name{create_dose} -\alias{create_dose} +\name{format_pkncadose_data} +\alias{format_pkncadose_data} \title{Create PK Dose Dataset} \usage{ -create_dose( - df_conc, +format_pkncadose_data( + pkncaconc_data, group_columns, time_column = "AFRLT", since_lastdose_time_column = "ARRLT", @@ -24,16 +24,8 @@ This function creates a pharmacokinetic dose dataset from the provided concentra \details{ The function performs the following steps: \itemize{ -\item Arranges the data by 'USUBJID' and 'DOSNO'. -\item Groups the data by 'USUBJID' and 'DOSNO'. -\item Selects the first row within each group. -\item Converts 'DOSEA' to numeric and retains the 'ROUTE' as 'IQROUTE'. +\item Arranges and groups the data by group_columns +\item Derives the dose time as: time_column - since_lastdose_time_column +\item Selects the first row within each group (arranged by since_lastdose_time_column) } } -\examples{ -\dontrun{ - # Example usage: - dose_data <- create_dose(conc_data) -} - -} diff --git a/tests/testthat/test-create_start_impute.R b/tests/testthat/test-create_start_impute.R index 25b291f7..f21a10b3 100644 --- a/tests/testthat/test-create_start_impute.R +++ b/tests/testthat/test-create_start_impute.R @@ -44,8 +44,8 @@ test_that("create_start_impute works without issue", { test_that("create_start_impute does not add impute (NA) when start is in PKNCAconc", { # Check the values in the impute column not_imputed <- result$intervals %>% - dplyr::filter(USUBJID == 1, DOSNO == 1) %>% - dplyr::pull(impute) + dplyr::filter(USUBJID == 1, DOSNO == 1) %>% + dplyr::pull(impute) expect_equal(not_imputed, NA_character_) }) diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index d89b8854..24c90168 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -1,4 +1,4 @@ -test_that("create_conc generates correct dataset", { +test_that("format_pkncaconc_data generates correct dataset", { # Generate sample ADNCA data ADNCA <- data.frame( STUDYID = rep(1, 10), @@ -10,10 +10,11 @@ test_that("create_conc generates correct dataset", { AVAL = runif(10) ) - # Call create_conc - df_conc <- create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT") + # Call format_pkncaconc_data + df_conc <- format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT") # Test if df_conc is a data frame expect_s3_class(df_conc, "data.frame") @@ -37,7 +38,7 @@ test_that("create_conc generates correct dataset", { ) }) -test_that("create_conc generates correct dataset with multiple doses", { +test_that("format_pkncaconc_data generates correct dataset with multiple doses", { # Generate sample ADNCA data with at least two doses per subject ADNCA <- data.frame( STUDYID = rep(1, 20), @@ -52,11 +53,11 @@ test_that("create_conc generates correct dataset with multiple doses", { AVAL = runif(20) ) - # Call create_conc - df_conc <- create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", - "DRUG", "ANALYTE", "DOSNO"), - time_column = "AFRLT") + # Call format_pkncaconc_data + df_conc <- format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE", "DOSNO"), + time_column = "AFRLT") # Test if df_conc is a data frame expect_s3_class(df_conc, "data.frame") @@ -85,15 +86,16 @@ test_that("create_conc generates correct dataset with multiple doses", { ) }) -test_that("create_conc handles empty input", { +test_that("format_pkncaconc_data handles empty input", { ADNCA <- data.frame() - expect_error(create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT"), + expect_error(format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT"), regexp = "Input dataframe is empty. Please provide a valid ADNCA dataframe.") }) -test_that("create_conc handles missing columns", { +test_that("format_pkncaconc_data handles missing columns", { ADNCA <- data.frame( STUDYID = rep(1, 10), USUBJID = rep(1:2, each = 5), @@ -102,13 +104,17 @@ test_that("create_conc handles missing columns", { AFRLT = seq(0, 9), AVAL = runif(10) ) - expect_error(create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT"), - regexp = "Missing required columns: ANALYTE") + expect_error( + format_pkncaconc_data( + ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), + time_column = "AFRLT" + ), + regexp = "Missing required columns: ANALYTE" + ) }) -test_that("create_conc handles multiple analytes", { +test_that("format_pkncaconc_data handles multiple analytes", { ADNCA <- data.frame( STUDYID = rep(1, 20), USUBJID = rep(1, each = 10), @@ -119,14 +125,15 @@ test_that("create_conc handles multiple analytes", { ARRLT = rep(seq(0, 9), 2), AVAL = runif(20) ) - df_conc <- create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT") + df_conc <- format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT") expect_equal(nrow(df_conc), 20) expect_equal(length(unique(df_conc$ANALYTE)), 2) }) -test_that("create_dose generates when missing the dose number column", { +test_that("format_pkncadose_data generates when missing the dose number column", { # Generate sample ADNCA data with at least two doses per subject ADNCA <- data.frame( STUDYID = rep(1, 20), @@ -143,16 +150,18 @@ test_that("create_dose generates when missing the dose number column", { AVAL = runif(20) ) - # Call create_conc - df_conc <- create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT") + # Call format_pkncaconc_data + df_conc <- format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT") - # Call create_dose - df_dose <- create_dose(df_conc, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + # Call format_pkncadose_data + df_dose <- format_pkncadose_data(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT", since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") # Test if df_dose is a data frame expect_s3_class(df_dose, "data.frame") @@ -179,25 +188,26 @@ test_that("create_dose generates when missing the dose number column", { expect_true(all(dose_counts$n >= 2)) }) -test_that("create_dose handles empty input", { +test_that("format_pkncadose_data handles empty input", { df_conc <- data.frame() - expect_error(create_dose(df_conc, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE"), + expect_error(format_pkncadose_data(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE"), regexp = "Input dataframe is empty. Please provide a valid concentration dataframe.") }) -test_that("create_dose_intervals handles incorrect input type", { +test_that("format_pkncadata_intervals handles incorrect input type", { mydose <- list(data = data.frame(STUDYID = 1, USUBJID = 1, TIME = 0), columns = list(groups = c("STUDYID", "USUBJID"), time = "TIME")) - expect_error(create_dose_intervals(mydose), + expect_error(format_pkncadata_intervals(mydose), regexp = "Input must be a PKNCAdose object from the PKNCA package.") }) -test_that("create_dose handles negative time values", { +test_that("format_pkncadose_data handles negative time values", { df_conc <- data.frame( STUDYID = rep(1, 10), USUBJID = rep(1:2, each = 5), @@ -210,15 +220,16 @@ test_that("create_dose handles negative time values", { DOSEA = 10, AVAL = runif(10) ) - df_dose <- create_dose(df_conc, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + df_dose <- format_pkncadose_data(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") expect_true(all(df_dose$AFRLT >= 0)) }) -test_that("create_dose handles multiple analytes", { +test_that("format_pkncadose_data handles multiple analytes", { df_conc <- data.frame( STUDYID = rep(1, 20), USUBJID = rep(1:2, each = 10), @@ -231,16 +242,17 @@ test_that("create_dose handles multiple analytes", { DOSEA = 10, AVAL = runif(20) ) - df_dose <- create_dose(df_conc, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + df_dose <- format_pkncadose_data(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") expect_equal(nrow(df_dose), 4) expect_equal(length(unique(df_dose$ANALYTE)), 2) }) -test_that("create_dose_intervals generates correct dataset", { +test_that("format_pkncadata_intervals generates correct dataset", { # Generate sample ADNCA data with at least two doses per subject ADNCA <- data.frame( STUDYID = rep(1, 20), @@ -257,17 +269,19 @@ test_that("create_dose_intervals generates correct dataset", { AVAL = runif(20) ) - # Call create_conc - df_conc <- create_conc(ADNCA, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT") + # Call format_pkncaconc_data + df_conc <- format_pkncaconc_data(ADNCA, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT") - # Call create_dose - df_dose <- create_dose(df_conc, - group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + # Call format_pkncadose_data + df_dose <- format_pkncadose_data(df_conc, + group_columns = c("STUDYID", "USUBJID", "PCSPEC", + "DRUG", "ANALYTE"), + time_column = "AFRLT", + since_lastdose_time_column = "ARRLT", + route_column = "ROUTE") # Generate PKNCAconc and PKNCAdose objects myconc <- PKNCAconc( @@ -288,8 +302,8 @@ test_that("create_dose_intervals generates correct dataset", { # Define the other arguments for the dose intervals params <- c("cmax", "tmax", "half.life") - # Call create_dose_intervals - myintervals <- create_dose_intervals(mydose, params = params, start_from_last_dose = TRUE) + # Call format_pkncadata_intervals + myintervals <- format_pkncadata_intervals(mydose, params = params, start_from_last_dose = TRUE) # Test if myintervals is a data frame expect_s3_class(myintervals, "data.frame") From b8bd50ca168f25777c1373fd2a6dba994484640d Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 14 Jan 2025 18:35:41 +0100 Subject: [PATCH 72/85] fix: format_pkncadose_data includes either DOSNO or TIME (dose time) to slice data. route_column (unneeded argument) was removed --- R/format_data.R | 25 ++++++++++++++++++------- inst/shiny/tabs/nca.R | 25 ++++++++++++++++--------- tests/testthat/test-format_data.R | 17 ++++++----------- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index e791ff28..fcfe7df4 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -39,7 +39,8 @@ format_pkncaconc_data <- function(ADNCA, group_columns, time_column = "AFRLT") { dplyr::mutate(TIME = !!sym(time_column)) %>% dplyr::group_by(!!!syms(group_columns)) %>% dplyr::mutate(IX = seq_len(n())) %>% - dplyr::ungroup() + dplyr::ungroup() %>% + dplyr::arrange(!!!syms(group_columns)) } #' Create PK Dose Dataset @@ -61,27 +62,37 @@ format_pkncaconc_data <- function(ADNCA, group_columns, time_column = "AFRLT") { format_pkncadose_data <- function(pkncaconc_data, group_columns, + dosno_column = NULL, time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") { + since_lastdose_time_column = "ARRLT") { + + # Check: Dataset is not empty if (nrow(pkncaconc_data) == 0) { stop("Input dataframe is empty. Please provide a valid concentration dataframe.") } - - required_columns <- c(group_columns, time_column, since_lastdose_time_column, route_column) + + # Check: All necessary columns are present + required_columns <- c(group_columns, time_column, since_lastdose_time_column) missing_columns <- setdiff(required_columns, colnames(pkncaconc_data)) if (length(missing_columns) > 0) { stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } + + # Make sure there is a slice of the data by dose number even if the column does not exist + if (!is.null(dosno_column) && dosno_column %in% names(pkncaconc_data)) { + group_columns <- c(group_columns, dosno_column) + } else { + group_columns <- c(group_columns, "TIME") + } pkncaconc_data %>% dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% - dplyr::group_by(!!!syms(c(group_columns))) %>% + dplyr::group_by(!!!syms(group_columns)) %>% dplyr::arrange(!!sym(since_lastdose_time_column) < 0, !!sym(since_lastdose_time_column)) %>% dplyr::slice(1) %>% dplyr::ungroup() %>% - dplyr::mutate(ROUTE = !!sym(route_column)) + dplyr::arrange(!!!syms(group_columns)) } #' Create Dose Intervals Dataset diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 794bfb3f..83a8a765 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -177,9 +177,10 @@ mydata <- reactiveVal(NULL) observeEvent(input$submit_analyte, priority = 2, { # Define explicetely input columns until there are input definitions - group_columns <- intersect(colnames(data()), c("STUDYID", "PCSPEC", "DOSNO", "ROUTE", "DRUG")) + group_columns <- intersect(colnames(data()), c("STUDYID", "PCSPEC", "ROUTE", "DRUG")) usubjid_column <- "USUBJID" time_column <- "AFRLT" + dosno_column <- "DOSNO" route_column <- "ROUTE" analyte_column <- "ANALYTE" @@ -187,11 +188,14 @@ observeEvent(input$submit_analyte, priority = 2, { df_conc <- format_pkncaconc_data(ADNCA = data(), group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) %>% - dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) + dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) %>% + # Consider only the analytes requested by the user + dplyr::filter(!!sym(analyte_column) %in% input$select_analyte) df_dose <- format_pkncadose_data(pkncaconc_data = df_conc, group_columns = c(group_columns, usubjid_column), time_column = time_column, + dosno_column = dosno_column, since_lastdose_time_column = "ARRLT") # Define initially a inclusions/exclusions for lambda slope estimation (with no input) @@ -200,12 +204,6 @@ observeEvent(input$submit_analyte, priority = 2, { df_conc$REASON <- NA # Exclusions will have preferential reason statements than inclusions df_conc$exclude_half.life <- FALSE - # Filter data based on selected analyte and dose numbers - df_conc <- df_conc %>% - dplyr::filter(!!sym(analyte_column) %in% input$select_analyte, - DOSNO %in% input$select_dosno, - if ("EVID" %in% names(data())) EVID == 0 else TRUE) - # Make the PKNCA concentration and dose objects myconc <- PKNCA::PKNCAconc( df_conc, @@ -222,7 +220,11 @@ observeEvent(input$submit_analyte, priority = 2, { duration = "ADOSEDUR" ) - myintervals <- format_pkncadata_intervals(mydose) + myintervals <- format_pkncadata_intervals(mydose) %>% + # Filter only the doses requested by the user + dplyr::filter( + !!sym(dosno_column) %in% input$select_dosno + ) # Combine the PKNCA objects into the PKNCAdata object # TODO think of case with different units for different analytes @@ -413,6 +415,11 @@ observeEvent(input$nca, { start_from_last_dose = FALSE ), intervals_userinput() + ) %>% + # Filter only the analytes and doses requested by the user + dplyr::filter( + DOSNO %in% input$select_dosno, + if ("EVID" %in% names(data())) EVID == 0 else TRUE ), units = PKNCA::pknca_units_table( concu = mydata$conc$data$PCSTRESU[1], diff --git a/tests/testthat/test-format_data.R b/tests/testthat/test-format_data.R index 24c90168..de6b312f 100644 --- a/tests/testthat/test-format_data.R +++ b/tests/testthat/test-format_data.R @@ -160,8 +160,7 @@ test_that("format_pkncadose_data generates when missing the dose number column", df_dose <- format_pkncadose_data(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), - time_column = "AFRLT", since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + time_column = "AFRLT", since_lastdose_time_column = "ARRLT") # Test if df_dose is a data frame expect_s3_class(df_dose, "data.frame") @@ -192,10 +191,9 @@ test_that("format_pkncadose_data handles empty input", { df_conc <- data.frame() expect_error(format_pkncadose_data(df_conc, group_columns = c("STUDYID", "USUBJID", "PCSPEC", - "DRUG", "ANALYTE"), + "DRUG"), time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE"), + since_lastdose_time_column = "ARRLT"), regexp = "Input dataframe is empty. Please provide a valid concentration dataframe.") }) @@ -224,8 +222,7 @@ test_that("format_pkncadose_data handles negative time values", { group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + since_lastdose_time_column = "ARRLT") expect_true(all(df_dose$AFRLT >= 0)) }) @@ -246,8 +243,7 @@ test_that("format_pkncadose_data handles multiple analytes", { group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + since_lastdose_time_column = "ARRLT") expect_equal(nrow(df_dose), 4) expect_equal(length(unique(df_dose$ANALYTE)), 2) }) @@ -280,8 +276,7 @@ test_that("format_pkncadata_intervals generates correct dataset", { group_columns = c("STUDYID", "USUBJID", "PCSPEC", "DRUG", "ANALYTE"), time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE") + since_lastdose_time_column = "ARRLT") # Generate PKNCAconc and PKNCAdose objects myconc <- PKNCAconc( From 902260333a81d76772258fd8b5e03d4968750bfe Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 14 Jan 2025 18:39:47 +0100 Subject: [PATCH 73/85] refactor: lintr cleaning and roxygen2 documentation update --- R/format_data.R | 8 ++++---- inst/shiny/tabs/nca.R | 14 +++++++------- man/format_pkncadose_data.Rd | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index fcfe7df4..2825fa4f 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -39,7 +39,7 @@ format_pkncaconc_data <- function(ADNCA, group_columns, time_column = "AFRLT") { dplyr::mutate(TIME = !!sym(time_column)) %>% dplyr::group_by(!!!syms(group_columns)) %>% dplyr::mutate(IX = seq_len(n())) %>% - dplyr::ungroup() %>% + dplyr::ungroup() %>% dplyr::arrange(!!!syms(group_columns)) } @@ -65,19 +65,19 @@ format_pkncadose_data <- function(pkncaconc_data, dosno_column = NULL, time_column = "AFRLT", since_lastdose_time_column = "ARRLT") { - + # Check: Dataset is not empty if (nrow(pkncaconc_data) == 0) { stop("Input dataframe is empty. Please provide a valid concentration dataframe.") } - + # Check: All necessary columns are present required_columns <- c(group_columns, time_column, since_lastdose_time_column) missing_columns <- setdiff(required_columns, colnames(pkncaconc_data)) if (length(missing_columns) > 0) { stop(paste("Missing required columns:", paste(missing_columns, collapse = ", "))) } - + # Make sure there is a slice of the data by dose number even if the column does not exist if (!is.null(dosno_column) && dosno_column %in% names(pkncaconc_data)) { group_columns <- c(group_columns, dosno_column) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 83a8a765..ec83592b 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -188,7 +188,7 @@ observeEvent(input$submit_analyte, priority = 2, { df_conc <- format_pkncaconc_data(ADNCA = data(), group_columns = c(group_columns, usubjid_column, analyte_column), time_column = time_column) %>% - dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) %>% + dplyr::arrange(across(all_of(c(usubjid_column, time_column)))) %>% # Consider only the analytes requested by the user dplyr::filter(!!sym(analyte_column) %in% input$select_analyte) @@ -415,12 +415,12 @@ observeEvent(input$nca, { start_from_last_dose = FALSE ), intervals_userinput() - ) %>% - # Filter only the analytes and doses requested by the user - dplyr::filter( - DOSNO %in% input$select_dosno, - if ("EVID" %in% names(data())) EVID == 0 else TRUE - ), + ) %>% + # Filter only the analytes and doses requested by the user + dplyr::filter( + DOSNO %in% input$select_dosno, + if ("EVID" %in% names(data())) EVID == 0 else TRUE + ), units = PKNCA::pknca_units_table( concu = mydata$conc$data$PCSTRESU[1], doseu = mydata$dose$data$DOSEU[1], diff --git a/man/format_pkncadose_data.Rd b/man/format_pkncadose_data.Rd index 086bebb0..e75cf39c 100644 --- a/man/format_pkncadose_data.Rd +++ b/man/format_pkncadose_data.Rd @@ -7,9 +7,9 @@ format_pkncadose_data( pkncaconc_data, group_columns, + dosno_column = NULL, time_column = "AFRLT", - since_lastdose_time_column = "ARRLT", - route_column = "ROUTE" + since_lastdose_time_column = "ARRLT" ) } \arguments{ From 269a92cb4e10562e6aa982e636f0ace43e908c00 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Tue, 14 Jan 2025 18:52:27 +0100 Subject: [PATCH 74/85] spelling: update wordlist --- inst/WORDLIST | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index 1b789662..4e30cc7d 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -5,10 +5,7 @@ Bärtschi CDISC DOSEA DOSNO -EVID -IQROUTE NCA -PCSPEC PKNCA PKNCAdata PKNCAdose @@ -16,7 +13,6 @@ Pharmacokinetic Pre RO RStudio -STUDYID TLG USUBJID USUBJIDs @@ -33,6 +29,7 @@ customizable df ggplot ggplots +lastdose nca pharmacokinetic pkcg From 9f81db41e4f83d6268f2c7f2ee6ec3e3014a9b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20J=2E=20Rodr=C3=ADguez?= <68994823+Gero1999@users.noreply.github.com> Date: Wed, 15 Jan 2025 16:12:17 +0100 Subject: [PATCH 75/85] suggestions: nitpicks, returns m-kolomanski MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mateusz Kołomański <63905560+m-kolomanski@users.noreply.github.com> --- R/PKNCA_impute_method_additions.R | 8 ++++---- R/create_start_impute.R | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/R/PKNCA_impute_method_additions.R b/R/PKNCA_impute_method_additions.R index 106f2330..5ab5e3df 100644 --- a/R/PKNCA_impute_method_additions.R +++ b/R/PKNCA_impute_method_additions.R @@ -7,7 +7,7 @@ #' @param ... Additional arguments (currently not used). #' @param options List of options (currently not used). #' -#' @return A data frame with imputed start concentration. +#' @returns A data frame with imputed start concentration. #' @details #' This function adheres to the structure required by the `PKNCA` package to work with its #' functionalities. For more information, see the @@ -47,7 +47,7 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., opti #' @param ... Additional arguments (currently not used). #' @param options List of options (currently not used). #' -#' @return A data frame with imputed start concentration. +#' @returns A data frame with imputed start concentration. #' @details #' This function adheres to the structure required by the `PKNCA` package to work with its #' functionalities.For more information, see the @@ -63,8 +63,8 @@ PKNCA_impute_method_start_logslope <- function(conc, time, start, end, ..., opti PKNCA_impute_method_start_c1 <- function(conc, time, start, end, ..., options = list()) { # nolint d_conc_time <- data.frame(conc = conc, time = time) if (!any(time == start)) { - all_concs <- conc[time >= start & time <= end] - all_times <- time[time >= start & time <= end] + all_concs <- conc[time >= start & time <= end] + all_times <- time[time >= start & time <= end] if (!all(is.na(all_concs))) { c1 <- all_concs[which.min(all_times)] d_conc_time <- rbind(d_conc_time, data.frame(time = start, conc = c1)) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index 329ff781..e95f88ff 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -3,7 +3,7 @@ #' Defines an impute column in the intervals of the PKNCAdata object based on data #' #' @param mydata A PKNCAdata object containing concentration and dose data. -#' @return A PKNCAdata object with updated intervals table including start imputation strategies. +#' @returns A PKNCAdata object with updated intervals table including start imputation strategies. #' @import dplyr #' @importFrom rlang sym #' @importFrom PKNCA pk.calc.c0 @@ -36,9 +36,9 @@ create_start_impute <- function(mydata) { mydata_with_int <- merge( x = mydata$conc$data %>% - dplyr::select(any_of(c(conc_group_columns, conc_column, time_column))), + select(any_of(c(conc_group_columns, conc_column, time_column))), y = mydata$dose$data %>% - dplyr::select(any_of(c(dose_group_columns, route_column, + select(any_of(c(dose_group_columns, route_column, duration_column, "DOSNO", "DRUG"))) ) %>% merge(mydata$intervals) @@ -48,7 +48,7 @@ create_start_impute <- function(mydata) { if (analyte_column %in% colnames(mydata_with_int)) { drug_column <- analyte_column } else { - mydata_with_int <- dplyr::mutate(mydata_with_int, + mydata_with_int <- mutate(mydata_with_int, ANALYTE = "A") analyte_column <- "ANALYTE" drug_column <- analyte_column From 036158b09805e56a362dae2b29048f776102d818 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 10:35:29 +0100 Subject: [PATCH 76/85] refactor: clarify with logical columns create_start_impute.R assignation --- R/create_start_impute.R | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index e95f88ff..54dcf946 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -59,10 +59,14 @@ create_start_impute <- function(mydata) { mydata$intervals <- mydata_with_int %>% group_by(across(all_of(c(group_columns, "DOSNO", "start", "end")))) %>% arrange(across(all_of(c(group_columns, time_column)))) %>% - dplyr::mutate(is.possible.c0.logslope = !is.na(pk.calc.c0(conc = !!sym(conc_column), - time = !!sym(time_column), - time.dose = start[1], - method = "logslope")) + mutate( + is.first.dose = DOSNO == 1, + is.ivbolus = tolower(!!sym(route_column)) == "intravascular" & !!sym(duration_column) == 0, + is.analyte.drug = !!sym(analyte_column) == !!sym(drug_column), + is.possible.c0.logslope = !is.na(pk.calc.c0(conc = !!sym(conc_column), + time = !!sym(time_column), + time.dose = start[1], + method = "logslope")) ) %>% arrange( (!!sym(time_column) - start) < 0, @@ -73,22 +77,20 @@ create_start_impute <- function(mydata) { rowwise() %>% mutate( impute = case_when( + # Start concentration already present: No imputation (NA) !!sym(time_column) == start & !is.na(!!sym(conc_column)) ~ NA, - DOSNO == 1 & - (tolower(!!sym(route_column)) == "extravascular" | - !!sym(duration_column) > 0 | - !!sym(analyte_column) != !!sym(drug_column)) ~ "start_conc0", - DOSNO > 1 & - (tolower(!!sym(route_column)) == "extravascular" | - !!sym(duration_column) > 0 | - !!sym(analyte_column) != !!sym(drug_column)) ~ "start_predose", - tolower(!!sym(route_column)) == "intravascular" & - !!sym(duration_column) == 0 & - !!sym(analyte_column) == !!sym(drug_column) & - is.possible.c0.logslope ~ "start_logslope", - tolower(!!sym(route_column)) == "intravascular" & - !!sym(duration_column) == 0 & - !!sym(analyte_column) == !!sym(drug_column) ~ "start_c1" + + # 1st dose with not IV bolus or analyte =! drug : Start concentration is 0 + is.first.dose & (!is.ivbolus | !is.analyte.drug) ~ "start_conc0", + + # Posterior doses not IV bolus or analyte =! drug : Start concentration is a predose concentration + !is.first.dose & (!is.ivbolus | !is.analyte.drug) ~ "start_predose", + + # IV bolus with analyte = drug : Start concentration is the log-extrapolated concentration (if possible) + is.ivbolus & is.analyte.drug & is.possible.c0.logslope ~ "start_logslope", + + # IV bolus with analyte = drug and not possible log-extrapolation: Start concentration is first observed concentration + is.ivbolus & is.analyte.drug ~ "start_c1" ) ) %>% # Select only the columns of interest From 529a27da211bfcc6993de02a83b8cb039be65c7a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 11:48:58 +0100 Subject: [PATCH 77/85] issue: eliminate all redundant dplyr/tidyr namespacing --- R/format_data.R | 30 ++++++++-------- R/pivot_wider_pknca_results.R | 66 +++++++++++++++++------------------ 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index 2825fa4f..f13f63d0 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -34,13 +34,13 @@ format_pkncaconc_data <- function(ADNCA, group_columns, time_column = "AFRLT") { } ADNCA %>% - dplyr::mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% - dplyr::arrange(!!sym(time_column)) %>% - dplyr::mutate(TIME = !!sym(time_column)) %>% - dplyr::group_by(!!!syms(group_columns)) %>% - dplyr::mutate(IX = seq_len(n())) %>% - dplyr::ungroup() %>% - dplyr::arrange(!!!syms(group_columns)) + mutate(conc_groups = interaction(!!!syms(group_columns), sep = "\n")) %>% + arrange(!!sym(time_column)) %>% + mutate(TIME = !!sym(time_column)) %>% + group_by(!!!syms(group_columns)) %>% + mutate(IX = seq_len(n())) %>% + ungroup() %>% + arrange(!!!syms(group_columns)) } #' Create PK Dose Dataset @@ -86,13 +86,13 @@ format_pkncadose_data <- function(pkncaconc_data, } pkncaconc_data %>% - dplyr::mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% - dplyr::group_by(!!!syms(group_columns)) %>% - dplyr::arrange(!!sym(since_lastdose_time_column) < 0, + mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% + group_by(!!!syms(group_columns)) %>% + arrange(!!sym(since_lastdose_time_column) < 0, !!sym(since_lastdose_time_column)) %>% - dplyr::slice(1) %>% - dplyr::ungroup() %>% - dplyr::arrange(!!!syms(group_columns)) + slice(1) %>% + ungroup() %>% + arrange(!!!syms(group_columns)) } #' Create Dose Intervals Dataset @@ -141,8 +141,8 @@ format_pkncadata_intervals <- function(pknca_dose, mutate(start = if (start_from_last_dose) !!sym(pknca_dose$columns$time) else !!sym(pknca_dose$columns$time) + !!sym("ARRLT")) %>% group_by(!!!syms(unname(unlist(pknca_dose$columns$groups)))) %>% - dplyr::arrange(!!sym(pknca_dose$columns$time)) %>% - dplyr::mutate(end = lead(as.numeric(!!sym(pknca_dose$columns$time)), default = Inf)) %>% + arrange(!!sym(pknca_dose$columns$time)) %>% + mutate(end = lead(as.numeric(!!sym(pknca_dose$columns$time)), default = Inf)) %>% ungroup() %>% select(any_of(c("start", "end", unname(unlist(pknca_dose$columns$groups)), "DOSNO"))) %>% diff --git a/R/pivot_wider_pknca_results.R b/R/pivot_wider_pknca_results.R index 7e773e75..d28a777b 100644 --- a/R/pivot_wider_pknca_results.R +++ b/R/pivot_wider_pknca_results.R @@ -21,69 +21,69 @@ pivot_wider_pknca_results <- function(myres) { # Get all names with units and make a dictionary structure dict_pttestcd_with_units <- myres$result %>% - dplyr::select(PPTESTCD, PPORRESU) %>% - dplyr::distinct() %>% + select(PPTESTCD, PPORRESU) %>% + distinct() %>% pull(PPORRESU, PPTESTCD) # Filter out infinite AUCs and pivot the data to incorporate # the parameters into columns with their units infinite_aucs_vals <- myres$result %>% - dplyr::distinct() %>% - dplyr::filter(type_interval == "main") %>% - dplyr::select(-PPORRESU, -exclude, -type_interval) %>% - tidyr::pivot_wider(names_from = PPTESTCD, values_from = PPORRES) + distinct() %>% + filter(type_interval == "main") %>% + select(-PPORRESU, -exclude, -type_interval) %>% + pivot_wider(names_from = PPTESTCD, values_from = PPORRES) infinite_aucs_exclude <- myres$result %>% - dplyr::distinct() %>% - dplyr::filter(type_interval == "main") %>% - dplyr::select(-PPORRES, -PPORRESU, -type_interval) %>% - dplyr::mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% - tidyr::pivot_wider(names_from = PPTESTCD, values_from = exclude) + distinct() %>% + filter(type_interval == "main") %>% + select(-PPORRES, -PPORRESU, -type_interval) %>% + mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% + pivot_wider(names_from = PPTESTCD, values_from = exclude) infinite_aucs <- merge(infinite_aucs_vals, infinite_aucs_exclude) - infinite_aucs_with_lambda <- dplyr::inner_join(myres$data$conc$data, infinite_aucs) %>% + infinite_aucs_with_lambda <- inner_join(myres$data$conc$data, infinite_aucs) %>% group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% arrange(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO, IX) %>% - # Deduce if the user perform an exclusion/dplyr::selection to indicate if the slope - # is manually dplyr::selected - dplyr::mutate(lambda.z.method = ifelse( + # Deduce if the user perform an exclusion/selection to indicate if the slope + # is manually selected + mutate(lambda.z.method = ifelse( any(is.excluded.hl) | any(is.included.hl), "Manual", "Best slope" )) %>% - # dplyr::filter out the rows that do not have relation with lambda calculation (when calculated) + # filter out the rows that do not have relation with lambda calculation (when calculated) # and derive the IX - dplyr::filter(!exclude_half.life | is.na(lambda.z.time.first) | is.na(lambda.z.n.points)) %>% - dplyr::filter(TIME >= (lambda.z.time.first + start) | is.na(lambda.z.time.first)) %>% - dplyr::filter(row_number() <= lambda.z.n.points | is.na(lambda.z.n.points)) %>% - dplyr::mutate(lambda.z.ix = paste0(IX, collapse = ",")) %>% - dplyr::mutate(lambda.z.ix = ifelse(is.na(lambda.z), NA, lambda.z.ix)) %>% - dplyr::slice(1) %>% - dplyr::select(any_of(c(names(infinite_aucs), "lambda.z.method", "lambda.z.ix"))) + filter(!exclude_half.life | is.na(lambda.z.time.first) | is.na(lambda.z.n.points)) %>% + filter(TIME >= (lambda.z.time.first + start) | is.na(lambda.z.time.first)) %>% + filter(row_number() <= lambda.z.n.points | is.na(lambda.z.n.points)) %>% + mutate(lambda.z.ix = paste0(IX, collapse = ",")) %>% + mutate(lambda.z.ix = ifelse(is.na(lambda.z), NA, lambda.z.ix)) %>% + slice(1) %>% + select(any_of(c(names(infinite_aucs), "lambda.z.method", "lambda.z.ix"))) # If there were intervals defined, make independent columns for each if (any(myres$result$type_interval == "manual")) { interval_aucs_vals <- myres$result %>% - dplyr::filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% - dplyr::mutate( + filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% + mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0(PPTESTCD, "_", interval_name) ) %>% - dplyr::select(-exclude, -PPORRESU, -start, -end, + select(-exclude, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% - tidyr::pivot_wider(names_from = interval_name_col, + pivot_wider(names_from = interval_name_col, values_from = PPORRES) interval_aucs_exclude <- myres$result %>% - dplyr::filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% - dplyr::mutate( + filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% + mutate( interval_name = paste0(signif(start), "-", signif(end)), interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% - dplyr::select(-PPORRES, -PPORRESU, -start, -end, + select(-PPORRES, -PPORRESU, -start, -end, -PPTESTCD, -interval_name, -type_interval) %>% - tidyr::pivot_wider(names_from = interval_name_col, values_from = exclude) + pivot_wider(names_from = interval_name_col, values_from = exclude) interval_aucs <- merge(interval_aucs_vals, interval_aucs_exclude) %>% # Rename column names to include the units in parenthesis @@ -101,7 +101,7 @@ pivot_wider_pknca_results <- function(myres) { # Do a final standardization of the results reshaped all_aucs %>% # Define the number of decimals to round the results - dplyr::mutate(across(where(is.numeric), ~ round(.x, 3))) %>% - dplyr::ungroup() + mutate(across(where(is.numeric), ~ round(.x, 3))) %>% + ungroup() } From 25baba65ab770ee733248e49221f1c9d87c1b333 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 11:55:19 +0100 Subject: [PATCH 78/85] issue: change base function to dplyr (base::merge > dplyr::inner_join) --- R/pivot_wider_pknca_results.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/pivot_wider_pknca_results.R b/R/pivot_wider_pknca_results.R index d28a777b..845c53ae 100644 --- a/R/pivot_wider_pknca_results.R +++ b/R/pivot_wider_pknca_results.R @@ -40,7 +40,7 @@ pivot_wider_pknca_results <- function(myres) { mutate(PPTESTCD = paste0("exclude.", PPTESTCD)) %>% pivot_wider(names_from = PPTESTCD, values_from = exclude) - infinite_aucs <- merge(infinite_aucs_vals, infinite_aucs_exclude) + infinite_aucs <- inner_join(infinite_aucs_vals, infinite_aucs_exclude) infinite_aucs_with_lambda <- inner_join(myres$data$conc$data, infinite_aucs) %>% group_by(STUDYID, PCSPEC, ANALYTE, USUBJID, DOSNO) %>% @@ -85,7 +85,7 @@ pivot_wider_pknca_results <- function(myres) { -PPTESTCD, -interval_name, -type_interval) %>% pivot_wider(names_from = interval_name_col, values_from = exclude) - interval_aucs <- merge(interval_aucs_vals, interval_aucs_exclude) %>% + interval_aucs <- inner_join(interval_aucs_vals, interval_aucs_exclude) %>% # Rename column names to include the units in parenthesis rename_with(~ifelse( .x %in% names(dict_pttestcd_with_units), @@ -93,7 +93,7 @@ pivot_wider_pknca_results <- function(myres) { .x )) - all_aucs <- merge(infinite_aucs_with_lambda, interval_aucs, all = TRUE) + all_aucs <- inner_join(infinite_aucs_with_lambda, interval_aucs, all = TRUE) } else { all_aucs <- infinite_aucs_with_lambda } From 3032a3f1576831651a23d283fadfaed287298c3a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 15:40:29 +0100 Subject: [PATCH 79/85] fix: use describe/it in tests PKNCA_impute_method_additions & create_start_impute --- .../test-PKNCA_impute_method_additions.R | 110 +++++++++-------- tests/testthat/test-create_start_impute.R | 113 ++++++++---------- 2 files changed, 115 insertions(+), 108 deletions(-) diff --git a/tests/testthat/test-PKNCA_impute_method_additions.R b/tests/testthat/test-PKNCA_impute_method_additions.R index 473f940c..b8606ec1 100644 --- a/tests/testthat/test-PKNCA_impute_method_additions.R +++ b/tests/testthat/test-PKNCA_impute_method_additions.R @@ -1,51 +1,65 @@ -test_that("PKNCA_impute_method_start_logslope", { - # No imputation when start is in the data - expect_equal( - PKNCA_impute_method_start_logslope(conc = 3:1, time = 0:2, start = 0, end = 2), - data.frame(conc = 3:1, time = 0:2) - ) - # Impute when start is not in the data - expect_equal( - PKNCA_impute_method_start_logslope(conc = 3:1, time = 1:3, start = 0, end = 3), - data.frame(conc = c(4.5, 3:1), time = 0:3), - ignore_attr = TRUE - ) - # Data outside the interval are ignored (before interval) - expect_equal( - PKNCA_impute_method_start_logslope(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), - data.frame(conc = c(0, 4, 2:1), time = c(-1, 0, 1:2)), - ignore_attr = TRUE - ) - # No modification if no C1 -> C2 decline in samples - expect_equal( - PKNCA_impute_method_start_logslope(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), - data.frame(conc = c(1, 1, 1), time = 1:3), - ignore_attr = TRUE - ) - # No modification if C1 = C2 in samples - expect_equal( - PKNCA_impute_method_start_logslope(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), - data.frame(conc = c(3, 3, 1), time = 1:3), - ignore_attr = TRUE - ) +describe("PKNCA_impute_method_start_logslope", { + it("does not impute when start is in the data", { + expect_equal( + PKNCA_impute_method_start_logslope(conc = 3:1, time = 0:2, start = 0, end = 2), + data.frame(conc = 3:1, time = 0:2) + ) + }) + + it("imputes when start is not in the data", { + expect_equal( + PKNCA_impute_method_start_logslope(conc = 3:1, time = 1:3, start = 0, end = 3), + data.frame(conc = c(4.5, 3:1), time = 0:3), + ignore_attr = TRUE + ) + }) + + it("ignores data outside the interval (before interval)", { + expect_equal( + PKNCA_impute_method_start_logslope(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), + data.frame(conc = c(0, 4, 2:1), time = c(-1, 0, 1:2)), + ignore_attr = TRUE + ) + }) + + it("does not modify if no C1 -> C2 decline in samples", { + expect_equal( + PKNCA_impute_method_start_logslope(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), + data.frame(conc = c(1, 1, 1), time = 1:3), + ignore_attr = TRUE + ) + }) + + it("does not modify if C1 = C2 in samples", { + expect_equal( + PKNCA_impute_method_start_logslope(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), + data.frame(conc = c(3, 3, 1), time = 1:3), + ignore_attr = TRUE + ) + }) }) -test_that("PKNCA_impute_method_start_c1", { - # No imputation when start is in the data - expect_equal( - PKNCA_impute_method_start_c1(conc = 1:3, time = 0:2, start = 0, end = 2), - data.frame(conc = 1:3, time = 0:2) - ) - # Impute when start is not in the data - expect_equal( - PKNCA_impute_method_start_c1(conc = 1:3, time = 1:3, start = 0, end = 3), - data.frame(conc = c(1, 1:3), time = 0:3), - ignore_attr = TRUE - ) - # Data outside the interval are ignored (before interval) - expect_equal( - PKNCA_impute_method_start_c1(conc = 1:3, time = c(-1, 1:2), start = 0, end = 2), - data.frame(conc = c(1, 2, 2:3), time = c(-1, 0, 1:2)), - ignore_attr = TRUE - ) +describe("PKNCA_impute_method_start_c1", { + it("does not impute when start is in the data", { + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = 0:2, start = 0, end = 2), + data.frame(conc = 1:3, time = 0:2) + ) + }) + + it("imputes when start is not in the data", { + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = 1:3, start = 0, end = 3), + data.frame(conc = c(1, 1:3), time = 0:3), + ignore_attr = TRUE + ) + }) + + it("ignores data outside the interval (before interval)", { + expect_equal( + PKNCA_impute_method_start_c1(conc = 1:3, time = c(-1, 1:2), start = 0, end = 2), + data.frame(conc = c(1, 2, 2:3), time = c(-1, 0, 1:2)), + ignore_attr = TRUE + ) + }) }) diff --git a/tests/testthat/test-create_start_impute.R b/tests/testthat/test-create_start_impute.R index f21a10b3..ab82c183 100644 --- a/tests/testthat/test-create_start_impute.R +++ b/tests/testthat/test-create_start_impute.R @@ -34,73 +34,66 @@ dose_obj <- PKNCAdose(dose_data, dose ~ time | USUBJID + DOSNO, mydata <- PKNCAdata(conc_obj, dose_obj, intervals = intervals_data) # Apply the function -test_that("create_start_impute works without issue", { - expect_no_error({ - result <<- create_start_impute(mydata) +describe("create_start_impute", { + it("works without issue", { + expect_no_error({ + result <<- create_start_impute(mydata) + }) }) -}) - -test_that("create_start_impute does not add impute (NA) when start is in PKNCAconc", { - # Check the values in the impute column - not_imputed <- result$intervals %>% - dplyr::filter(USUBJID == 1, DOSNO == 1) %>% - dplyr::pull(impute) - expect_equal(not_imputed, NA_character_) -}) + it("does not add impute (NA) when start is in PKNCAconc", { + not_imputed <- result$intervals %>% + dplyr::filter(USUBJID == 1, DOSNO == 1) %>% + dplyr::pull(impute) + expect_equal(not_imputed, NA_character_) + }) -test_that("create_start_impute: conc0 when route is extravascular (first dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 2, DOSNO == 1) %>% - dplyr::pull(impute), - "start_conc0") -}) + it("sets conc0 when route is extravascular (first dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 2, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") + }) -test_that("create_start_impute: predose when route is extravascular (later dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 2, DOSNO == 2) %>% - dplyr::pull(impute), - "start_predose") -}) + it("sets predose when route is extravascular (later dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 2, DOSNO == 2) %>% + dplyr::pull(impute), + "start_predose") + }) -test_that("create_start_impute: logslope when route is IV bolus (first dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 3, DOSNO == 1) %>% - dplyr::pull(impute), - "start_logslope") -}) + it("sets logslope when route is IV bolus (first dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 3, DOSNO == 1) %>% + dplyr::pull(impute), + "start_logslope") + }) -test_that("create_start_impute: logslope when route is IV bolus (later dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 3, DOSNO == 2) %>% - dplyr::pull(impute), - "start_logslope") -}) + it("sets logslope when route is IV bolus (later dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 3, DOSNO == 2) %>% + dplyr::pull(impute), + "start_logslope") + }) -test_that("create_start_impute: c1 when route is IV bolus not monodecaying (first dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 4, DOSNO == 1) %>% - dplyr::pull(impute), - "start_c1") -}) + it("sets c1 when route is IV bolus not monodecaying (first dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 4, DOSNO == 1) %>% + dplyr::pull(impute), + "start_c1") + }) -test_that("create_start_impute: conc0 when route is IV bolus not monodecaying (first dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 5, DOSNO == 1) %>% - dplyr::pull(impute), - "start_conc0") -}) + it("sets conc0 when route is IV bolus not monodecaying (first dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 5, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") + }) -test_that("create_start_impute: conc0 when route is IV bolus not monodecaying (first dose)", { - # Check the values in the impute column - expect_equal(result$intervals %>% - dplyr::filter(USUBJID == 6, DOSNO == 1) %>% - dplyr::pull(impute), - "start_conc0") + it("sets conc0 when route is IV bolus not monodecaying (first dose)", { + expect_equal(result$intervals %>% + dplyr::filter(USUBJID == 6, DOSNO == 1) %>% + dplyr::pull(impute), + "start_conc0") + }) }) From a5ea3105f7099aa510a570b3f11bb1237b3d79b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20J=2E=20Rodr=C3=ADguez?= <68994823+Gero1999@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:43:47 +0100 Subject: [PATCH 80/85] nitpick, suggestion: nca.R add backlash and de-namespace mutate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mateusz Kołomański <63905560+m-kolomanski@users.noreply.github.com> --- inst/shiny/tabs/nca.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index f6c8eaee..b9807600 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -363,13 +363,13 @@ observeEvent(input$nca, { input_names_aucmin <- grep("^timeInputMin_", names(input), value = TRUE) input_names_aucmax <- grep("^timeInputMax_", names(input), value = TRUE) - starts <- unlist(lapply(input_names_aucmin, function(name) input[[name]])) - ends <- unlist(lapply(input_names_aucmax, function(name) input[[name]])) + starts <- unlist(lapply(input_names_aucmin, \(name) input[[name]])) + ends <- unlist(lapply(input_names_aucmax, \(name) input[[name]])) # Make a list of dataframes with each of the intervals requested intervals_list <- lapply(seq_along(starts), function(i) { mydata()$intervals %>% - dplyr::mutate( + mutate( start = start + as.numeric(starts[i]), end = start + as.numeric(ends[i]) ) %>% From d87f10b00a0b915911b971830867bdb31b150c22 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 16:16:41 +0100 Subject: [PATCH 81/85] fix: filtering of dosno/analyte in displayed in `Data Selection` tab table --- inst/shiny/tabs/nca.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index b9807600..2d46bb6c 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -246,7 +246,9 @@ observeEvent(input$submit_analyte, priority = 2, { # Display the PKNCA data object for the user (concentration records) output$datatable <- renderReactable({ req(mydata()) - data <- mydata()$conc$data + data <- mydata()$conc$data %>% + filter(DOSNO %in% input$select_dosno, + ANALYTE %in% input$select_analyte) # Generate column definitions col_defs <- generate_col_defs(data) @@ -458,6 +460,7 @@ res_nca <- eventReactive(pk_nca_trigger(), { dplyr::mutate(start = start - !!sym(mydata()$dose$columns$time), end = end - !!sym(mydata()$dose$columns$time)) %>% dplyr::select(names(myres$result)) + # Return the result return(myres) From 93677f2c21b3bf719b6b61c31de8be4640d3c761 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 17:21:09 +0100 Subject: [PATCH 82/85] fix: crash on slope_selector due to filtering results with NA lambda.z --- inst/shiny/tabs/nca.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index 2d46bb6c..a2352cd3 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -455,12 +455,12 @@ res_nca <- eventReactive(pk_nca_trigger(), { # Increment progress to 100% after NCA calculations are complete incProgress(0.5, detail = "NCA calculations complete!") - # Make the starts and ends of results relative to last dose - myres$result <- merge(myres$result, mydata()$dose$data) %>% + # Make the starts and ends of results relative to last dose using the dose data + myres$result <- myres$result %>% + inner_join(select(mydata()$dose$data, -exclude)) %>% dplyr::mutate(start = start - !!sym(mydata()$dose$columns$time), end = end - !!sym(mydata()$dose$columns$time)) %>% dplyr::select(names(myres$result)) - # Return the result return(myres) From 8703c0788783f534f11dcd377db775bd70fc38c6 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 17:26:00 +0100 Subject: [PATCH 83/85] style: lintr clean code --- R/create_start_impute.R | 10 +++++----- inst/shiny/tabs/nca.R | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/create_start_impute.R b/R/create_start_impute.R index 54dcf946..651e204a 100644 --- a/R/create_start_impute.R +++ b/R/create_start_impute.R @@ -39,7 +39,7 @@ create_start_impute <- function(mydata) { select(any_of(c(conc_group_columns, conc_column, time_column))), y = mydata$dose$data %>% select(any_of(c(dose_group_columns, route_column, - duration_column, "DOSNO", "DRUG"))) + duration_column, "DOSNO", "DRUG"))) ) %>% merge(mydata$intervals) @@ -49,7 +49,7 @@ create_start_impute <- function(mydata) { drug_column <- analyte_column } else { mydata_with_int <- mutate(mydata_with_int, - ANALYTE = "A") + ANALYTE = "A") analyte_column <- "ANALYTE" drug_column <- analyte_column } @@ -83,13 +83,13 @@ create_start_impute <- function(mydata) { # 1st dose with not IV bolus or analyte =! drug : Start concentration is 0 is.first.dose & (!is.ivbolus | !is.analyte.drug) ~ "start_conc0", - # Posterior doses not IV bolus or analyte =! drug : Start concentration is a predose concentration + # Posterior doses not IV bolus or analyte =! drug : Start concentration shifts to predose !is.first.dose & (!is.ivbolus | !is.analyte.drug) ~ "start_predose", - # IV bolus with analyte = drug : Start concentration is the log-extrapolated concentration (if possible) + # IV bolus with analyte = drug : Start concentration is log-backextrapolated (if possible) is.ivbolus & is.analyte.drug & is.possible.c0.logslope ~ "start_logslope", - # IV bolus with analyte = drug and not possible log-extrapolation: Start concentration is first observed concentration + # IV bolus with analyte = drug and not possible logslope: Start concentration is 1st conc is.ivbolus & is.analyte.drug ~ "start_c1" ) ) %>% diff --git a/inst/shiny/tabs/nca.R b/inst/shiny/tabs/nca.R index a2352cd3..d3498a91 100644 --- a/inst/shiny/tabs/nca.R +++ b/inst/shiny/tabs/nca.R @@ -457,7 +457,7 @@ res_nca <- eventReactive(pk_nca_trigger(), { # Make the starts and ends of results relative to last dose using the dose data myres$result <- myres$result %>% - inner_join(select(mydata()$dose$data, -exclude)) %>% + inner_join(select(mydata()$dose$data, -exclude)) %>% dplyr::mutate(start = start - !!sym(mydata()$dose$columns$time), end = end - !!sym(mydata()$dose$columns$time)) %>% dplyr::select(names(myres$result)) From c87ebb0488bab8d9a95201d72d175888d36d147a Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Thu, 16 Jan 2025 17:34:19 +0100 Subject: [PATCH 84/85] style: lintr code cleaning --- R/format_data.R | 2 +- R/pivot_wider_pknca_results.R | 6 +++--- tests/testthat/test-PKNCA_impute_method_additions.R | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/R/format_data.R b/R/format_data.R index f13f63d0..22ea7ec6 100644 --- a/R/format_data.R +++ b/R/format_data.R @@ -89,7 +89,7 @@ format_pkncadose_data <- function(pkncaconc_data, mutate(TIME = !!sym(time_column) - !!sym(since_lastdose_time_column)) %>% group_by(!!!syms(group_columns)) %>% arrange(!!sym(since_lastdose_time_column) < 0, - !!sym(since_lastdose_time_column)) %>% + !!sym(since_lastdose_time_column)) %>% slice(1) %>% ungroup() %>% arrange(!!!syms(group_columns)) diff --git a/R/pivot_wider_pknca_results.R b/R/pivot_wider_pknca_results.R index 845c53ae..e7d36941 100644 --- a/R/pivot_wider_pknca_results.R +++ b/R/pivot_wider_pknca_results.R @@ -71,9 +71,9 @@ pivot_wider_pknca_results <- function(myres) { interval_name_col = paste0(PPTESTCD, "_", interval_name) ) %>% select(-exclude, -PPORRESU, -start, -end, - -PPTESTCD, -interval_name, -type_interval) %>% + -PPTESTCD, -interval_name, -type_interval) %>% pivot_wider(names_from = interval_name_col, - values_from = PPORRES) + values_from = PPORRES) interval_aucs_exclude <- myres$result %>% filter(type_interval == "manual", startsWith(PPTESTCD, "aucint")) %>% @@ -82,7 +82,7 @@ pivot_wider_pknca_results <- function(myres) { interval_name_col = paste0("exclude.", PPTESTCD, "_", interval_name) ) %>% select(-PPORRES, -PPORRESU, -start, -end, - -PPTESTCD, -interval_name, -type_interval) %>% + -PPTESTCD, -interval_name, -type_interval) %>% pivot_wider(names_from = interval_name_col, values_from = exclude) interval_aucs <- inner_join(interval_aucs_vals, interval_aucs_exclude) %>% diff --git a/tests/testthat/test-PKNCA_impute_method_additions.R b/tests/testthat/test-PKNCA_impute_method_additions.R index b8606ec1..6c88eda2 100644 --- a/tests/testthat/test-PKNCA_impute_method_additions.R +++ b/tests/testthat/test-PKNCA_impute_method_additions.R @@ -5,7 +5,7 @@ describe("PKNCA_impute_method_start_logslope", { data.frame(conc = 3:1, time = 0:2) ) }) - + it("imputes when start is not in the data", { expect_equal( PKNCA_impute_method_start_logslope(conc = 3:1, time = 1:3, start = 0, end = 3), @@ -13,7 +13,7 @@ describe("PKNCA_impute_method_start_logslope", { ignore_attr = TRUE ) }) - + it("ignores data outside the interval (before interval)", { expect_equal( PKNCA_impute_method_start_logslope(conc = c(0, 2:1), time = c(-1, 1:2), start = 0, end = 2), @@ -21,7 +21,7 @@ describe("PKNCA_impute_method_start_logslope", { ignore_attr = TRUE ) }) - + it("does not modify if no C1 -> C2 decline in samples", { expect_equal( PKNCA_impute_method_start_logslope(conc = c(1, 1, 1), time = 1:3, start = 0, end = 3), @@ -29,7 +29,7 @@ describe("PKNCA_impute_method_start_logslope", { ignore_attr = TRUE ) }) - + it("does not modify if C1 = C2 in samples", { expect_equal( PKNCA_impute_method_start_logslope(conc = c(3, 3, 1), time = 1:3, start = 0, end = 3), @@ -46,7 +46,7 @@ describe("PKNCA_impute_method_start_c1", { data.frame(conc = 1:3, time = 0:2) ) }) - + it("imputes when start is not in the data", { expect_equal( PKNCA_impute_method_start_c1(conc = 1:3, time = 1:3, start = 0, end = 3), @@ -54,7 +54,7 @@ describe("PKNCA_impute_method_start_c1", { ignore_attr = TRUE ) }) - + it("ignores data outside the interval (before interval)", { expect_equal( PKNCA_impute_method_start_c1(conc = 1:3, time = c(-1, 1:2), start = 0, end = 2), From 2c9c1f4a2fbc482019ecfdeb0321e81a544b1f97 Mon Sep 17 00:00:00 2001 From: Gero1999 Date: Fri, 17 Jan 2025 08:49:37 +0100 Subject: [PATCH 85/85] fix: remove redundant inst/WORDLIST.txt --- inst/WORDLIST.txt | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 inst/WORDLIST.txt diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt deleted file mode 100644 index 40ef7417..00000000 --- a/inst/WORDLIST.txt +++ /dev/null @@ -1,42 +0,0 @@ -ADNCA -ADPP -AFRLT -AUClast -AVAL -BLQ -Bärtschi -CDISC -DOSEA -DOSNO -EVID -IQROUTE -NCA -PCSPEC -PKNCA -Pharmacokinetic -Pre -RO -RStudio -STUDYID -USUBJID -USUBJIDs -analyte -analytes -anonymized -anonymizes -cmax -csv -ggplot -nca -pharmacokinetic -pknca -plotly -pptest -pre -sas -summarization -timepoint -visualizable -xpt -PKNCA_impute_method_start_logslope -PKNCA_impute_method_start_c1