Methods and Data Documentation

0) Scope of the Atlas

  • Intended purpose: cross-source adverse event signal exploration and evidence contextualization.
  • Not intended for pharmacovigilance regulatory decision support as a standalone system.
  • Not intended to estimate population incidence or real-world risk.
  • Not intended to provide clinical guidance, diagnosis, treatment, or prescribing advice.
  • Population limitations apply because data sources differ in inclusion criteria, reporting behavior, and completeness.

The Atlas is intended for hypothesis generation and exploratory analysis rather than confirmatory evidence.

1) Data sources

This section documents ingestion and interpretation for FAERS, clinical trials, PubMed, DK data, and WHO data.

1.1 FAERS data

What FAERS is

FAERS is a spontaneous reporting system and is used for signal detection rather than causal incidence estimation.

Input files used

All FAERS data files are downloaded directly from the FDA's website.

  • https://fis.fda.gov/extensions/FPD-QDE-FAERS/FPD-QDE-FAERS.html

FAERS quarterly data files from Q1 2016 through Q4 2025 were included.

Case versioning logic

For each caseid, the latest primaryid version is retained.

Substance parsing

  • Source: reported active ingredient prod_ai
  • Normalization: lowercase, trim whitespace, remove blanks

Terminology: In AEAtlas, Substance name (active ingredient) is used consistently for this field.

prod_ai is a reporter-entered field and may include spelling variants, brand names, combinations, salt forms, or incomplete ingredient names.

For the current canonical SCI stack, FAERS substance strings are normalized, combination-product strings are split to ingredient-level rows where source strings contain ingredient separators, and each resulting ingredient name is mapped through the shared substance canonicalization table. Rows are then de-duplicated at the case + canonical substance + adverse-event level before aggregation.

Adverse Event parsing

  • Source: Preferred term (pt)
  • Normalization: lowercase, trim whitespace, remove blanks

Counting definition

Counts represent the number of unique case identifiers (caseid) in which a given substance-event pair was reported, after retaining the most recent version of each case. In the canonical SCI stack, combination-product rows can contribute to each split canonical ingredient, but duplicate rows for the same case + ingredient + adverse-event pair are collapsed.

MedDRA System Organ Classes (SOC) mapping

  • Multiple SOCs per PT are collapsed to a joined list

Known limitations

  • Under-reporting and over-reporting
  • Notoriety bias and duplicate complexity
  • Missing age/sex and concomitant medication confounding
  • Indication/channeling bias
  • Exposure denominators (number of patients receiving a drug) are not available in FAERS, preventing incidence estimation

1.2 Clinical trials (ClinicalTrials.gov results)

Database

Postgres: clinicaltrials.gov

ClinicalTrials.gov results data are aggregated arm-level summaries reported by study sponsors and do not represent individual participant data.

Substance to trial mapping

Intervention matching uses ILIKE %drug%. Limitations include substring collisions and missed brand-name variants unless included.

Intervention matching is heuristic and may misclassify trials when intervention names include multiple drugs, brand names, or descriptive phrases.

Included trials

Only studies involving drugs listed as approved by the European Medicines Agency (EMA) are included. The EMA list is downloaded here https://www.ema.europa.eu/en/medicines/download-medicine-data.

Only studies with results_first_posted_date IS NOT NULL. Meaning that only trials with posted results are included in the Atlas

Group logic

  • Reported event groups: EGxxx
  • Baseline groups: BGxxx
  • Map EG to BG by normalized group-title equality

Group mapping relies on title normalization heuristics and may fail for complex study designs (e.g., crossover, extension phases, pooled arms).

Treatment vs control selection

  • Control arm: title contains placebo/control/comparator/SOC patterns and does not mention drug
  • Treatment arm: mentions drug and is not control-pattern arm
  • Multiple candidates: choose highest subjects_at_risk

Arm classification is rule-based and may not perfectly reflect the study's intended comparison structure, particularly in multi-arm or crossover designs.

Outcome extracted

Per trial AE: subjects_affected and subjects_at_risk.

Effect measure

For each trial and adverse event term:

  • a: affected participants in treatment arm
  • n_treat: participants at risk in treatment arm
  • c: affected participants in control arm
  • n_control: participants at risk in control arm
\[ \mathrm{risk}_{\mathrm{treat}}=\frac{a}{n_{\mathrm{treat}}} \]
\[ \mathrm{risk}_{\mathrm{control}}=\frac{c}{n_{\mathrm{control}}} \]
\[ \mathrm{RD}=\mathrm{risk}_{\mathrm{treat}}-\mathrm{risk}_{\mathrm{control}} \]

Interpretation:

  • RD > 0: higher AE risk in treatment arm
  • RD < 0: lower AE risk in treatment arm
  • RD = 0: equal observed risk

Approximate standard error and confidence interval (Wald form):

\[ SE(\mathrm{RD})= \sqrt{ \frac{\mathrm{risk}_{\mathrm{treat}}\left(1-\mathrm{risk}_{\mathrm{treat}}\right)}{n_{\mathrm{treat}}} + \frac{\mathrm{risk}_{\mathrm{control}}\left(1-\mathrm{risk}_{\mathrm{control}}\right)}{n_{\mathrm{control}}} } \]
\[ 95\%\,CI_{\mathrm{RD}}= \left[ \mathrm{RD}-1.96\cdot SE(\mathrm{RD}), \mathrm{RD}+1.96\cdot SE(\mathrm{RD}) \right] \]

