--- title: "initStudy" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{initStudy} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup, include=FALSE} library(OmopStudyBuilder) ``` ## Introduction `initStudy()` is the starting point for building a study project with the **OMOP Common Data Model (CDM)** using the `OmopStudyBuilder` package. It generates a fully structured project folder containing: * Templates for study diagnostics * Templates for analysis code * Shiny apps for diagnostics and reporting * A project README * A reproducible, opinionated layout aligned with [OxInfer](https://oxford-pharmacoepi.github.io/Oxinfer/onboarding/code_review.html) conventions This allows you to immediately focus on writing study-specific code instead of manually assembling the surrounding infrastructure. In this vignette you will learn how to: * Create a new study project using `initStudy()` * Explore the folder structure that is generated * Control whether diagnostics and/or study analysis templates are included * Understand next steps after project creation --- ## Basic usage The simplest way to use `initStudy()` is to provide a directory path. If the directory: * **Does not exist**: it will be created * **Exists but is empty**: it will be used * **Exists and contains files**: an error will be thrown To avoid modifying your real project directories, this vignette uses a temporary folder. ```{r basic-usage, message=FALSE} # Create a temporary root for this vignette study_root <- file.path(tempdir(), "SampleStudy") initStudy(study_root) # Show top-level contents created by initStudy() list.files(study_root) ``` You should see something like: * `diagnosticsCode/` – diagnostic scripts and helpers * `diagnosticsShiny/` – skeleton diagnostics Shiny app * `studyCode/` – scripts for running the main analyses * `studyShiny/` – skeleton reporting Shiny app * `README.md` – overview of the study project To inspect the full structure: ```{r list-recursive} list.files(study_root, recursive = TRUE) ``` --- ## Diagnostics-only and study-only setups You can control which parts of the template are created with the `diagnostics` and `study` arguments. ### Diagnostics-only project ```{r diagnostics-only, message=FALSE} diag_root <- file.path(tempdir(), "DiagnosticsOnly") initStudy( directory = diag_root, diagnostics = TRUE, study = FALSE ) list.files(diag_root) ``` ### Study-only project (no diagnostics templates) ```{r study-only, message=FALSE} study_only_root <- file.path(tempdir(), "StudyOnly") initStudy( directory = study_only_root, diagnostics = FALSE, study = TRUE ) list.files(study_only_root) ``` --- ## What to do after `initStudy()` After generating the project structure, you will mainly work with these folders and files: - `studyCode/` - `studyCode.Rproj`: open this in RStudio to work on the main analysis code. It sets the working directory so all relative paths behave correctly. - `codeToRun.R`: where you add database connection details, schemas, and global settings - `cohorts/instantiateCohorts.R`: defines the study cohorts using your codelists and cohort-building functions. You customise this to match your phenotype definitions. - `runStudy.R`: orchestrates the analysis steps (cohort creation, summaries, analyses, export). - `diagnosticsCode/` - `diagnosticsCode.Rproj`: open this project to work on diagnostics. It keeps diagnostics code separate from the main analysis project. - `codeToRun.R`: similar to the study version, but dedicated to diagnostics. You set connection details and schemas used for running phenotype diagnostics. - `cohorts/instantiateCohorts.R`: defines cohorts for diagnostic checking, often mirroring or simplifying the main study cohorts. - `runStudy.R`: runs the PhenotypeDiagnostics workflow and exports diagnostic results. You might tweak options, but the overall flow is usually left intact. - `studyShiny/` - For a shiny app to explore study results. You extend this with plots, tables, and filters built on top of your exported outputs. - `diagnosticsShiny/` - Contains a minimal Shiny app for exploring diagnostic outputs. Use it to review cohort characteristics and diagnostic results interactively across data partners. --- ## Building and Distributing Your Study Once your study code is ready, `OmopStudyBuilder` provides functions to package it into a Docker image and distribute it to data partners. ### Building the Docker Image ```{r build-docker, eval=FALSE} # Build a Docker image containing your study code dockeriseStudy( image_name = "omop-study-study-code", path = file.path(study_root, "studyCode") ) #> Building Docker image: omop-study-study-code #> This may take some minutes on first build... #> ✔ Image built successfully: omop-study-study-code ``` The image contains: - Your exact R version - All package dependencies (from renv.lock) - Your study code - Database drivers and system dependencies ### Distribution Options #### Option 1: Docker Hub (Online) Push to Docker Hub for easy sharing with connected partners: ```{r push-image, eval=FALSE} pushDockerImage( image_name = "omop-study-study-code", repo = "yourusername/myomopstudy" ) #> ✔ Image pushed to Docker Hub! ``` Data partners can then pull and run the image. They can then run either an interactive RStudio Server session, or run the study in automated mode. ```{r pull-run, eval=FALSE} library(OmopStudyBuilder) # Interactive (requires image built with dockeriseStudy(useRStudio = TRUE)): runRStudio( image_name = "yourusername/myomopstudy:latest", results_path = "./results" ) ``` ### Interactive vs Automated Execution **RStudio Server** runs the Docker image and opens a browser to the RStudio Server URL: ```{r rstudio-run, eval=FALSE} # Requires image built with dockeriseStudy(useRStudio = TRUE) runRStudio( image_name = "omop-study-study-code", results_path = "./results" ) ``` Partners edit credentials in `codeToRun.R` and run the study interactively. **Automated execution** (for programmatic workflows): ```{r auto-run, eval=FALSE} runStudy( image_name = "omop-study-study-code", results_path = "./results", data_path = "path/to/data" ) ``` To stop any running OmopStudyBuilder containers, use: ```{r stop-containers, eval=FALSE} stopStudy(image_name = "omop-study-study-code") ``` For more operational details, see the README files generated into your study folders (for example `studyCode/README.md` and `diagnosticsCode/README.md`). ---