Analyze FDA FAERS adverse event data for drug safety signal detection. Use when investigating adverse drug reactions, detecting safety signals, analyzing drug-event associations, or building pharmacovigilance dashboards. Triggers include FAERS, adverse events, drug safety, pharmacovigilance, ADR, signal detection, MedDRA, drug reactions, safety surveillance.
sfc-gh-rraman0 estrellas25 mar 2026
Ocupación
Categorías
Química Computacional
Contenido de la habilidad
Analyze FDA Adverse Event Reporting System (FAERS) data for drug safety surveillance and signal detection.
When to Use This Skill
Analyzing FDA FAERS quarterly data files
Detecting drug safety signals
Investigating specific drug-adverse event associations
-- Calculate PRR for a drug-event combination
WITH drug_event_counts AS (
SELECT
d.drugname,
r.pt AS reaction,
COUNT(DISTINCT d.primaryid) AS de_count
FROM FAERS.DRUG d
JOIN FAERS.REAC r ON d.primaryid = r.primaryid
WHERE d.role_cod = 'PS'
GROUP BY d.drugname, r.pt
),
drug_totals AS (
SELECT drugname, COUNT(DISTINCT primaryid) AS drug_total
FROM FAERS.DRUG WHERE role_cod = 'PS'
GROUP BY drugname
),
event_totals AS (
SELECT pt AS reaction, COUNT(DISTINCT primaryid) AS event_total
FROM FAERS.REAC
GROUP BY pt
),
total_reports AS (
SELECT COUNT(DISTINCT primaryid) AS total FROM FAERS.DRUG WHERE role_cod = 'PS'
)
SELECT
dec.drugname,
dec.reaction,
dec.de_count,
dt.drug_total,
et.event_total,
tr.total,
-- PRR = (a/b) / (c/d)
-- a = reports with drug AND event
-- b = reports with drug
-- c = reports with event (without drug)
-- d = total reports (without drug)
(dec.de_count::FLOAT / dt.drug_total) /
((et.event_total - dec.de_count)::FLOAT / (tr.total - dt.drug_total)) AS prr,
-- Chi-square for significance
POWER(dec.de_count - (dt.drug_total * et.event_total / tr.total), 2) /
(dt.drug_total * et.event_total / tr.total) AS chi_square
FROM drug_event_counts dec
JOIN drug_totals dt ON dec.drugname = dt.drugname
JOIN event_totals et ON dec.reaction = et.reaction
CROSS JOIN total_reports tr
WHERE dec.de_count >= 3 -- Minimum case threshold
ORDER BY prr DESC;
SELECT
r.pt AS adverse_event,
COUNT(DISTINCT d.primaryid) AS report_count,
COUNT(DISTINCT CASE WHEN o.outc_cod = 'DE' THEN d.primaryid END) AS death_count,
COUNT(DISTINCT CASE WHEN o.outc_cod IN ('DE', 'LT', 'HO') THEN d.primaryid END) AS serious_count
FROM FAERS.DRUG d
JOIN FAERS.REAC r ON d.primaryid = r.primaryid
LEFT JOIN FAERS.OUTC o ON d.primaryid = o.primaryid
WHERE UPPER(d.drugname) LIKE '%METFORMIN%'
AND d.role_cod = 'PS'
GROUP BY r.pt
ORDER BY report_count DESC
LIMIT 20;
Drugs Associated with Specific Event
SELECT
d.drugname,
COUNT(DISTINCT d.primaryid) AS report_count
FROM FAERS.DRUG d
JOIN FAERS.REAC r ON d.primaryid = r.primaryid
WHERE r.pt = 'Rhabdomyolysis'
AND d.role_cod = 'PS'
GROUP BY d.drugname
ORDER BY report_count DESC
LIMIT 20;
Time Trend Analysis
SELECT
SUBSTRING(demo.fda_dt, 1, 4) AS year,
COUNT(DISTINCT d.primaryid) AS report_count
FROM FAERS.DRUG d
JOIN FAERS.DEMO demo ON d.primaryid = demo.primaryid
WHERE UPPER(d.drugname) LIKE '%OZEMPIC%'
AND d.role_cod = 'PS'
AND demo.fda_dt IS NOT NULL
GROUP BY SUBSTRING(demo.fda_dt, 1, 4)
ORDER BY year;
MedDRA Hierarchy
FAERS uses MedDRA (Medical Dictionary for Regulatory Activities) for coding adverse events:
System Organ Class (SOC)
└── High Level Group Term (HLGT)
└── High Level Term (HLT)
└── Preferred Term (PT) ← FAERS REAC.pt
└── Lowest Level Term (LLT)
To aggregate by SOC, you need the MedDRA hierarchy file (licensed separately).
Best Practices
Deduplicate cases: Use most recent caseversion per caseid
Focus on primary suspect: Filter role_cod = 'PS' for signal detection
Normalize drug names: Use prod_ai (active ingredient) when possible
Consider reporting bias: Newer drugs have more reports (Weber effect)
Validate signals: Signals require clinical validation before action