The UI currently displays the point estimate-oriented metrics and not trial-level RD confidence intervals.

Risk differences are unadjusted and do not account for baseline imbalances, stratification factors, or time-at-risk differences.

Sex and age extraction

Source: trial baseline demographic records reported in the results dataset.

  • Sex: sum female and male rows per BG group
  • Age mean: param_type ~ mean/average
  • Age SD: param_type ~ sd/stddev/standard deviation

These sex and age values describe baseline trial cohort demographics for selected arms and are not AE-specific participant subsets.

Limitations: median/IQR-only trials, missing SD, mislabelled param_type, multiple age-row semantics.

Known limitations

  • Published-results subset only
  • Selective reporting
  • Heterogeneous AE coding and baseline reporting
  • Differences in treatment duration and follow-up across trials are not adjusted for in the current metrics

1.3 PubMed (literature signal)

What is queried

Substance mention in title/abstract and adverse-event terms from 2016 onward. We currently only search for EMA approved drugs. The list can be download here https://www.ema.europa.eu/en/medicines/download-medicine-data .

Term extraction method

  • Dictionary-based term matching derived from MedDRA Preferred Terms
  • Abstract cleaning: lowercase, punctuation cleanup, header-line cleanup
  • Match extraction from abstract blocks

Indication filtering

Terms matching therapeutic-area concepts are filtered to reduce indication-as-AE false positives.

Publication year

From entrez_summary() pubdate or epublishdate.

Known limitations

  • Not a curated AE dataset
  • False positives from contextual mention
  • Title/abstract only, limited negation handling
  • Literature mentions do not necessarily represent observed adverse events in study populations and may include speculative or background discussion
  • Published literature may preferentially report unusual or severe events, introducing reporting bias
  • Generic terms such as “serious adverse event” are not PT diagnoses

1.4 DK data

What the DK dataset is used for

The Denmark section of the Atlas is an adverse event reporting dataset used for substance-level case summaries, adverse event rankings, signal metrics, and age/sex/year breakdowns.

Application-facing data structure

  • Base adverse-event records for Denmark
  • Pre-aggregated summaries by substance and substance-event combination
  • Server-side totals used for disproportionality metrics
  • Canonicalized AE-derived yearly counts used for DK PV-style SCI scoring
  • Exposure-denominator summaries used for incidence-style displays, not for the current SCI v6 score

Normalization and matching

Substance queries are normalized to lowercase and trimmed before lookup. For detail-level queries the UI uses drug_name=ilike and pt=ilike, which supports case-insensitive matching but may still miss spelling variants not present in the source data.

Counting definition

Top-line DK totals in the Atlas are displayed as case counts. In record-level queries, de-duplication for charts is performed with the adr field, so sex, age, and yearly DK visualizations reflect unique adr values rather than raw row counts.

Time coverage currently used in the UI

DK yearly, age, and sex analyses are queried for recvd_year 2015 through 2023.

Signal metrics

The Atlas computes DK disproportionality metrics from a source-level 2x2 table (ROR, PRR, and a smoothed IC). When any cell is zero, a continuity correction of 0.5 is applied for displayed source metrics. In the current SCI v6 methodology, DK contributes the same PV-style ROR/PRR/IC score structure used for UK and FAERS, without Mantel-Haenszel pooling and without a case-count attenuation factor.

Exposure denominators

Incidence-style yearly displays depend on exposure denominator data. When no denominator is available, the Atlas falls back to case-only display and suppresses denominator-dependent interpretation.

Known limitations

  • The underlying source provenance for the DK dataset is not described in this workspace and should be documented separately if public-source citation is required.
  • Case counts and exposure counts are drawn from different derived objects and may not support strict causal or incidence interpretation.
  • SCI v6 uses canonical substance names from the shared substance mapping layer; unmapped brand names, salts, misspellings, or combination products may still remain source-specific.
  • Age and sex summaries depend on source-field completeness and on the availability of unique adr identifiers.

1.5 UK data

What the UK dataset is used for

The UK section is used for substance-level case summaries, top adverse-event rankings, and substance + adverse-event signal metrics (ROR, PRR, smoothed IC), with year/sex/age charts in the same UI pattern as other spontaneous-reporting sources.

Application-facing data structure

  • Base UK adverse-event records with fields including drug_name, year, sex, age_group, pt, and count
  • Pre-aggregated materialized views for substance totals and substance-event totals used by cards and signal RPCs
  • Server-side totals used for 2x2 disproportionality metrics in the UI

Normalization and matching

UK substance and event matching is normalized with lowercase and whitespace trimming. UI lookups use case-insensitive matching and server-side normalized aggregates.

Counting definition

UK values are source-provided event counts. In AE mode, UK signal/year/sex/age cards are queried on the same configured year window to keep card totals aligned.

Time coverage currently used in the UI

UK AE-mode cards currently query years 2015 through 2025.

Known limitations

  • As with other spontaneous reporting systems, disproportionality metrics reflect reporting patterns rather than incidence or causality.
  • Source-field completeness for age and sex can be limited; unknown categories may represent a large share for some substance-event pairs.

