Statistical Trending for Medical Devices Surveillance

A collection of common statistical algorithms used in active surveillance of medical device events. Context includes post-market surveillance, pharmacovigilance, signal detection and trending, and regulatory reporting. Primary inputs are device-event time series. Outputs include trending results with the ability to run multiple algorithms at once. This package works well with the 'mds' package, but does not require it.

What does mdsstat do?

The mdsstat package:

  • Standardizes the output of various statistical trending algorithms
  • Allows running of multiple algorithms on the same data
  • Allows running of both disproportionality and quality control algorithms
  • Creates lightweight analysis definitions and output files for auditability, documentation, and reproducibility


There are many ways to trend medical device event data. Some are drawn from the quality control discipline, others from disproportionality analysis used in pharmacoepidemiology, and yet others from the general field of statistics.

There is a need to rigorously compare and contrast these various methods to more fully understand their respective performance and applicability in surveillance of medical devices.


The mdsstat package aims to provide a collection of statistical trending algorithms used in medical device surveillance. Furthermore, each algorithm is written with a standardized, reusable framework philosophy. The same input data can be fed through multiple algorithms. All algorithms return results that can be sorted, stacked, and compared.

This package is written in tandem with the mds package. These are complementary in the sense that:

  • mds standardizes medical device event data.
  • mdsstat standardizes the statistical trending of medical device event data.

While mdsstat algorithms can run on generic R data frames, additional efficiency and traceability benefits are derived by running on data frames generated by mds::time_series() from the mds package.

Refer to the package vignette for available algorithms and guided examples.


mdsstat 0.3.0


Potential Updates

  • Add Poisson MaxSPRT algorithm

mdsstat 0.2.2

Implemented Updates

  • Added SPRT algorithm
  • Added GPS algorithm
  • Added BCPNN algorithm


  • Fixed analysis_of attribute for all algorithms

mdsstat 0.2.1

Implemented Updates

  • Added continuity adjustment option to DPA algorithms prr() and ror()
  • Added CUSUM algorithm
  • Added ROR algorithm
  • Added support for more complete hierarchical descriptions (see mds package)
  • Reorganized R scripts for easier navigation


  • shewhart() mu and sigma no longer calculated using the current index month

mdsstat 0.2.0

Implemented Updates

  • run_algos(): add parameter to skip/warn/stop when trying to run DPA on non-DPA time series
  • Allow run_algos() to run on a list of mds_ts or other properly formatted objects


  • shewhart() now outputs the correct signal logic
  • prr() now outputs the correct signal logic and p-value

mdsstat 0.1.0

  • Initial Release. Yay!

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.3.1 by Gary Chung, 5 months ago

Browse source code at

Authors: Gary Chung [aut, cre] , Zhiheng Xu [ctb] (derived code for `cp_mean()`) , Stephane Bottine [ctb] (derived code from 'SPRT' package) , Ismaïl Ahmed [ctb] (derived code from 'PhViD' package) , John Ihrie [ctb] (derived code from 'openEBGM' package)

Documentation:   PDF Manual  

GPL-3 license

Imports utils, stats, lubridate, Sequential, mds

Suggests testthat, knitr

See at CRAN