📊 adamstat
Production-grade CDISC SDTM, ADaM, Biostatistics, and Clinical Study Reporting (CSR) Toolkit in Python.
adamstat is a complete clinical trial data analytics package that bridges raw electronic data capture (EDC) or clinical trial CSV records to regulatory-compliant CDISC SDTM domains, ADaM analysis datasets (ADSL, BDS, OCCDS), inferential biostatistical testing, and ICH E3 compliant Tables, Figures, and Listings (TFLs).
🌟 Key Capabilities
- Clinical EDA & Descriptive Profiling: Multi-column descriptive statistics (mean, SD, median, IQR, quantiles), missingness matrix audits, and categorical demographic breakdown.
- Data Cleaning & Harmonization: Standardizing case and whitespace anomalies in
SEXandARM, biometric outlier isolation (AGE,BMI), date parsing to ISO 8601 (YYYY-MM-DD), deduplication, and baseline feature median array imputations. - Clinical Derivations: ACC/AHA blood pressure categorization, WHO BMI classification, protocol age group stratification, days on study follow-up calculation, and multisystem high-risk flags.
- CDISC SDTM Standardization: Built-in mapping and validation engines for DM (Demographics), VS (Vital Signs), LB (Laboratory), AE (Adverse Events), and EX (Exposure) domains with sequence numbering and ISO date formats.
- CDISC ADaM Model Generation:
- ADSL (Subject-Level Analysis Dataset) with trial population flags (
SAFFL,ITTFL,EFFFL), baseline vital signs, and exposure metrics. - ADVS & ADLB (Basic Data Structure - BDS) with
AVAL,BASE,CHG(change from baseline),PCHG(% change), and protocol responder criteria. - ADAE (Occurrence Data Structure - OCCDS) with mapped numeric severity (
AESEVN) and causality (AERELN).
- ADSL (Subject-Level Analysis Dataset) with trial population flags (
- Biostatistics & Inferential Testing: Independent and paired two-sample t-tests, Cohen's d effect sizes, One-way ANOVA, post-hoc Tukey HSD pairwise comparisons, Shapiro-Wilk normality testing, Levene's test for equality of variance, and Pearson Chi-Square tests for adverse event incidence.
- ICH E3 Clinical Study Reporting (CSR):
- Table 14.1.1: Demographic and Baseline Characteristics.
- Table 14.2.1: Primary and Secondary Efficacy Endpoints with 95% Confidence Intervals and treatment differences vs Placebo.
- Table 14.3.1: Adverse Events Summary by Severity and Preferred Term.
- Figure 14.2.1: Boxplot of Change from Baseline by Treatment Arm.
- Figure 14.2.2: Forest Plot of Treatment Differences with 95% Confidence Intervals.
- Narratives: Automated regulatory result summaries for CSR Section 11/12.
📦 Installation
Install adamstat locally in editable/development mode:
git clone https://github.com/VSRAJHAVEL/adamstat.git
cd adamstat
pip install -e .
Or install with test dependencies:
pip install -e ".[dev]"
🚀 Quickstart Example
import adamstat as ads
# 1. Load sample clinical trial data
trial_data = ads.load_sample_clinical_trial()
# 2. Clean and standardize the dataset
cleaner = ads.ClinicalDataCleaner()
clean_data = cleaner.fit_transform(trial_data)
# 3. Derive clinical categories (BP, BMI, Age groups, Risk flags)
derived_data = ads.derive_clinical_features(clean_data)
# 4. Generate CDISC SDTM Demographics (DM)
dm = ads.create_dm(derived_data, study_id="CT01")
# 5. Generate CDISC ADaM Subject-Level Analysis Dataset (ADSL)
adsl = ads.create_adsl(dm)
# 6. Generate ICH E3 Table 14.1.1 (Demographics)
table_14_1_1 = ads.generate_table_14_1_1_demographics(adsl)
print(table_14_1_1.to_string(index=False))
🔬 End-to-End Pipeline
Execute the full ingestion to CSR reporting workflow in a single call:
from adamstat import ClinicalStudyPipeline, generate_synthetic_clinical_trial
# Generate or load clinical trial dataset
study_data = generate_synthetic_clinical_trial(n_subjects=180)
# Initialize pipeline
pipeline = ClinicalStudyPipeline(study_id="CT01", placebo_arm="Placebo")
# Run pipeline
results = pipeline.run(
trial_df=study_data["clinical_trial"],
vs_long=study_data["vs_long"],
ae_df=study_data["adverse_events"]
)
# Inspect generated ADaM datasets and CSR tables
print("ADSL shape:", results["adam_datasets"]["ADSL"].shape)
print("ADVS shape:", results["adam_datasets"]["ADVS"].shape)
print("CSR Demographics Table:\n", results["tables"]["Table_14_1_1"])
print("CSR Narrative:\n", results["narrative"])
💻 Command Line Interface (CLI)
adamstat includes a full CLI for executing clinical data workflows directly from the terminal:
# 1. Generate descriptive profiling & completeness audit
adamstat eda clinical_raw.csv -o eda_summary.csv
# 2. Clean, deduplicate, and impute raw clinical data
adamstat clean clinical_raw.csv -o clinical_clean.csv
# 3. Derive clinical parameters
adamstat derive clinical_clean.csv -o clinical_derived.csv
# 4. Run inferential biostatistical tests (t-tests, ANOVA)
adamstat stats clinical_analysis.csv --endpoints SBP_CHG DBP_CHG GLU_CHG --arm-col ARM --placebo Placebo
🧪 Running Unit Tests
Run the test suite with pytest:
python -m pytest tests -v
📂 Laboratory Experiments & Code Mapping
This repository consolidates the laboratory experiments:
| Lab / Module | Topic / Focus | Core Implementation |
|---|---|---|
| Lab 01 | Clinical Data Exploration & Descriptive Profiling | adamstat.eda (clinical_summary, completeness_audit, categorical_profiles) |
| Lab 02 | Clinical Data Cleaning, Imputation & Deduplication | adamstat.cleaning (ClinicalDataCleaner, standardize_demographics, impute_clinical_data) |
| Lab 03 | Clinical Feature Derivations & Risk Stratification | adamstat.derivation (derive_age_group, derive_bp_category, derive_high_risk_flag) |
| Lab 04 | Clinical Biomarker Visualizations | adamstat.visualization (plot_demographics, plot_vitals_scatter, plot_treatment_boxplots) |
| Lab 05 | CDISC SDTM Domain Generation (DM, VS, LB, AE, EX) | adamstat.sdtm (create_dm, create_vs, create_lb, create_ae, create_ex, validate_sdtm_domain) |
| Lab 06 | CDISC ADaM Datasets (ADSL, BDS, OCCDS) | adamstat.adam (create_adsl, create_advs, create_adlb, create_adae, validate_adam) |
| Lab 07 | Biostatistics & Hypothesis Testing | adamstat.stats (two_sample_ttest, oneway_anova, posthoc_tukey, ae_contingency_test) |
| Lab 08 | ICH E3 Clinical Study Report (CSR) Tables & Figures | adamstat.reporting (generate_table_14_1_1, generate_table_14_2_1, plot_figure_14_2_2_forest) |
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for adamstat 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| adamstat-1.0.2.tar.gz | 3.6 MB | Without provenance | Details for adamstat-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| adamstat-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for adamstat-1.0.2-py3-none-any.whl |
Total release size: 3.7 MB
Release files / adamstat-1.0.2.tar.gz
| Download URL | adamstat-1.0.2.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c04e757fac9d419d72f5aa8ffa8aa12ce4a2d1b8f3481726a939aab5b7bb512d
|
|
BLAKE2b-256 checksum How to use checksums |
040037df4df8c038ebd53a9d4a4d8f6fbc205f03a1dd00a9f0d7ec1118cb17e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / adamstat-1.0.2-py3-none-any.whl
| Download URL | adamstat-1.0.2-py3-none-any.whl |
|---|---|
| Size | 55.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ad1dda3eaa0583a988d30742cbb2d7c293b9d771bcdbcca641c0d2db4a4123c1
|
|
BLAKE2b-256 checksum How to use checksums |
324fc11a7363894ac57685439d47c3d39ac9d42bee459a65140c617014ccb334
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Security for adamstat 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.