1.6 WHO data

What the WHO dataset is used for

The WHO section of the Atlas is used for substance-level adverse event summaries, full PT-level tables, disproportionality metrics, and substance-level year, sex, and age distributions.

Application-facing data structure

  • Preferred-term event counts
  • Substance-level totals grouped by organ-system context
  • Yearly, sex, and age-group summaries
  • Server-side aggregated totals used for signal metrics

Normalization and matching

WHO substance and event matching is normalized with lowercase and whitespace trimming. The UI queries WHO tables with ilike filters, and the backend materialized views used for signal metrics also store normalized lowercase keys.

Counting definition

WHO adverse event tables use source-provided event counts. Substance totals are taken from the maximum available total per substance in the organ-system summary to avoid double-counting repeated organ-system rows for the same substance.

Time coverage currently used in the UI

The year chart queries WHO data from 2016 through 2025.

Signal metrics

The Atlas computes WHO ROR, PRR, and a smoothed IC from server-side aggregated totals. If those totals are unavailable, the client falls back to direct source-table aggregation. The current WHO implementation does not display a Mantel-Haenszel model or an exposure-based incidence estimate.

Demographic summaries

WHO sex and age panels are currently substance-level summaries, not substance-event-specific summaries. Age groups are mapped into fixed display buckets, and any residual counts outside recognized buckets are reported as unknown age.

Known limitations

  • The WHO charts shown in the UI are substance-level for year, sex, and age, even when an adverse event is selected elsewhere on the page.
  • Substance totals inferred from organ-system summaries depend on the assumption that the maximum per-substance total is the correct denominator.
  • As with other spontaneous reporting systems, disproportionality metrics reflect reporting patterns rather than incidence or causality.
  • The underlying external WHO source citation is not described in this workspace and should be documented separately if a formal provenance statement is needed.

2) Terminology and mapping

Substance canonicalization for SCI v6

SCI v6 uses a shared canonical substance-name layer across DK, UK, FAERS, and clinical trials. Source substance names are lowercased, trimmed, and matched directly against the canonical variant table. The mapping is intentionally dictionary-based rather than heuristic salt stripping, so names such as USAN/INN spelling variants and documented salt forms can map to a common canonical name when present in the canonical table.

The current approach avoids broad automatic suffix removal because some clinically relevant source strings are canonicalized only when the full source variant is preserved. Unmapped names remain as normalized source strings.

2.1 MedDRA mapping & Organ system

SOC mapping is retained even when non-unique. A PT can validly map to multiple SOCs and is stored as a joined list.

2.2 What counts as an adverse event term in the Atlas?

Serious adverse event classification

AEAtlas does not include or display seriousness classifications (e.g., serious vs. non-serious adverse events).

Seriousness is a regulatory designation based on patient outcomes (such as death, hospitalization, life-threatening events, or disability) rather than a specific clinical diagnosis. Because AEAtlas is designed to analyze and compare clinical adverse event terms across studies and data sources, seriousness classifications were not incorporated into the current data model.

Seriousness is distinct from severity; severity reflects clinical intensity, while seriousness reflects regulatory outcomes.

Additionally, seriousness definitions and reporting practices vary across data sources (clinical trials, spontaneous reporting systems, and publications), which limits comparability. Excluding seriousness avoids introducing inconsistent or non-comparable metrics into the Atlas.

Future versions may incorporate seriousness as an optional filter if harmonized definitions and reliable cross-source mappings become available.

Substance reaction

Too nonspecific as free text. Include only when mapped to specific PT concepts.

PolicyDefinitionHandling
IncludeSpecific clinical concepts (PT-like)Keep in Atlas AE nodes
ExcludeSeverity tags (e.g., serious adverse event)Not included or displayed in current model
Exclude/flagAdministrative terms (e.g., treatment emergent)Exclude from AE nodes
Exclude/flagCatch-alls (e.g., drug reaction)Exclude unless standardized PT mapping exists
ConditionalProcedural termsInclude only when clinically meaningful

3) Analytics and metrics

3.1 Disproportionality

FAERS, DK, and WHO disproportionality metrics reflect reporting patterns and should not be interpreted as incidence, prevalence, or causal relative risk in exposed populations.

Across all three spontaneous-reporting sources, these metrics can be influenced by co-reported drugs, reporting practices, stimulated reporting, duplicate handling, and confounding by indication.

In the Atlas, FAERS, DK, and WHO use the same 2x2 disproportionality framework for source-level signal display. FAERS and WHO display source-level ROR, PRR, and smoothed IC/IC025 from source-specific totals. DK displays the same source-level metrics. For SCI v6, DK, UK, and FAERS all use the same PV-style source score based on ROR lower confidence bound, PRR lower confidence bound, and IC025; no Mantel-Haenszel DK score and no case-count attenuation factor are used.

2x2 table

a, b, c, d correspond to substance-event, substance-other, other-substance-event, other-substance-other.

\\[ \\begin{array}{c|cc} & E & \\neg E \\\\ \\hline D & a & b \\\\ \\neg D & c & d \\end{array} \\]

Where D is the drug and E is the adverse event term. For FAERS, DK, and WHO, the source-specific totals define a, b, c, and d; the formulas below are applied within each source.

