Skip to contents

Applies by_strata_by_trt and by_strata_across_trt functions to the endpoints data to determine eligibility for strata statistics. It adds a logical column to the data indicating whether each row meet the criteria.

Usage

apply_criterion_by_strata(
  ep,
  analysis_data_container,
  fn_map,
  type = c("by_strata_by_trt", "by_strata_across_trt")
)

Arguments

ep

A data.table containing endpoint data with applied endpoint criteria, typically the output from apply_criterion_endpoint.

analysis_data_container

data.table containing the analysis data.

fn_map

A data.table mapping endpoint definitions to by-strata criteria functions.

type

The type of criterion to apply, either "by_strata_by_trt" or "by_strata_across_trt".

Value

A data.table with one row per stratum for each endpoint, with an additional logical column indicating whether each row meets the criteria.

Examples

library(data.table)
library(pharmaverseadam)

# Create endpoint with stratification that already passed endpoint criteria
ep <- data.table(
  endpoint_id = "1-0001",
  endpoint_spec_id = 1L,
  crit_accept_endpoint = TRUE,
  stratify_by = list(c("SEX")),
  strata_var = c("M", "F"),  # Two strata plus TOTAL
  event_index = list(1:20),
  treatment_var = "TRT01A",
  treatment_refval = "Xanomeline High Dose",
  endpoint_filter = NA_character_,
  endpoint_group_filter = NA_character_,
  endpoint_group_metadata = list(),
  custom_pop_filter = NA_character_,
  period_var = NA_character_,
  period_value = NA_character_,
  key_analysis_data = "a"
)

