This document presents an example of standard patient profile report for a typical CDISC 'Study Data Tabulation Model' (a.k.a SDTM) datasets.
This document is intended to be used as a template to create patient profile report for your specific study. You can copy the source code of this document into your working directory with:
# get template from the package pathTemplate <- system.file( "doc", "patientProfiles-template-SDTM.Rmd", package = "patientProfilesVis" ) file.copy(from = pathTemplate, to = ".") # Note: your current working directory can be checked with: getwd()
This template can then be further tailored to your specific study (changing data path, variables available in the data, ...).
library(knitr) knitr::opts_chunk$set( error = FALSE, # stop document execution if error (not the default) fig.align = "center" )
The following R packages are required:
library(patientProfilesVis)
The SDTMs datasets are imported into R.
library(clinUtils) # For this vignette, an example STDM dataset is used # (subset of the CDISC Pilot 01 study) data(dataSDTMCDISCP01, package = "clinUtils") dataAll <- dataSDTMCDISCP01 labelVars <- attr(dataSDTMCDISCP01, "labelVars") # If SDTM datasets should be imported from the external folder, # the following code could be used: # pathFiles <- list.files(path = "/path/to/data", pattern = "*.sas7bdat$", full.names = TRUE) # dataAll <- loadDataADaMSDTM(files = pathFiles) # labelVars <- attr(dataAll, "labelVars")
patientProfilesPlots <- list()
For each domain of interest, the subject profiles are created. See the vignette:
dmPlots <- subjectProfileTextPlot( data = dataAll$DM, paramValueVar = c( "SEX", "RACE", "ETHNIC", "COUNTRY", "ARM", "AGE", "RFSTDTC" ), # optional: labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(DM = dmPlots))
mhPlots <- subjectProfileTextPlot( data = dataAll$MH, paramValueVar = c("MHDECOD", "MHTERM", "MHSTDTC"), #"MHENDTC" if available # optional: paramGroupVar = c("MHSTDTC", "MHDY"), title = "Medical history (Start - End)", labelVars = labelVars, table = TRUE ) patientProfilesPlots <- c(patientProfilesPlots, list(MH = mhPlots))
cmPlots <- subjectProfileIntervalPlot( data = dataAll$CM, paramVar = c( "CMTRT", "CMDOSE", "CMDOSU", "CMROUTE", "CMDOSFRQ" ), timeStartVar = "CMSTDY", timeEndVar = "CMENDY", # optional: paramGroupVar = "CMCLAS", # or CMINDC colorVar = "CMCLAS", # or CMINDC labelVars = labelVars, title = "Concomitant medications", # To zoom in axis scale in study time frame # (to avoid scale is focused on negative pre-study time frame for CM) timeTrans = getTimeTrans(type = "asinh-neg"), alpha = 0.8, timeAlign = FALSE ) patientProfilesPlots <- c(patientProfilesPlots, list(CM = cmPlots))
exPlots <- subjectProfileIntervalPlot( data = dataAll$EX, paramVar = c( "EXTRT", "EXDOSE", "EXDOSU", "EXDOSFRM", "EXDOSFRQ", "EXROUTE" ), # "EXTPT" if available timeStartVar = "EXSTDY", timeEndVar = "EXENDY", # optional: colorVar = "EXDOSFRM", title = "Treatment exposure", alpha = 0.8, labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(EX = exPlots))
dataAE <- dataAll$AE$AESEV # to adapt for specific dataset dataAE$AESEV <- factor(dataAll$AE$AESEV, levels = c("MILD", "MODERATE", "SEVERE")) aePlots <- subjectProfileIntervalPlot( data = dataAll$AE, paramVar = "AEDECOD", # AETERM, depending on coding timeStartVar = "AESTDY", timeEndVar = "AEENDY", # optional: paramGroupVar = "AESOC", colorVar = "AESEV", title = "Adverse events", timeAlign = FALSE, alpha = 0.8, labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(AE = aePlots))
dataLB <- dataAll$LB # to adapt for dataset dataLB$LBNRIND <- factor(dataLB$LBNRIND, levels = c("LOW", "NORMAL", "HIGH", "ABNORMAL")) # specify custom color and shape palette colorPaletteLB <- clinUtils::getPaletteCDISC(x = dataLB$LBNRIND, var = "NRIND", type = "color") shapePaletteLB <- clinUtils::getPaletteCDISC(x = dataLB$LBNRIND, var = "NRIND", type = "shape") lbPlots <- subjectProfileLinePlot( data = dataLB, paramValueVar = "LBSTRESN", paramNameVar = "LBTEST", timeVar = "LBDY", # optional paramValueRangeVar = c("LBSTNRLO", "LBSTNRHI"), paramGroupVar = "LBCAT", # "LBSCAT" if available colorVar = "LBNRIND", colorPalette = colorPaletteLB, shapeVar = "LBNRIND", shapePalette = shapePaletteLB, shapeSize = 4, title = "Laboratory test measurements", alpha = 0.8, labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(LB = lbPlots))
# If available, reference range indicator # could be displayed via the color/shape variable vsPlots <- subjectProfileLinePlot( data = dataAll$VS, paramValueVar = "VSSTRESN", paramNameVar = "VSTEST", timeVar = "VSDY", # optional # paramGroupVar = "VSCAT", # if available colorVar = "VSPOS", # if available shapeSize = 2, title = "Vital signs", alpha = 0.8, labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(VS = vsPlots))
Note: no ECG data is available for the example dataset, so this domain is not considered for the example.
# If available, reference range indicator # could be displayed via the color/shape variable egPlots <- subjectProfileLinePlot( data = dataAll$EG, paramValueVar = "EGSTRESN", paramNameVar = "EGTEST", timeVar = "EGDY", # optional title = "Electrocardiogram", alpha = 0.8, labelVars = labelVars ) patientProfilesPlots <- c(patientProfilesPlots, list(EG = egPlots))
The subject profile report is created by subject.
Please note that the subject profile reports are not not created by default in the vignette, for time constraints.
Feel free to run yourself the code, and check the resulting pdf reports!
pathsPatientProfiles <- createSubjectProfileReport( listPlots = patientProfilesPlots, # optional reportPerSubject = TRUE, verbose = TRUE, outputFile = './patientProfiles/subjectProfile.pdf', timeAlign = "all", timeAlignPerSubject = "all", exportBatchSize = 5, # export subjects with highest adverse events severity subjectSortData = dataAll$AE, subjectSortVar = "AESEV", subjectSortDecreasing = TRUE, # # only patients with severe adverse events # subjectSubsetData = dataAll$AE, # subsetVar = "AETOXGR", # subsetValue = "SEVERE" )
library(pander) pander(sessionInfo())
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.