ROR and CI

\\[ \\mathrm{ROR} = \\frac{a d}{b c} \\]
\\[ \\log(\\mathrm{ROR}) = \\log(a) + \\log(d) - \\log(b) - \\log(c) \\]
\\[ SE\\!\\left(\\log(\\mathrm{ROR})\\right)=\\sqrt{\\frac{1}{a}+\\frac{1}{b}+\\frac{1}{c}+\\frac{1}{d}} \\]
\\[ 95\\%\\,CI_{\\mathrm{ROR}}= \\left[ \\exp\\!\\left(\\log(\\mathrm{ROR})-1.96\\,SE\\right), \\exp\\!\\left(\\log(\\mathrm{ROR})+1.96\\,SE\\right) \\right] \\]

PRR and CI

\\[ \\mathrm{PRR}=\\frac{a/(a+b)}{c/(c+d)} \\]
\\[ SE\\!\\left(\\log(\\mathrm{PRR})\\right)= \\sqrt{ \\frac{1}{a}-\\frac{1}{a+b}+\\frac{1}{c}-\\frac{1}{c+d} } \\]
\\[ 95\\%\\,CI_{\\mathrm{PRR}}= \\left[ \\exp\\!\\left(\\log(\\mathrm{PRR})-1.96\\,SE\\right), \\exp\\!\\left(\\log(\\mathrm{PRR})+1.96\\,SE\\right) \\right] \\]

IC and IC025

Let N=a+b+c+d. Smoothed IC approximation in the Atlas:

\\[ \\mathrm{IC}_{\\mathrm{smoothed}} = \\log_2\\!\\left( \\frac{(a+0.5)(N+1)} {(a+b+0.5)(a+c+0.5)} \\right) \\]

Approximate lower 95% bound displayed as IC025:

\\[ \\mathrm{IC}_{025}\\approx \\mathrm{IC}_{\\mathrm{smoothed}}-1.96\\cdot SE(\\mathrm{IC}) \\]

The implemented SE(IC) is derived on log scale and converted to base-2 scale.

Source-specific use in the Atlas

  • FAERS: displays source-level ROR, PRR, and smoothed IC/IC025 from server-side source totals.
  • DK: displays source-level ROR, PRR, and smoothed IC/IC025 from server-side source totals; these are also the DK source inputs used by SCI v6.
  • WHO: displays source-level ROR, PRR, and smoothed IC/IC025 from server-side source totals; WHO is not included in the numeric SCI score.

DK pooled yearly signal

Earlier Atlas methods evaluated a year-stratified Mantel-Haenszel DK signal. SCI v6 does not use this pooled yearly DK score. The current SCI DK contribution is the source-level PV-style ROR/PRR/IC score described above, calculated from canonical DK adverse-event counts.

Edge cases

For FAERS and WHO, metrics are suppressed when required cells make computations unstable. For DK source-level ROR/PRR/IC, the Atlas applies a continuity correction of 0.5 when any cell is zero. SCI v6 uses available source scores only; missing source scores reduce confidence through source coverage rather than being imputed as zero.

3.2 Clinical trials summary metrics

Top-5 card is sorted by percent_affected. Substance + AE risk card reports raw weighted incidence and supporting counts from aggregated trial table.

Study-level inputs for meta-analysis

Meta-analysis is run at trial level (one row per drug_name + adverse_event_term + nct_id) using:

  • a: affected in treatment arm
  • n_treat: at-risk in treatment arm
  • c: affected in control arm
  • n_control: at-risk in control arm

Per-study effects

Risk definitions:

\\[ p_{t,i}=\\frac{a_i}{n_{t,i}},\\quad p_{c,i}=\\frac{c_i}{n_{c,i}} \\]

Risk difference (RD):

\\[ RD_i=p_{t,i}-p_{c,i} \\]
\\[ \\operatorname{Var}(RD_i)= \\frac{p_{t,i}(1-p_{t,i})}{n_{t,i}}+ \\frac{p_{c,i}(1-p_{c,i})}{n_{c,i}} \\]

Risk ratio (RR) on log scale (with continuity correction when needed for zero-event cells):

\\[ y_i=\\log(RR_i)=\\log\\!\\left(\\frac{p_{t,i}}{p_{c,i}}\\right) \\]
\\[ v_i=\\operatorname{Var}(y_i)= \\frac{1}{a_i}-\\frac{1}{n_{t,i}}+\\frac{1}{c_i}-\\frac{1}{n_{c,i}} \\]

Zero-event continuity correction is applied to RR components when required to keep logarithms and variances computable.

DerSimonian-Laird random effects

Fixed-effect weights:

\\[ w_i^{FE}=\\frac{1}{v_i} \\]

Fixed-effect pooled estimate:

\\[ \\hat\\mu_{FE}=\\frac{\\sum_i w_i^{FE}y_i}{\\sum_i w_i^{FE}} \\]

Cochran's Q and DL between-study variance:

\\[ Q=\\sum_i w_i^{FE}(y_i-\\hat\\mu_{FE})^2 \\]
\\[ \\tau^2_{DL}=\\max\\!\\left(0,\\frac{Q-(k-1)}{\\sum_i w_i^{FE}-\\frac{\\sum_i (w_i^{FE})^2}{\\sum_i w_i^{FE}}}\\right) \\]

