Quantum Toxic Burden Index (QTBI) — encode correlated environmental exposures into a single, reproducible mixture burden score using a fixed quantum-inspired circuit.
QTBI is designed for environmental mixture epidemiology: you specify the exposure panel and (optionally) external potency benchmarks before outcome modeling. The encoder does not reweight components from the disease outcome.
| Step | What QTBI does |
|---|---|
| 1. Normalize | Each exposure becomes a within-cohort percentile on [0, 1] |
| 2. Encode | Percentiles pass through a fixed entanglement circuit controlled by synergy s |
| 3. Read out | Marginal toxic probabilities sum to one scalar QTBI on [0, n] |
| 4. Analyze | Use the scalar in standard regression (logistic, linear, etc.) |
Optional potency-weighted readout applies external oral reference doses at the final step only, with automatic rescaling so weighted QTBI stays on the same [0, n] scale as the unweighted index.
install.packages("qtbi") # after CRAN acceptance
# or:
# install.packages("remotes")
remotes::install_github("january-msemakweli/qtbi")From a local clone of this repository:
install.packages(".", repos = NULL, type = "source")Requirements: R (>= 4.1.0). No compiled code. No non-base runtime dependencies.
library(qtbi)
# Example exposure data (complete cases only)
df <- data.frame(
LBXBPB = c(0.8, 1.2, 2.1, 0.9), # blood lead
URXIAS = c(3.5, 8.2, 4.1, 12.0), # urinary inorganic As + metabolites
LBXBCD = c(0.2, 0.4, 0.3, 0.6), # blood cadmium
LBXTHG = c(0.5, 1.1, 2.0, 0.7) # blood mercury
)
# Unweighted QTBI (equal readout weights)
processed <- estimate_qtbi(
df,
chemicals = c("LBXBPB", "URXIAS", "LBXBCD", "LBXTHG"),
exposure_names = c("Pb", "As", "Cd", "Hg"),
synergy_strength = 0.6
)
processed$qtbi
diagnose_qtbi(processed)Supply oral reference doses in mg/kg/day (one per exposure). The package derives potency ratios, rescales weights to sum to n, and applies them at readout only.
ref <- c(
Pb = 6.3e-4, # external benchmark (mg/kg/day)
As = 6.0e-5,
Cd = 5.0e-4,
Hg = 1.0e-4
)
weighted <- estimate_qtbi(
df,
chemicals = c("LBXBPB", "URXIAS", "LBXBCD", "LBXTHG"),
exposure_names = c("Pb", "As", "Cd", "Hg"),
synergy_strength = 0.6,
reference_doses = ref,
reference_index = "Pb"
)
qtbi_meta(weighted)$potency_weightsInspect weights explicitly:
raw <- potency_weights_from_reference_doses(ref, c("Pb", "As", "Cd", "Hg"), "Pb")
normalize_potency_weights(raw)Important: align each biomarker with the chemical form used in its benchmark, and review absolute cohort distributions before applying potency weights. A high regulatory weight on a background-level exposure can dominate the index.
library(qtbi)
# 1. Prepare a complete-case analytic frame (no missing exposures)
# 2. Choose panel members (known/suspected toxicants, same direction)
# 3. Encode unweighted and (optionally) potency-weighted QTBI
processed_unw <- estimate_qtbi(
df,
chemicals = exposure_cols,
exposure_names = metal_names,
synergy_strength = 0.6
)
processed_wgt <- estimate_qtbi(
df,
chemicals = exposure_cols,
exposure_names = metal_names,
synergy_strength = 0.6,
reference_doses = reference_doses,
reference_index = "Pb"
)
# 4. Encoder diagnostics (exposure-only; no outcome)
diagnose_qtbi(processed_unw)
synergy_sensitivity(processed_unw, synergy_grid = seq(0, 1, by = 0.1))
# 5. Outcome modeling with standard tools
# glm(ckd ~ qtbi + covariates, data = processed_unw, family = binomial())- Panel selection — include only exposures assumed to increase burden in the same direction.
- Biomarker–benchmark alignment — e.g. speciated inorganic arsenic for an inorganic arsenic RfD, not urinary total arsenic.
- Distribution review — inspect medians/IQRs; percentiles alone can rank low absolute levels highly.
- Synergy setting — use
diagnose_qtbi()/synergy_sensitivity()overs ∈ [0, 1]without the outcome. - Compare readouts — report unweighted and potency-weighted QTBI side by side when weights are used.
| Function | Purpose |
|---|---|
estimate_qtbi() |
Percentile encoding + index computation |
diagnose_qtbi() |
Synergy sensitivity and monotonicity checks |
potency_weights_from_reference_doses() |
Raw potency ratios from oral benchmarks |
normalize_potency_weights() |
Rescale weights to the unweighted [0, n] scale |
qtbi_meta() |
Chemicals, synergy, weights, column names |
qtbi_help() |
Interactive help index |
Advanced exports include build_statevector(), qtbi_from_pcts(), and synergy_diagnostics().
qtbi/
├── R/ # Package source
├── man/ # Documentation
├── tests/ # testthat suite
├── DESCRIPTION
├── NAMESPACE
├── NEWS.md
├── LICENSE
└── README.md
See the illustration/ folder in the GitHub repository for a minimal NHANES metal mixture example.
R CMD build .
R CMD check qtbi_0.1.2.tar.gz --as-cran --no-manualRun tests in R:
testthat::test_local()If you use this package, please cite the methods specification and this software:
Msemakweli JG (2026). The Quantum Toxic Burden Index: Mathematical Specification.
Zenodo. https://doi.org/10.5281/zenodo.20476574
Msemakweli JG (2026). qtbi: Quantum Toxic Burden Index. R package version 0.1.2.
https://github.com/january-msemakweli/qtbi
MIT © January G. Msemakweli