Descriptive Clinical Analysis
Descriptive analysis is the first formal analytical layer after a clinical dataset becomes analysis-ready.
It answers a simple but essential question:
Who is in the dataset, what happened to them, and how complete is the information?
Before risk stratification, prediction, dashboarding, or decision support, a clinical team must understand the population.
A model should not be built before the cohort is described.
A dashboard should not be published before the denominator is known.
A clinical interpretation should not be written before the data structure is understood.
Why Descriptive Analysis Matters
In clinical data systems, descriptive analysis is not just a reporting formality.
It is a safety check.
It helps reveal:
- unexpected patient distributions
- missing or sparse variables
- outcome imbalance
- unrealistic values
- data capture gaps
- hidden exclusions
- cohort drift
- site or encounter artifacts
- differences between included and excluded patients
A strong descriptive layer protects the rest of the analysis.
The Starting Point
This chapter uses the analysis-ready dataset created in Chapter 12.
text id="chapter13-input" results/analysis-ready-clinical-dataset.tsv
This file should contain one row per patient and an analysis_inclusion_flag.
The descriptive workflow summarizes both the full prepared dataset and the analysis-included subset.
Descriptive Questions
A clinical descriptive analysis should answer questions such as:
- How many patients are available?
- How many are eligible for analysis?
- What is the age distribution?
- What is the sex distribution?
- What outcomes are observed?
- How long is follow-up?
- How common are key diagnosis indicators?
- How complete are the variables?
- Are there obvious data quality concerns?
- Are the results clinically plausible?
The goal is not to prove a hypothesis.
The goal is to understand the cohort.
Recommended Outputs
This chapter creates a small descriptive analysis package.
text id="chapter13-outputs" results/descriptive-clinical-cohort-summary.tsv results/descriptive-clinical-variable-summary.tsv results/descriptive-clinical-outcome-summary.tsv results/descriptive-clinical-table-one.tsv results/descriptive-clinical-analysis-summary.txt results/figures/descriptive-age-distribution.png results/figures/descriptive-outcome-summary.png results/figures/descriptive-follow-up-by-outcome.png logs/13-descriptive-clinical-analysis.log
These outputs can support clinical review, reporting, dashboards, and later model-development decisions.
How to Run
Run from the project root.
bash id="run-descriptive-clinical-analysis" python scripts/python/13-run-descriptive-clinical-analysis.py Rscript scripts/R/13-visualize-descriptive-clinical-analysis.R bash scripts/bash/13-run-descriptive-clinical-analysis.sh
To run the full chapter workflow with logging:
bash id="run-descriptive-bash-only" bash scripts/bash/13-run-descriptive-clinical-analysis.sh
What the Python Script Does
The Python script produces structured summary tables.
It reads:
text id="descriptive-python-input" results/analysis-ready-clinical-dataset.tsv
It writes:
text id="descriptive-python-outputs" results/descriptive-clinical-cohort-summary.tsv results/descriptive-clinical-variable-summary.tsv results/descriptive-clinical-outcome-summary.tsv results/descriptive-clinical-table-one.tsv results/descriptive-clinical-analysis-summary.txt
The summaries are intentionally simple and auditable.
They are designed to be checked by a human clinical reviewer.
What the R Script Does
The R script creates modern descriptive figures using tidyverse-style workflows and ggplot2.
It writes:
text id="descriptive-r-outputs" results/figures/descriptive-age-distribution.png results/figures/descriptive-outcome-summary.png results/figures/descriptive-follow-up-by-outcome.png
The figures are not meant to replace clinical interpretation.
They help the analyst quickly see whether the cohort behaves as expected.
Cohort Summary
The cohort summary answers the denominator question.
It should include:
- total prepared patients
- analysis-included patients
- analysis-excluded patients
- number of unique patient identifiers
- duplicate patient rows
- median age
- median follow-up
- observed outcome count
A clinical analysis without a denominator is not interpretable.
Variable Summary
The variable summary checks whether each variable is usable.
For each variable, the script records:
- observed data type
- missing count
- missing percent
- unique value count
- example non-missing values
This helps identify variables that appear present but are too incomplete or inconsistent to support interpretation.
Outcome Summary
The outcome summary describes the outcome distribution.
Clinical outcome imbalance is common.
For example, a severe adverse event may be rare, while a mild follow-up outcome may be common.
Outcome imbalance affects:
- descriptive interpretation
- model feasibility
- evaluation metric selection
- dashboard design
- subgroup analysis
- communication with clinical stakeholders
A model chapter should not begin until outcome frequency is understood.
Table One
A common clinical reporting output is a baseline characteristics table.
This chapter creates a simple table-one-style file.
It summarizes key variables by analysis inclusion status.
text id="table-one-concept" group: analysis_inclusion_flag variables: - age - follow_up_days - encounter_count - diagnosis_count - medication_count - sex - age_group - outcome_status
This is not a final manuscript table.
It is a reproducible starting point.
Included Versus Excluded Patients
When an analysis_inclusion_flag exists, descriptive analysis should compare included and excluded records.
This protects against hidden selection effects.
For example, excluded patients may have:
- shorter follow-up
- missing outcomes
- incomplete demographics
- fewer encounters
- different age distributions
If excluded patients differ strongly from included patients, downstream interpretation should mention that limitation.
Clinical Plausibility
Descriptive outputs should be reviewed for clinical plausibility.
Ask:
- Are ages realistic?
- Are follow-up times plausible?
- Are outcome counts expected?
- Are diagnosis indicators reasonable?
- Are vital signs in clinically possible ranges?
- Are missingness levels acceptable?
- Do distributions reflect the intended cohort?
Scripts can detect structure.
Clinical review is still needed to judge meaning.
Connection to Data Science Foundations
This chapter connects directly to the broader Data Science Foundations layer.
Once a tidy patient-level table exists, the same foundational ideas apply:
- inspect the data
- describe the variables
- summarize distributions
- visualize patterns
- identify missingness
- document assumptions
- avoid unsupported claims
The clinical layer adds domain-specific interpretation and governance.
CDI Principle
Descriptive clinical analysis is where the dataset becomes visible.
Before making claims about risk, quality, outcomes, or decisions, the population must be described clearly enough for another person to understand what the analysis is actually about.
Chapter Summary
In this chapter, we created a descriptive analysis layer for the analysis-ready clinical dataset.
We generated cohort summaries, variable summaries, outcome summaries, a table-one-style file, and modern descriptive figures.
The next chapter moves from description into risk stratification and clinical modeling.