Random-effects weights and pooled estimate:

\\[ w_i^{RE}=\\frac{1}{v_i+\\tau^2_{DL}},\\quad \\hat\\mu_{RE}=\\frac{\\sum_i w_i^{RE}y_i}{\\sum_i w_i^{RE}} \\]
\\[ SE(\\hat\\mu_{RE})=\\sqrt{\\frac{1}{\\sum_i w_i^{RE}}} \\]
\\[ 95\\%\\,CI=\\hat\\mu_{RE}\\pm1.96\\cdot SE(\\hat\\mu_{RE}) \\]

For RR display:

\\[ RR_{pooled}=\\exp(\\hat\\mu_{RE}) \\]

For RD display, the same DL framework is applied directly to RD_i and \\operatorname{Var}(RD_i).

The DerSimonian-Laird estimator assumes approximately normally distributed study effects and may underestimate uncertainty when the number of studies is small.

Heterogeneity

\\[ I^2=\\max\\!\\left(0,\\frac{Q-(k-1)}{Q}\\right)\\times100\\% \\]

Substantial heterogeneity may indicate differences in study populations, design, or reporting practices rather than true variation in drug effects.

The card reports:

  • Meta RR (DL) with 95% CI
  • Meta RD (DL) with 95% CI
  • I^2 and \\tau^2
  • Model label: DerSimonian-Laird random effects

3.3 PubMed summary metrics

  • publication_count: unique PMID count per substance + AE
  • Recent studies: top 3 unique PMIDs by pub_year DESC

3.4 Signal consensus index

The Signal Consensus Index (SCI) is a cross-source summary score for one substance + adverse event pair. It combines source-level evidence from DK, UK, FAERS, and clinical trials into a 0-100 score, then adds a separate confidence score that reflects source coverage across the available contributors.

Sources included

The SCI uses four primary sources:

  • DK: canonicalized PV-style disproportionality score using lower confidence bounds from ROR and PRR plus IC025.
  • UK: canonicalized PV-style disproportionality score using lower confidence bounds from ROR and PRR plus IC025.
  • FAERS: canonicalized practical-raw FAERS score using lower confidence bounds from ROR and PRR plus IC025; combination-product drug strings are split to ingredient-level rows before canonical mapping and case-level de-duplication.
  • Clinical trials: lower 95% CI bound of the pooled fixed-effect, continuity-corrected risk ratio, scaled directly without additional heterogeneity or study-count attenuation.

WHO is not included in the SCI numeric average. It is used only as a concordance badge.

Scaling functions

Several source metrics are first converted to unit-scale quantities in the interval [0,1].

\\[ \\operatorname{clamp}_{[0,1]}(x)=\\min(1,\\max(0,x)) \\]
\\[ f_{ratio}(x)= \\begin{cases} 0, & x \\le 1 \\\\ \\operatorname{clamp}_{[0,1]}\\!\\left(\\dfrac{\\ln(x)}{\\ln(3)}\\right), & x > 1 \\end{cases} \\]
\\[ f_{IC}(x)= \\begin{cases} 0, & x \\le 0 \\\\ \\operatorname{clamp}_{[0,1]}\\!\\left(\\dfrac{x}{2}\\right), & x > 0 \\end{cases} \\]

f_ratio is used for lower confidence bounds of odds ratios, proportional reporting ratios, and trial risk ratios. f_IC is used for IC025. In SCI v6, DK, UK, and FAERS use these PV components without a case-count attenuation factor.

FAERS source score

Let ROR_{LCL} be the lower 95% confidence bound for ROR, PRR_{LCL} the lower bound for PRR, and IC_{025} the lower bound for IC. The FAERS source score is:

\\[ S_{FAERS}=100\\cdot\\left(0.40\,f_{ratio}(ROR_{LCL})+0.35\,f_{ratio}(PRR_{LCL})+0.25\,f_{IC}(IC_{025})\\right) \\]

FAERS is counted as directionally positive when:

\\[ ROR_{LCL}>1,\\quad PRR_{LCL}>1,\\quad IC_{025}>0 \\]

UK source score

The UK source score uses the same no-case-factor disproportionality structure as FAERS:

\\[ S_{UK}=100\\cdot\\left(0.40\,f_{ratio}(ROR_{LCL})+0.35\,f_{ratio}(PRR_{LCL})+0.25\,f_{IC}(IC_{025})\\right) \\]

UK is counted as directionally positive when:

\\[ ROR_{LCL}>1,\\quad PRR_{LCL}>1,\\quad IC_{025}>0 \\]

Clinical trials source score

Let RR_{LCL} be the lower 95% confidence bound for the pooled fixed-effect, continuity-corrected risk ratio. The clinical-trials source score is:

\\[ S_{Trials}=100\\cdot f_{ratio}(RR_{LCL}) \\]

Clinical trials are counted as directionally positive when RR_{LCL} > 1.

DK source score

DK uses the same no-case-factor PV-style source score as FAERS and UK:

\\[ S_{DK}=100\\cdot\\left(0.40\,f_{ratio}(ROR_{LCL})+0.35\,f_{ratio}(PRR_{LCL})+0.25\,f_{IC}(IC_{025})\\right) \\]