# Prepare data container
adcm_data <- as.data.table(pharmaverseadam::adcm)
adcm_data[, INDEX_ := .I]
#>            STUDYID     USUBJID SUBJID SITEID COUNTRY DOMAIN    RFSTDTC
#>             <char>      <char> <char> <char>  <char> <char>     <char>
#>    1: CDISCPILOT01 01-701-1015   1015    701     USA     CM 2014-01-02
#>    2: CDISCPILOT01 01-701-1015   1015    701     USA     CM 2014-01-02
#>    3: CDISCPILOT01 01-701-1015   1015    701     USA     CM 2014-01-02
#>    4: CDISCPILOT01 01-701-1015   1015    701     USA     CM 2014-01-02
#>    5: CDISCPILOT01 01-701-1015   1015    701     USA     CM 2014-01-02
#>   ---                                                                 
#> 7506: CDISCPILOT01 01-718-1427   1427    718     USA     CM 2012-12-17
#> 7507: CDISCPILOT01 01-718-1427   1427    718     USA     CM 2012-12-17
#> 7508: CDISCPILOT01 01-718-1427   1427    718     USA     CM 2012-12-17
#> 7509: CDISCPILOT01 01-718-1427   1427    718     USA     CM 2012-12-17
#> 7510: CDISCPILOT01 01-718-1427   1427    718     USA     CM 2012-12-17
#>          RFENDTC   RFXSTDTC   RFXENDTC         RFPENDTC SCRFDT      FRVDT
#>           <char>     <char>     <char>           <char> <Date>     <Date>
#>    1: 2014-07-02 2014-01-02 2014-07-02 2014-07-02T11:45   <NA>       <NA>
#>    2: 2014-07-02 2014-01-02 2014-07-02 2014-07-02T11:45   <NA>       <NA>
#>    3: 2014-07-02 2014-01-02 2014-07-02 2014-07-02T11:45   <NA>       <NA>
#>    4: 2014-07-02 2014-01-02 2014-07-02 2014-07-02T11:45   <NA>       <NA>
#>    5: 2014-07-02 2014-01-02 2014-07-02 2014-07-02T11:45   <NA>       <NA>
#>   ---                                                                    
#> 7506: 2013-02-18 2012-12-17 2013-02-11       2013-06-03   <NA> 2013-06-03
#> 7507: 2013-02-18 2012-12-17 2013-02-11       2013-06-03   <NA> 2013-06-03
#> 7508: 2013-02-18 2012-12-17 2013-02-11       2013-06-03   <NA> 2013-06-03
#> 7509: 2013-02-18 2012-12-17 2013-02-11       2013-06-03   <NA> 2013-06-03
#> 7510: 2013-02-18 2012-12-17 2013-02-11       2013-06-03   <NA> 2013-06-03
#>       DTHDTC DTHADY  DTHFL LDDTHELD LDDTHGR1 DTH30FL DTHA30FL DTHDOM DTHB30FL
#>       <char>  <num> <char>    <num>   <char>  <char>   <char> <char>   <char>
#>    1:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>    2:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>    3:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>    4:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>    5:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>   ---                                                                        
#> 7506:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#> 7507:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#> 7508:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#> 7509:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#> 7510:   <NA>     NA   <NA>       NA     <NA>    <NA>     <NA>   <NA>     <NA>
#>       REGION1      DMDTC  DMDY   AGE   AGEU AGEGR1    SEX
#>        <char>     <char> <num> <num> <char> <char> <char>
#>    1:      NA 2013-12-26    -7    63  YEARS  18-64      F
#>    2:      NA 2013-12-26    -7    63  YEARS  18-64      F
#>    3:      NA 2013-12-26    -7    63  YEARS  18-64      F
#>    4:      NA 2013-12-26    -7    63  YEARS  18-64      F
#>    5:      NA 2013-12-26    -7    63  YEARS  18-64      F
#>   ---                                                    
#> 7506:      NA 2012-12-13    -4    74  YEARS    >64      F
#> 7507:      NA 2012-12-13    -4    74  YEARS    >64      F
#> 7508:      NA 2012-12-13    -4    74  YEARS    >64      F
#> 7509:      NA 2012-12-13    -4    74  YEARS    >64      F
#> 7510:      NA 2012-12-13    -4    74  YEARS    >64      F
#>                            RACE   RACEGR1                 ETHNIC  SAFFL
#>                          <char>    <char>                 <char> <char>
#>    1:                     WHITE     White     HISPANIC OR LATINO      Y
#>    2:                     WHITE     White     HISPANIC OR LATINO      Y
#>    3:                     WHITE     White     HISPANIC OR LATINO      Y
#>    4:                     WHITE     White     HISPANIC OR LATINO      Y
#>    5:                     WHITE     White     HISPANIC OR LATINO      Y
#>   ---                                                                  
#> 7506: BLACK OR AFRICAN AMERICAN Non-white NOT HISPANIC OR LATINO      Y
#> 7507: BLACK OR AFRICAN AMERICAN Non-white NOT HISPANIC OR LATINO      Y
#> 7508: BLACK OR AFRICAN AMERICAN Non-white NOT HISPANIC OR LATINO      Y
#> 7509: BLACK OR AFRICAN AMERICAN Non-white NOT HISPANIC OR LATINO      Y
#> 7510: BLACK OR AFRICAN AMERICAN Non-white NOT HISPANIC OR LATINO      Y
#>                        ARM  ARMCD               ACTARM ACTARMCD
#>                     <char> <char>               <char>   <char>
#>    1:              Placebo    Pbo              Placebo      Pbo
#>    2:              Placebo    Pbo              Placebo      Pbo
#>    3:              Placebo    Pbo              Placebo      Pbo
#>    4:              Placebo    Pbo              Placebo      Pbo
#>    5:              Placebo    Pbo              Placebo      Pbo
#>   ---                                                          
#> 7506: Xanomeline High Dose Xan_Hi Xanomeline High Dose   Xan_Hi
#> 7507: Xanomeline High Dose Xan_Hi Xanomeline High Dose   Xan_Hi
#> 7508: Xanomeline High Dose Xan_Hi Xanomeline High Dose   Xan_Hi
#> 7509: Xanomeline High Dose Xan_Hi Xanomeline High Dose   Xan_Hi
#> 7510: Xanomeline High Dose Xan_Hi Xanomeline High Dose   Xan_Hi
#>                       TRTP                 TRTA               TRT01P
#>                     <char>               <char>               <char>
#>    1:              Placebo              Placebo              Placebo
#>    2:              Placebo              Placebo              Placebo
#>    3:              Placebo              Placebo              Placebo
#>    4:              Placebo              Placebo              Placebo
#>    5:              Placebo              Placebo              Placebo
#>   ---                                                               
#> 7506: Xanomeline High Dose Xanomeline High Dose Xanomeline High Dose
#> 7507: Xanomeline High Dose Xanomeline High Dose Xanomeline High Dose
#> 7508: Xanomeline High Dose Xanomeline High Dose Xanomeline High Dose
#> 7509: Xanomeline High Dose Xanomeline High Dose Xanomeline High Dose
#> 7510: Xanomeline High Dose Xanomeline High Dose Xanomeline High Dose
#>                     TRT01A     TRTSDT    TRTSDTM TRTSTMF     TRTEDT
#>                     <char>     <Date>     <POSc>  <char>     <Date>
#>    1:              Placebo 2014-01-02 2014-01-02       H 2014-07-02
#>    2:              Placebo 2014-01-02 2014-01-02       H 2014-07-02
#>    3:              Placebo 2014-01-02 2014-01-02       H 2014-07-02
#>    4:              Placebo 2014-01-02 2014-01-02       H 2014-07-02
#>    5:              Placebo 2014-01-02 2014-01-02       H 2014-07-02
#>   ---                                                              
#> 7506: Xanomeline High Dose 2012-12-17 2012-12-17       H 2013-02-11
#> 7507: Xanomeline High Dose 2012-12-17 2012-12-17       H 2013-02-11
#> 7508: Xanomeline High Dose 2012-12-17 2012-12-17       H 2013-02-11
#> 7509: Xanomeline High Dose 2012-12-17 2012-12-17       H 2013-02-11
#> 7510: Xanomeline High Dose 2012-12-17 2012-12-17       H 2013-02-11
#>                   TRTEDTM TRTETMF        APHASE APHASEN       EOSSTT      EOSDT
#>                    <POSc>  <char>        <char>   <num>       <char>     <Date>
#>    1: 2014-07-02 23:59:59       H  On-Treatment       2    COMPLETED 2014-07-02
#>    2: 2014-07-02 23:59:59       H  On-Treatment       2    COMPLETED 2014-07-02
#>    3: 2014-07-02 23:59:59       H  On-Treatment       2    COMPLETED 2014-07-02
#>    4: 2014-07-02 23:59:59       H  On-Treatment       2    COMPLETED 2014-07-02
#>    5: 2014-07-02 23:59:59       H  On-Treatment       2    COMPLETED 2014-07-02
#>   ---                                                                          
#> 7506: 2013-02-11 23:59:59       H Pre-Treatment       1 DISCONTINUED 2013-02-18
#> 7507: 2013-02-11 23:59:59       H Pre-Treatment       1 DISCONTINUED 2013-02-18
#> 7508: 2013-02-11 23:59:59       H Pre-Treatment       1 DISCONTINUED 2013-02-18
#> 7509: 2013-02-11 23:59:59       H Pre-Treatment       1 DISCONTINUED 2013-02-18
#> 7510: 2013-02-11 23:59:59       H Pre-Treatment       1 DISCONTINUED 2013-02-18
#>       RFICDTC     RANDDT   LSTALVDT TRTDURD  DTHDT DTHDTF DTHCAUS DTHCGR1 CMSEQ
#>        <char>     <Date>     <Date>   <num> <Date> <char>  <char>  <char> <num>
#>    1:    <NA> 2014-01-02 2014-07-02     182   <NA>   <NA>    <NA>    <NA>    48
#>    2:    <NA> 2014-01-02 2014-07-02     182   <NA>   <NA>    <NA>    <NA>    54
#>    3:    <NA> 2014-01-02 2014-07-02     182   <NA>   <NA>    <NA>    <NA>    60
#>    4:    <NA> 2014-01-02 2014-07-02     182   <NA>   <NA>    <NA>    <NA>    66
#>    5:    <NA> 2014-01-02 2014-07-02     182   <NA>   <NA>    <NA>    <NA>    17
#>   ---                                                                          
#> 7506:    <NA> 2012-12-17 2013-02-25      57   <NA>   <NA>    <NA>    <NA>     6
#> 7507:    <NA> 2012-12-17 2013-02-25      57   <NA>   <NA>    <NA>    <NA>     8
#> 7508:    <NA> 2012-12-17 2013-02-25      57   <NA>   <NA>    <NA>    <NA>     9
#> 7509:    <NA> 2012-12-17 2013-02-25      57   <NA>   <NA>    <NA>    <NA>    12
#> 7510:    <NA> 2012-12-17 2013-02-25      57   <NA>   <NA>    <NA>    <NA>    13
#>              CMDECOD           CMTRT                                CMCLAS
#>               <char>          <char>                                <char>
#>    1: HYDROCORTISONE  HYDROCORTISONE SYSTEMIC HORMONAL PREPARATIONS, EXCL.
#>    2: HYDROCORTISONE  HYDROCORTISONE SYSTEMIC HORMONAL PREPARATIONS, EXCL.
#>    3: HYDROCORTISONE  HYDROCORTISONE SYSTEMIC HORMONAL PREPARATIONS, EXCL.
#>    4: HYDROCORTISONE  HYDROCORTISONE SYSTEMIC HORMONAL PREPARATIONS, EXCL.
#>    5:        UNCODED NEOSPORIN /USA/                               UNCODED
#>   ---                                                                     
#> 7506:        UNCODED   MULTIVITAMINS                               UNCODED
#> 7507:        UNCODED   MULTIVITAMINS                               UNCODED
#> 7508:        UNCODED   MULTIVITAMINS                               UNCODED
#> 7509:        UNCODED   MULTIVITAMINS                               UNCODED
#> 7510:        UNCODED   MULTIVITAMINS                               UNCODED
#>          CMSTDTC      ASTDT     ASTDTM ASTDTF ASTTMF CMENDTC  AENDT AENDTM
#>           <char>     <Date>     <POSc> <char> <char>  <char> <Date> <POSc>
#>    1: 2014-03-27 2014-03-27 2014-03-27   <NA>      H    <NA>   <NA>   <NA>
#>    2: 2014-03-27 2014-03-27 2014-03-27   <NA>      H    <NA>   <NA>   <NA>
#>    3: 2014-03-27 2014-03-27 2014-03-27   <NA>      H    <NA>   <NA>   <NA>
#>    4: 2014-03-27 2014-03-27 2014-03-27   <NA>      H    <NA>   <NA>   <NA>
#>    5: 2014-01-03 2014-01-03 2014-01-03   <NA>      H    <NA>   <NA>   <NA>
#>   ---                                                                     
#> 7506:    2002-08 2002-08-01 2002-08-01      D      H    <NA>   <NA>   <NA>
#> 7507:    2002-08 2002-08-01 2002-08-01      D      H    <NA>   <NA>   <NA>
#> 7508:    2002-08 2002-08-01 2002-08-01      D      H    <NA>   <NA>   <NA>
#> 7509:    2002-08 2002-08-01 2002-08-01      D      H    <NA>   <NA>   <NA>
#> 7510:    2002-08 2002-08-01 2002-08-01      D      H    <NA>   <NA>   <NA>
#>       AENDTF AENTMF ASTDY CMSTDY AENDY CMENDY ADURN  ADURU ANL01FL ONTRTFL
#>       <char> <char> <num>  <num> <num>  <num> <num> <char>  <char>  <char>
#>    1:   <NA>   <NA>    85     85    NA     NA    NA   <NA>       Y       Y
#>    2:   <NA>   <NA>    85     85    NA     NA    NA   <NA>       Y       Y
#>    3:   <NA>   <NA>    85     85    NA     NA    NA   <NA>       Y       Y
#>    4:   <NA>   <NA>    85     85    NA     NA    NA   <NA>       Y       Y
#>    5:   <NA>   <NA>     2      2    NA     NA    NA   <NA>       Y       Y
#>   ---                                                                     
#> 7506:   <NA>   <NA> -3791     NA    NA     NA    NA   <NA>    <NA>    <NA>
#> 7507:   <NA>   <NA> -3791     NA    NA     NA    NA   <NA>    <NA>    <NA>
#> 7508:   <NA>   <NA> -3791     NA    NA     NA    NA   <NA>    <NA>    <NA>
#> 7509:   <NA>   <NA> -3791     NA    NA     NA    NA   <NA>    <NA>    <NA>
#> 7510:   <NA>   <NA> -3791     NA    NA     NA    NA   <NA>    <NA>    <NA>
#>        PREFL  FUPFL AOCCPFL                             CMINDC CMDOSE CMDOSU
#>       <char> <char>  <char>                             <char>  <num> <char>
#>    1:   <NA>   <NA>       Y                               <NA>      1   VIAL
#>    2:   <NA>   <NA>    <NA>                               <NA>      1   VIAL
#>    3:   <NA>   <NA>    <NA>                               <NA>      1   VIAL
#>    4:   <NA>   <NA>    <NA>                               <NA>      1   VIAL
#>    5:   <NA>   <NA>       Y                               <NA>      1   VIAL
#>   ---                                                                       
#> 7506:      Y   <NA>    <NA> PROPHYLAXIS OR NON-THERAPEUTIC USE      1 TABLET
#> 7507:      Y   <NA>    <NA> PROPHYLAXIS OR NON-THERAPEUTIC USE      1 TABLET
#> 7508:      Y   <NA>    <NA> PROPHYLAXIS OR NON-THERAPEUTIC USE      1 TABLET
#> 7509:      Y   <NA>    <NA> PROPHYLAXIS OR NON-THERAPEUTIC USE      1 TABLET
#> 7510:      Y   <NA>    <NA> PROPHYLAXIS OR NON-THERAPEUTIC USE      1 TABLET
#>       CMDOSFRQ CMROUTE CMSPID CMENRTPT VISITNUM             VISIT VISITDY
#>         <char>  <char> <char>   <char>    <num>            <char>   <num>
#>    1:      PRN TOPICAL      6  ONGOING       10           WEEK 16     112
#>    2:      PRN TOPICAL      6  ONGOING       11           WEEK 20     140
#>    3:      PRN TOPICAL      6  ONGOING       12           WEEK 24     168
#>    4:      PRN TOPICAL      6  ONGOING       13           WEEK 26     182
#>    5:      PRN TOPICAL      5  ONGOING        4            WEEK 2      14
#>   ---                                                                    
#> 7506:       QD    ORAL      1  ONGOING        5            WEEK 4      28
#> 7507:       QD    ORAL      1  ONGOING        6 AMBUL ECG REMOVAL      30
#> 7508:       QD    ORAL      1  ONGOING        7            WEEK 6      42
#> 7509:       QD    ORAL      1  ONGOING        8            WEEK 8      56
#> 7510:       QD    ORAL      1  ONGOING      201         RETRIEVAL     168
#>            CMDTC INDEX_
#>           <char>  <int>
#>    1: 2014-05-07      1
#>    2: 2014-05-21      2
#>    3: 2014-06-18      3
#>    4: 2014-07-02      4
#>    5: 2014-01-16      5
#>   ---                  
#> 7506: 2013-01-17   7506
#> 7507: 2013-01-19   7507
#> 7508: 2013-01-28   7508
#> 7509: 2013-02-18   7509
#> 7510: 2013-06-03   7510

