Methods & Statistics
Everything MaudeDash does to the data, and every test it runs, with references.
Building the corpus
The FDA distributes MAUDE as pipe-delimited text files, one set per data domain, split by year. MaudeDash ingests the MDR master file, the device file, the patient file, the narrative text file, and the device- and patient-problem code files, together roughly 40 GB.
- Narrative reassembly. Narrative records frequently span multiple physical lines with embedded delimiters. A state-machine parser reassembles them, rather than the naive line-per-record read that silently truncates long descriptions.
- Denormalisation. The tables are joined into one row per
medical device report, keyed on
MDR_REPORT_KEY. Patient-level fields are aggregated to report level. Device fields are attached from the first device record per report, ordered byDEVICE_EVENT_KEY. - Typed dates. A preferred report date is derived from
DATE_RECEIVED, falling back toREPORT_DATE, and used for all year-based grouping. - Derived fields. Device age is parsed from free-text
DEVICE_AGE_TEXTacross hour, day, week, month and year units; patient age is normalised similarly; supplement submissions are identified fromSUPPLEMENT_NUMBER.
The published build pipeline reproduces this from the FDA's own files, and the test suite exercises each parsing path against synthetic records with deliberate edge cases.
Outcome classification
Most MAUDE analyses stop at EVENT_TYPE, a three-way
death/injury/malfunction flag chosen by the submitter. MaudeDash instead
decodes SEQUENCE_NUMBER_OUTCOME, the FDA's structured patient
outcome field, into the seven categories defined at
21 CFR § 803.3:
- D — death
- L — life-threatening
- H — hospitalization, initial or prolonged
- S — disability or permanent damage
- C — congenital anomaly or birth defect
- R — required intervention to prevent permanent impairment
- O — other
A composite “any serious outcome” is defined as any of D, L, H, S, C or R, matching the statutory definition of a serious injury. A single report may carry several outcomes, so these categories are not mutually exclusive and do not sum to 100%.
Outcome coding is voluntary and incomplete. A report with no outcome code is not necessarily benign; check the Data quality panel for coverage in your cohort before quoting any outcome rate.
Cohort definition
A cohort is the set of reports matching the sidebar filters: FDA product code, manufacturer substring, brand/generic/model substring, narrative text, report-year range, event types, and optional exclusions. Every analysis recomputes against that definition, and the exact filter — with bound parameter values inlined so it runs as written — is available in the Methods panel of the tool alongside a generated STROBE-style paragraph.
Three exclusions implement standard MAUDE study protocol choices:
- Forwarded reports submitted under 21 CFR 803.22(b)(2) by a manufacturer or importer about a device not of their own manufacture.
- Real-world-data-sourced reports under the 21 CFR 803.19 exemption, which are structured differently from form-based submissions.
- Supplements, leaving initial reports only. Recommended for population estimates, since a supplement extends an existing report and would otherwise double-count the event.
Proportions and intervals
All proportions are reported with Wilson score 95% confidence intervals rather than the textbook normal approximation, which behaves badly for small samples and for proportions near 0 or 1 — exactly the regime most harm rates occupy. Edge cases are handled explicitly: zero successes yields a lower bound of exactly 0, and all successes an upper bound of exactly 1.
Differences between two independent proportions use Newcombe's hybrid-score interval (method 10), which combines the two Wilson intervals in quadrature. Subtracting Wilson bounds directly over-covers and can produce intervals extending beyond the possible range.
Group comparisons
Comparisons across strata use Pearson's chi-square test of independence. The minimum expected cell count is computed and displayed; where it falls below 5, Cochran's rule is violated, the asymptotic p-value is unreliable, and the tool says so explicitly rather than printing a number that looks authoritative. For 2×2 tables, a Yates continuity correction is applied to observed counts with the correction clamped at zero, and Fisher's exact test is computed where any cell contains fewer than 10 observations.
Subgroup analyses display the largest strata, capped for legibility. When the cap binds, the tool states how many strata exist and that the chi-square is computed on the displayed subset only — it is not a test across all strata.
Trend tests
Two complementary tests are reported on annual series:
- Cochran-Armitage test for trend in proportions, using the report year as the ordered group score. Appropriate when asking whether a rate is moving.
- Mann-Kendall non-parametric monotonic trend test on annual counts, with the standard tie correction to the variance. Appropriate when asking whether volume is moving, without assuming normality.
Both describe the reporting series, not device risk. Regulatory changes, recalls and publicity move these curves independently of any change in real-world device behaviour, and the most recent year is usually partial.
Signal detection
Disproportionality asks whether a problem code appears more often in your cohort than in the rest of the database. MaudeDash reports four measures and two independent signal criteria, because the frequentist and Bayesian approaches fail in different places.
For each problem code, a 2×2 table is formed:
| Has code | Lacks code | |
|---|---|---|
| In cohort | a | b |
| Comparator | c | d |
- PRR = (a/(a+b)) / (c/(c+d)), with a log-normal 95% interval using the Sahai-Khurshid standard error and a 0.5 continuity correction.
- ROR = ad/bc, with a log-normal 95% interval using the Wald standard error.
- Information Component (IC), the Bayesian measure used by the WHO Uppsala Monitoring Centre, computed in the shrinkage form IC = log₂((O + ½)/(E + ½)) with the closed-form credibility bounds of Norén et al. E is the count expected under independence.
- Yates-corrected chi-square and, for sparse tables, Fisher's exact test.
The two criteria:
- EMA-2008: PRR ≥ 2, χ² ≥ 4, and at least 3 reports.
- WHO-UMC: IC₀₂₅ > 0, the lower bound of the 95% credibility interval above zero.
The comparator matters. It is the set of reports eligible to carry a problem code — those from 2015 onward — not the whole corpus. The FDA problem-code files begin in 2015, so roughly 20% of all reports structurally cannot carry a code; including them in the denominator inflates every PRR by about 25% and manufactures signals at the PRR ≥ 2 threshold. The comparator size is displayed with the results.
Multiplicity
A disproportionality screen tests hundreds of problem codes simultaneously. At α = 0.05 across 700 codes, roughly 35 will appear “significant” by chance alone. MaudeDash therefore reports Benjamini-Hochberg false discovery rate q-values alongside raw p-values. An unadjusted p of 0.04 among several hundred tests is not evidence of anything.
No correction addresses the deeper limitation: MAUDE has no exposure denominator, so a disproportionality measure cannot be converted into a risk.
Validation
The statistical engine exists twice — in Python for the downloadable Research Edition and in JavaScript for the browser tool — and the two are validated against each other and against reference implementations on every function.
- Wilson intervals, Cochran-Armitage, Mann-Kendall, chi-square, Fisher's
exact and the Yates correction are checked against SciPy;
agreement is to 1e-9 or better, and the Yates implementation matches
scipy.stats.chi2_contingency(correction=True)exactly. - Benjamini-Hochberg is checked against
statsmodels
multipletests(method='fdr_bh'); agreement to 3e-17. - Chi-square and normal tail probabilities are computed with regularised
incomplete gamma and erfc rather than
1 − cdf, which underflows to exactly zero in the tails where signal detection operates. - The build pipeline has a 25-test suite covering ingestion, narrative reassembly, outcome decoding, age parsing, supplement detection and every query path.
Coverage & caveats
The corpus spans 1991–2024, but the FDA device, narrative and problem-code files in this build begin in 2015. Reports before then exist in the MDR master and carry valid event types and outcome codes, but no product code, manufacturer, brand name, narrative or problem code. Any cohort defined by those fields therefore contains no pre-2015 reports regardless of the year slider, and the tool defaults to 2015 onward and warns when the range is widened.
The standing caveats, restated:
- MAUDE is passive surveillance with no denominator of exposed devices. Every percentage is a share of reports, not of patients or devices.
- Reporting is incomplete, uneven between sources, and responsive to publicity.
- Reports are unverified and may be duplicated, amended or withdrawn; the FDA revises the database retroactively, so record the data vintage.
- Manufacturer names are free text and are not normalised, so concentration measures understate reality.
- Narratives in the browser tool are capped at 4,000 characters per report; the complete multi-part text is available in the Research Edition.
Corrections history
The current version corrects several defects present in the code used for the original publication. These change numbers, and are recorded here because a tool that silently changes its answers is not reproducible.
- Disproportionality comparator now excludes reports that cannot carry a problem code. Previously every PRR was inflated by ~25%.
- Yates chi-square is computed on observed counts with the correction clamped at zero. Previously the continuity-corrected cells were fed in and the correction was unclamped, overstating χ² by 39–49% on sparse tables and scoring perfectly null tables above zero.
- Mann-Kendall applies the tie correction that earlier documentation claimed but the code omitted.
- PRR/ROR intervals use the exact 95% z rather than a rounded 1.96.
- Information Component and FDR q-values were added; signal detection previously rested on the EMA rule alone with no multiplicity control.
References
- U.S. FDA. Manufacturer and User Facility Device Experience (MAUDE) Database.
- 21 CFR § 803.3 — Definitions (death, serious injury, malfunction).
- Wilson EB. Probable inference, the law of succession, and statistical inference. J Am Stat Assoc 1927;22:209–12.
- Agresti A, Coull BA. Approximate is better than “exact” for interval estimation of binomial proportions. Am Stat 1998;52:119–26.
- Newcombe RG. Interval estimation for the difference between independent proportions. Stat Med 1998;17:873–90.
- Evans SJ, Waller PC, Davis S. Use of proportional reporting ratios (PRRs) for signal generation. Pharmacoepidemiol Drug Saf 2001;10:483–6.
- Rothman KJ, Lanes S, Sacks ST. The reporting odds ratio and its advantages. Pharmacoepidemiol Drug Saf 2004;13:519–23.
- Bate A, Lindquist M, Edwards IR, et al. A Bayesian neural network method for adverse drug reaction signal generation. Eur J Clin Pharmacol 1998;54:315–21.
- Norén GN, Bate A, Orre R, Edwards IR. Extending the methods used to screen the WHO drug safety database. Stat Med 2006;25:3740–57.
- Benjamini Y, Hochberg Y. Controlling the false discovery rate. J R Stat Soc B 1995;57:289–300.
- Mann HB. Nonparametric tests against trend. Econometrica 1945;13:245–59.
- Ensign LG, Cohen KB. A primer to the structure, content and linkage rules of the MAUDE database. eGEMs 2017;5(1):12.
- Porwal M. MaudeDash: an open analytic platform for the FDA MAUDE medical device adverse event database. Surg Neurol Int 2026. doi:10.25259/SNI_201_2026.