ukbflow logo

ukbflow

RAP-Native R Workflow for UK Biobank Analysis

๐Ÿ“š Documentation โ€ข ๐Ÿ“– Book โ€ข ๐Ÿš€ Get Started โ€ข ๐Ÿ’ฌ Issues โ€ข ๐Ÿค Contributing

Languages: English | ็ฎ€ไฝ“ไธญๆ–‡


[!NOTE] ๐ŸŽ‰ 2026-04 โ€” ukbflow is now available on CRAN! Install with install.packages("ukbflow").

Overview

ukbflow is an R-native, RAP-aware workflow system for UK Biobank controlled-data analysis. It provides a coherent workflow layer for phenotype extraction, disease derivation, association analysis, audit records, and publication-quality outputs while keeping individual-level data inside the RAP environment.

UK Biobank Data Policy (2024+): Individual-level data must remain within the RAP environment. Only summary-level outputs may be downloaded locally. ukbflow is designed to support RAP-native workflows under this constraint; users remain responsible for ensuring that only permitted summary-level outputs are downloaded.

library(ukbflow)

# Simulate UKB-style data locally (on RAP: replace with extract_batch() + job_wait())
data <- ops_toy(n = 5000, seed = 2026) |>
  derive_missing()

# Derive lung cancer outcome (ICD-10 C34) and follow-up time
data <- data |>
  derive_icd10(name = "lung", icd10 = "C34",
               source = c("cancer_registry", "hes")) |>
  derive_followup(name        = "lung",
                  event_col   = "lung_icd10_date",
                  baseline_col = "p53_i0",
                  censor_date  = as.Date("2022-10-31"),
                  death_col    = "p40000_i0")

# Define exposure: ever vs. never smoker
data[, smoking_ever := factor(
  ifelse(p20116_i0 == "Never", "Never", "Ever"),
  levels = c("Never", "Ever")
)]

# Cox regression: smoking โ†’ lung cancer (3-model adjustment)
res <- assoc_coxph(data,
  outcome_col  = "lung_icd10",
  time_col     = "lung_followup_years",
  exposure_col = "smoking_ever",
  covariates   = c("p21022", "p31", "p22189"))

# Forest plot
res_df <- as.data.frame(res)
plot_forest(
  data      = res_df,
  est       = res_df$HR,
  lower     = res_df$CI_lower,
  upper     = res_df$CI_upper,
  ci_column = 2L
)

Installation

# From CRAN (recommended)
install.packages("ukbflow")

# Latest development version from GitHub
# pak::pkg_install("evanbio/ukbflow")
install.packages("ukbflow", repos = c('https://evanbio.r-universe.dev', 'https://cloud.r-project.org'))

# or
remotes::install_github("evanbio/ukbflow")

Requirements: R โ‰ฅ 4.1 ยท dxpy (dx-toolkit, required for RAP interaction)

pip install dxpy

GRS workflows additionally require plink2 availability in the RAP job environment.


Core Features

Layer Key Functions Description
Connection auth_login, auth_select_project Authenticate to RAP via dx-toolkit
Data Access fetch_metadata, extract_batch, job_wait Retrieve phenotype data from UKB dataset on RAP
Data Processing decode_names, decode_values, derive_icd10, derive_followup, derive_case Harmonize multi-source records; derive analysis-ready cohort
Association Analysis assoc_coxph, assoc_logistic, assoc_subgroup Three-model adjustment; subgroup & trend analysis
Genomic Scoring grs_bgen2pgen, grs_score, grs_standardize Distributed plink2 scoring on RAP worker nodes
Visualization plot_forest, plot_tableone Publication-ready figures & tables
Utilities ops_setup, ops_fields, ops_fields_common, ops_toy, ops_na, ops_snapshot, ops_withdraw Environment check, project field search, common field reference, synthetic data, pipeline diagnostics, and cohort management
Audit audit_start, audit_fields, audit_snapshot, audit_pheno, audit_model, audit_job, audit_write Lightweight analysis manifests for fields, snapshots, phenotypes, model results, RAP jobs, and session metadata

Supported Phenotype Sources

ukbflow currently focuses on common UK Biobank disease-phenotype sources that are routinely available in phenotype extraction workflows:

Source Code system / field type Main function(s)
Self-reported illness / cancer UKB fields 20002 / 20001 derive_selfreport()
HES inpatient diagnoses ICD-10, any-position field 41270 with dates from 41280; primary/secondary position is not currently configurable derive_hes()
First Occurrence fields UKB precomputed p131xxx dates derive_first_occurrence()
Cancer registry ICD-10, histology, behaviour, diagnosis date derive_cancer_registry()
Death registry ICD-10 primary / secondary cause of death derive_death_registry()
Multi-source ICD-10 phenotype HES, death, First Occurrence, cancer registry derive_icd10()
Final case definition Self-report plus ICD-10-derived status/date derive_case()

ICD-9, OPCS-4, Read v2, CTV3, and other GP / primary-care code systems are not part of the current public API.


Limitations

ukbflow is a workflow system, not a replacement for the underlying RAP and statistical tools. It orchestrates and records common analysis steps around dx-toolkit / DNAnexus jobs, R modelling functions, plotting packages, and PLINK2-based GRS workflows. It does not provide a general DAG scheduler, estimate RAP costs, replace the DNAnexus interface, or determine study design, covariate choice, phenotype validity, or causal interpretation. Current public phenotype helpers focus on the UKB sources listed above and do not cover GP / primary-care code systems.


Function Reference

Auth & Fetch
Extract & Decode
Job Monitoring
Derive โ€” Phenotypes
Derive โ€” Survival
Association Analysis
Visualization
Utilities & Diagnostics
Analysis Audit
GRS Pipeline

Documentation

Full vignettes and function reference:

https://evanbio.github.io/ukbflow/


Contributing

Bug reports, feature requests, and pull requests are welcome. See CONTRIBUTING.md.


License

MIT License ยฉ 2026 Yibin Zhou


Made with โค๏ธ by Yibin Zhou

โฌ† Back to Top