DK is counted as directionally positive when ROR_{LCL} > 1, PRR_{LCL} > 1, and IC_{025} > 0. Mantel-Haenszel DK output is not used in SCI v6.

Weighted SCI aggregation

Let the fixed source weights be:

\\[ w_{DK}=0.25,\\quad w_{UK}=0.25,\\quad w_{FAERS}=0.25,\\quad w_{Trials}=0.25 \\]

If some sources are unavailable for a given substance + AE pair, the Atlas renormalizes over the available sources only. If A is the set of available sources, then:

\\[ W_{used}=\\sum_{j \\in A} w_j \\]
\\[ SCI=\\sum_{j \\in A}\\left(\\frac{w_j}{W_{used}}\\right)S_j \\]

If no source score is available, SCI is not displayed.

Confidence score

The confidence score is a source-coverage measure only. If |A| is the number of available sources among DK, UK, FAERS, and clinical trials, then:

\\[ Confidence=100\\cdot\\frac{|A|}{4} \\]

Direction and WHO concordance

The consensus direction is derived from the agreement proportion:

\\[ Direction= \\begin{cases} \\text{positive}, & Agreement \\ge \\dfrac{2}{3} \\\\ \\text{negative}, & Agreement \\le \\dfrac{1}{3} \\\\ \\text{neutral}, & \\text{otherwise} \\end{cases} \\]

WHO is evaluated only as a concordance badge. If WHO has no direction, the badge is WHO: unavailable. Otherwise, the badge is WHO: concordant when WHO direction matches the SCI direction, or when either direction is neutral; it is WHO: discordant only when both are non-neutral and opposite.

Displayed interpretation bands

The UI classifies the final result as follows:

\\[ \\text{Strong} \\iff SCI \\ge 70 \\text{ and } Confidence \\ge 70 \\]
\\[ \\text{Moderate} \\iff SCI \\ge 50 \\text{ and } Confidence \\ge 50 \\text{ but not Strong} \\]
\\[ \\text{Weak} \\iff \\text{otherwise} \\]

SCI is an exploratory consensus metric and should not be interpreted as proof of causality.

3.5 FAERS drug-drug interaction signal layer

The DDI signal layer is an exploratory FAERS-only dataset for pair-level drug-drug interaction signal detection. It is designed to identify drug pairs and adverse event terms that are reported together more often than expected under a case-level independence model. The public DDI explorer uses the final display layer, which is intentionally stricter than the raw signal layer.

Scope

  • The unit of analysis is one canonical drug pair plus one adverse event term.
  • Results are based on spontaneous FAERS reports and should be interpreted as signal-detection findings, not as incidence estimates, clinical risk estimates, or proof of causality.
  • The DDI layer is separate from the Signal Consensus Index. It does not combine DK, UK, WHO, clinical trial, or PubMed evidence.

Drug name canonicalization

Drug names are normalized before pair construction. The pipeline resolves names in the following priority order:

  1. Brand-to-ingredient mapping
  2. Curated drug-name variant mapping
  3. RxNorm variant-to-ingredient mapping
  4. Fallback lower-case canonicalization

This step is intended to reduce false pair signals caused by brands, salt forms, spelling variants, and product-level names. Some residual unmapped product names can remain and are handled by later display gating when detected.

Pair construction

The pipeline builds unordered canonical drug pairs at the FAERS case level. Each pair is stored in a stable lexical order as drug_a and drug_b, so a pair is counted once regardless of which drug appears first in the source report.

  • Only canonicalized case-drug rows are used.
  • Pair totals count cases containing both drugs in the pair.
  • Observed counts count cases containing both drugs in the pair and the adverse event term.
  • Pairs that are the same or near-same drug after normalization are removed where the pipeline can identify them.
  • Pairs sharing the same ATC level 4 class are excluded from the DDI candidate layer to reduce same-class therapeutic duplication artifacts.

Fixed-combination and co-formulation filtering

The DDI pipeline uses the FDA NDC product file loaded into public.fda_ndc_product_raw to identify multi-ingredient products. Active ingredients listed within the same NDC product are converted into same-product ingredient pairs and removed from the DDI candidate layer.

This prevents fixed combinations such as co-formulated antivirals, opioid reversal products, or other single-product ingredient pairs from appearing as apparent drug-drug interactions. The filter is conservative but not complete: products absent from NDC, consumer product kits, cosmetic co-formulations, and poorly normalized brands may still require display-level gating.

Counting framework

For each canonical drug pair and adverse event term, the pipeline computes:

  • observed_count: number of FAERS cases containing both drugs and the adverse event.
  • pair_total: number of FAERS cases containing both drugs.
  • event_total: number of FAERS cases containing the adverse event.
  • expected_count: expected drug-pair/adverse-event co-occurrence under the case-level independence model.

The expected count is derived from the pair total, event total, and overall FAERS case denominator used by the materialized-view pipeline.

The expected-count model uses case-level event rates for drug A alone, drug B alone, and neither drug. Let A and B be the two drugs, and let E be the adverse event:

  • n111: cases with A, B, and E.
  • n11p: cases with A and B, regardless of event.
  • n101: cases with A and E, without B.
  • n011: cases with B and E, without A.
  • n001: cases with E, without A or B.
  • n10p, n01p, and n00p: corresponding denominators for A without B, B without A, and neither drug.

