---
title: "Template to create patient profiles for SDTM datasets"
subtitle: "Study: X, Batch X"
author: "Laure Cougnaud"
date: "`r format(Sys.Date(), '%B %d, %Y')`"
output: 
  rmarkdown::html_document:
    toc: true
    toc_float: true
    toc_depth: 5
    number_sections: true
vignette: >
  %\VignetteIndexEntry{SDTM template for patient profiles}
  %\VignetteEngine{knitr::rmarkdown}
  \usepackage[utf8]{inputenc}
---

# Introduction

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:
```{r setUpTemplateForYourStudy, eval = FALSE}

# 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, ...).

```{r patientProfiles-optionsChunks, echo = FALSE, cache = FALSE}

	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:

```{r patientProfiles-loadPackages}

	library(patientProfilesVis)

```

## Dataset

The SDTMs datasets are imported into R.

```{r patientProfiles-loadData}
	
	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")

```

```{r patientProfiles-initialization}

	patientProfilesPlots <- list()

```

# Creation of patient profiles

For each domain of interest, the subject profiles are created.
See the vignette: 

## Demographics

```{r patientProfiles-demographics}

	dmPlots <- subjectProfileTextPlot(
		data = dataAll$DM,
		paramValueVar = c(
			"SEX", "RACE", "ETHNIC",
			"COUNTRY", "ARM",
			"AGE", "RFSTDTC"
		),
		# optional:
		labelVars = labelVars
	)
	patientProfilesPlots <- c(patientProfilesPlots, list(DM = dmPlots))

```

## Medical history

```{r patientProfiles-medicalHistory}
	
	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))

```

## Concomitant medications

```{r patientProfiles-concomitantMedications}

	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))

```


## Treatment exposure

```{r patientProfiles-treatmentExposure}

	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))

```

## Adverse events

```{r patientProfiles-adverseEvents}

	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))
	
```

## Laboratory measurements

```{r patientProfiles-laboratory}

	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))
	
```

## Vital signs

```{r patientProfiles-vitalSigns}

	# 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))
	
```

## Electrocardiogram

Note: no ECG data is available for the example dataset,
so this domain is not considered for the example.

```{r patientProfiles-ECG, eval = FALSE}

	# 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))
	
```

## Creation of the reports

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!

```{r patientProfiles-createSubjectProfileReport, message = FALSE, warning = TRUE, eval = FALSE}

	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"
	)

```

# Session information

```{r sessionInformation, echo = FALSE}

	library(pander)
	pander(sessionInfo())

```