Work FAERS Signal Detection
How do you tell a real drug safety signal from a coincidence, in a database of twenty million reports?
Python · pandas · openFDA API
The finding
Tested against warfarin and bleeding — a link established for decades — the detector returned the expected strength. Run against pairs with no known link, it stayed quiet.
Method
Proportional reporting ratio, reporting odds ratio, chi-squared and Evans criteria across the full FAERS database (warfarin–haemorrhage PRR ≈ 5), stress-tested across seriousness filters and years, with negative controls.
So what
A detector nobody has tried to break is not evidence. Ask any screening method what it does on a case where the answer is already known — and on one where the answer should be nothing at all.
Interactive
FAERS · DISPROPORTIONALITY
Where's the line between signal and noise?
Each bar is a drug–reaction pair's PRR — how much more often that reaction is reported with the drug than with everything else. Drag the threshold; watch which pairs stay signals.
Full write-up
What it does
Takes a drug–event pair, queries the openFDA API across the full FAERS database, and computes:
- Proportional Reporting Ratio (PRR)
- Reporting Odds Ratio (ROR)
- Chi-squared statistic
- Evans criteria (the standard threshold combination: PRR ≥ 2, n ≥ 3, chi-squared ≥ 4)
Validation
I validated the method on warfarin and haemorrhage — a well-established signal in the pharmacovigilance literature. The analysis returned a PRR of approximately 5, consistent with published estimates.
From there I stress-tested it: running the same signal across different seriousness filters (all reports, hospitalisation only, death only) and across multiple years, to see how the estimate moved. I also ran it against negative controls — drug–event pairs with no known association — to check the false-positive rate.
Stack
Python · pandas · openFDA API