analysis_data_container <- data.table(
  dat = list(adcm_data),
  key_analysis_data = "a"
)
setkey(analysis_data_container, key_analysis_data)
setkey(ep, key_analysis_data)

# Create strata-level criterion: keep strata if >= 3 subjects
min_subgroup_size <- function(dat, event_index, stratify_by, strata_var, ...) {
  # This is a simplified example; actual implementation evaluates actual data
  length(event_index) >= 3
}

fn_map <- data.table(
  endpoint_spec_id = 1L,
  fn_type = "crit_by_strata_by_trt",
  fn_callable = list(min_subgroup_size),
  fn_name = "min_subgroup_size"
)

# Apply strata criteria
ep_strata <- apply_criterion_by_strata(
  ep = ep,
  analysis_data_container = analysis_data_container,
  fn_map = fn_map,
  type = "by_strata_by_trt"
)
#> Warning: Tried to assign NULL to column 'fn_hash', but this column does not exist to remove
#> Warning: Tried to assign NULL to column 'fn_call_char', but this column does not exist to remove

# Result: multiple rows per endpoint (one per stratum)
ep_strata[, .(endpoint_id, strata_var, crit_accept_by_strata_by_trt)]
#>    endpoint_id strata_var crit_accept_by_strata_by_trt
#>         <char>     <char>                       <lgcl>
#> 1:      1-0001        SEX                         TRUE
#> 2:      1-0001        SEX                         TRUE