The background event rates are:

\\[ f_{10}=\\frac{n_{101}}{n_{10+}},\\quad f_{01}=\\frac{n_{011}}{n_{01+}},\\quad f_{00}=\\frac{n_{001}}{n_{00+}} \\]

The expected event probability among cases containing both drugs is:

\\[ g_{11}=1-\\frac{(1-f_{10})(1-f_{01})}{1-f_{00}} \\]

The expected count for the pair-event cell is then:

\\[ E_{111}=g_{11}\\cdot n_{11+} \\]

In the displayed table, expected_count is the rounded value of E111.

Omega-shrinkage disproportionality

The primary DDI signal metric is omega-shrinkage disproportionality. Omega compares observed co-reporting with expected co-reporting while shrinking unstable estimates toward the null, which reduces inflation from very small expected counts.

  • omega is the posterior/shrunken disproportionality estimate.
  • omega025 is the lower uncertainty bound used for conservative ranking.
  • signal_flag is true when the lower shrinkage bound is above the null after required computability and minimum-count criteria in the SQL pipeline.

The SQL implementation uses a 0.5 continuity/shrinkage term:

\\[ \\Omega=\\log_2\\!\\left(\\frac{n_{111}+0.5}{E_{111}+0.5}\\right) \\]

The lower uncertainty bound is approximated as:

\\[ \\Omega_{025}=\\Omega-\\frac{1.96}{\\ln(2)\\sqrt{n_{111}}} \\]

The raw canonical signal layer requires n111 ≥ 5. The public signal flag is positive when:

\\[ \\Omega_{025}>0 \\]

A higher omega025 means the pair-event combination remains disproportionately reported even after shrinkage and uncertainty adjustment. It does not mean the interaction is more clinically severe or more common.

Artifact filtering

Because spontaneous reports contain strong reporting artifacts, the pipeline builds additional adverse-event artifact profiles before publishing the display layer. These profiles measure how broadly and diffusely an adverse event appears across signal-positive drug pairs.

The main artifact-profile fields include:

  • ae_n_signal_pairs: number of signal-positive drug pairs for the adverse event.
  • ae_n_distinct_drugs: number of distinct drugs involved in signal-positive pairs for the adverse event.
  • ae_n_distinct_atc4_pair_classes: number of distinct ATC4 pair-class combinations represented.
  • ae_max_pair_share: fraction of all observed reports for the adverse event contributed by the single largest drug pair.
  • ae_top_10_pair_share: fraction contributed by the ten largest drug pairs.

Cluster filtering uses three ideas together: breadth, heterogeneity, and diffuseness. A term is more likely to be treated as an artifact when it appears across many drug pairs, spans many pharmacologically heterogeneous ATC4 pair classes, and is not dominated by one concentrated drug pair. The concentration checks help preserve pair-specific signals that would otherwise be hidden inside broadly reported adverse event terms.

Final display layer

The public DDI explorer searches the final display view. This layer applies additional user-facing gates to remove common non-DDI patterns, including:

  • administrative, product-use, device-use, dosing, and scheduling adverse event terms;
  • fixed-combination and same-product ingredient pairs;
  • same active-substance, synonym, and salt-form pairs where identified;
  • consumer product, cosmetic co-formulation, and non-normalized product-name artifacts;
  • highly repetitive reporting clusters that remain after general artifact profiling.

The display layer is therefore optimized for interpretable browsing on AEAtlas rather than exhaustive retention of every statistically positive FAERS row. Raw and intermediate materialized views remain more inclusive for pipeline review and debugging.

DDI explorer result subtabs

The DDI explorer provides two result subtabs that use the same search fields but different backend layers:

  • Curated signals: the default public-facing tab. It uses the most restrictive display layer, including stability gates, final artifact exclusions, same-drug/product exclusions, and the omega025 ≥ 1 final gate. This tab is intended for normal AEAtlas browsing.
  • Research signals: a less-filtered exploratory tab. It uses an earlier canonical signal layer that keeps signal-positive rows after broad reporting-cluster removal but before the final display gates. This tab is intended for deeper investigation and hypothesis generation.

Research signals can contain more artifacts than curated signals, including co-prescribing patterns, indication effects, duplicate reports, product-name leakage, residual same-drug variants, and non-causal reporting associations. For that reason, a finding visible only in the research tab should be treated as a candidate signal requiring additional review rather than as a presentation-ready result.

Search and ranking

The DDI explorer supports searches by one drug, two drugs, adverse event term, or combined filters. Results are paginated and ranked by the display score used by the final view. The display score is a presentation ranking and should not be interpreted as clinical importance.

The intermediate display layer keeps rows meeting the following stability gates:

\\[ n_{111}\\ge20,\\quad n_{11+}\\ge100,\quad E_{111}\\ge0.1 \\]

The final AEAtlas-facing view also requires:

\\[ \\Omega_{025}\\ge1 \\]

The displayed ranking score is calculated as:

\\[ \\text{display\\_score} =\\Omega_{025} +\\log_{10}(n_{111}) +\\log_{10}(n_{11+}) +\\log_{10}(E_{111}+1) \\]

This score intentionally combines conservative disproportionality strength with support from observed count, pair prevalence, and non-negligible expected count. It is useful for sorting, but it is not a validated clinical severity score.

Interpretation

DDI results are signal-detection findings from spontaneous reports. They do not prove causality, incidence, severity, clinical risk, or clinical interaction. Signals can reflect co-prescribing, disease severity, indication bias, duplicate reports, bulk submissions, product artifacts, or reporting practices.

4) Application Logic and Display Assumptions

4.1 Search behavior

  • Substance list from dedicated source table
  • AE suggestions merged from FAERS, clinical trials, PubMed
  • Mix of eq and ilike behavior across endpoints

4.2 Pagination and caching

  • Configured page-size settings drive payload and table pagination
  • FAERS signal uses cached server-side totals to reduce repeated requests
  • PubMed and trial modals use local response caching

4.3 Charts

  • FAERS charts read pre-aggregated by-year/sex/age structures
  • Trials sex chart uses treatment-arm participants across included rows, using unknown sex where treatment sex counts are incomplete
  • Trials age chart uses treatment-arm n_treat with mean+SD normal approximation and tracks unknown age separately

Important interpretation note: Clinical trials sex and age charts represent demographics of the included trial cohorts selected by the current substance + AE query context. They are not AE-specific participant distributions (that is, not restricted to only participants who experienced the selected adverse event).

4.4 SCI Explorer behavior

  • The explorer loads SCI rows from the precomputed SCI v6 dataset (mv_sci_consensus_prod_nosoftpenalty_nocasefactor_v6) with server-side pagination and filter composition.
  • Filter controls include substance, adverse event, SCI level, and SCI/confidence ranges.
  • Summary counters are computed for the full filtered result set, independent of current page rows.
  • Row click expands per-pair details (source scores, source usage, and interpretation note).
  • Download CSV exports the full filtered result set in chunks, not only the visible page.

5) Data refresh & reproducibility

5.1 Pipeline overview

  • FAERS ETL: ingest, dedup/versioning, aggregate outputs with date-stamped artifacts
  • Trials ETL: extraction, arm mapping logic, effect fields and demographics
  • PubMed ETL: query and extraction logic, year parsing, output artifacts
  • Supabase load: copy commands, NA/null handling, downstream refresh steps
  • Recommended build stamp in UI footer/wiki home for traceability

5.2 Known failure modes

  • Name normalization gaps: brand names, salt forms, local product names, or consumer product names can survive canonicalization and appear as separate substances.
  • Combination-product artifacts: fixed combinations and co-formulations can look like drug-drug interactions unless they are captured by RxNorm, NDC, or final display gating.
  • MedDRA term ambiguity: broad or administrative adverse event terms can dominate rankings despite not representing a specific clinical outcome.
  • Reporting clusters: duplicate reports, bulk submissions, and cohort-level reporting practices can create many similar pair-event signals with near-identical counts.
  • Source refresh mismatch: FAERS, DK, UK, WHO, PubMed, and clinical trial datasets may be refreshed on different schedules, so cross-source comparisons can reflect data-window differences.
  • Schema drift: upstream file-format changes, renamed columns, or altered coding conventions can break imports or silently change downstream counts.
  • Sparse-count instability: very small expected counts can produce large disproportionality values, even when shrinkage and lower-bound ranking are used.
  • Residual confounding: disease severity, indication, co-prescribing patterns, and clinical monitoring can produce associations that are not causal drug effects.

6) Limitations, bias, and appropriate use

  • Reporting bias and underreporting in spontaneous-reporting sources (DK, UK, FAERS, WHO)
  • PubMed publication bias
  • Clinical trial selective reporting
  • Confounding by indication/channeling
  • Duplicate counting pitfalls across sources
  • WHO year/sex/age summaries are currently substance-level and not AE-specific in AE mode
  • Source windows differ (for example DK/UK AE-mode year constraints), which can affect cross-source comparisons
  • Counting units differ across sources (cases, aggregated counts, trial summaries, publications)
  • No time-to-event modeling in current metrics
  • No dose-response modeling in current metrics
  • No unified causal inference framework across sources
  • No patient-level covariate adjustment in displayed summaries
  • Metrics across DK, UK, FAERS, WHO, clinical trials, and literature are not directly comparable due to differences in data generation processes

Atlas metrics are for signal detection and prioritization, not standalone causal inference.

7) FAQ

Why does FAERS show more events than trials?

Different source design and capture behavior: spontaneous reporting vs structured study outputs.

Why do some terms have multiple organ systems?

A single PT can map to multiple SOCs; Atlas preserves that mapping.

Why is my AE missing from PubMed/trials?

Term mismatch, coverage limitations, or filter behavior can exclude specific terms.

Why do sex/age charts show unknowns?

Unknown appears when denominators exist but demographic fields are absent or non-standard.

Why can WHO signal cases differ from WHO year/sex/age cards?

WHO signal is AE-specific, while WHO year/sex/age cards are currently substance-level summaries in the current data model.

Why can DK or UK totals differ between cards?

Cards may use different aggregations (for example signal 2x2 totals versus chart-specific grouped summaries) and can be constrained by specific year windows.

Why are ROR/PRR/IC sometimes blank?

Metrics are suppressed when counts do not support stable computation.