Base Ranker: Proportional Reporting Ratio (PRR)

Nan Xiao https://nanx.me/ (Seven Bridges)https://www.sevenbridges.com/ , Soner Koc https://github.com/skoc (Seven Bridges)https://www.sevenbridges.com/ , Kaushik Ghose https://kaushikghose.wordpress.com/ (Seven Bridges)https://www.sevenbridges.com/
2020-05-17

PRR is a commonly used metric for safety signal detection. We can denote the vaccine-symptom pairs from the VAERS database as many \(2 \times 2\) contingency tables:

Target vaccine Target symptom All other symptoms Total
Yes \(n_{ij}\) \(n_i - n_{ij}\) \(n_i\)
No \(n_j - n_{ij}\) \(n - n_i - n_j + n_{ij}\) \(n - n_i\)
Total \(n_j\) \(n - n_j\) \(n\)

In the table, \(n_i = \sum_j n_{ij}\), \(n_j = \sum_i n_{ij}\). They are the marginal sums over all other symptoms or vaccines for each unique vaccine \(i\) and symptom \(j\). The proportional reporting ratio (PRR) (Evans, Waller, and Davis 2001) for each vaccine-symptom pair is defined as

\[ PRR_{ij} = \frac{n_{ij}}{E_{ij}} \]

where

\[ E_{ij} = \frac{n_j (n_i - n_{ij})}{n - n_{ij}}. \]

\(PRR_{ij}\) measures the disproportionality in rates of the target symptom \(j\) to all other symptoms for exposure to vaccine \(i\) in the contingency table. It assumes that the reports of symptom \(j\) are independent to all other symptoms on vaccine \(i\), while this can turned out to be a quite strong assumption in reality. A relatively higher value of PRR indicates stronger association between the vaccine and the symptom.

Load the packages for PRR-based singal detection and ranking:


suppressMessages(library("PhViD"))
library("kableExtra")

Load the preprocessed VAERS data and transform it into the analyzable format:


df_p <- readRDS("data-processed/df_p.rds")
df_p <- df_p[, 1:3]
df_v <- as.PhViD(df_p, MARGIN.THRES = 10)

We calculate the Proportional Reporting Ratio (PRR) (Evans, Waller, and Davis 2001) and the ranking statistic — lower bound of the 95% two-sided confidence interval of log(PRR):


lst_prr <- PRR(df_v, MIN.n11 = 10, DECISION = 3, RANKSTAT = 2)
df_prr <- lst_prr$SIGNALS[order(lst_prr$SIGNALS$"LB95(log(PRR))", decreasing = TRUE), 1:8]
row.names(df_prr) <- NULL

View the top ranked vaccine-adverse event pairs:


head(df_prr) %>% kable() %>% kable_styling()
drug code event effect count expected count LB95(log(PRR)) PRR drug margin event margin
INFLUENZA (SEASONAL) (FLUCELVAX) Product use issue 57 0.0863973 6.873915 1410.7090 2765 107
INFLUENZA (SEASONAL) (AFLURIA) Multiple use of single-use product 49 0.3842040 6.772886 6327.8212 26313 50
HPV (CERVARIX) Product use issue 22 0.0236538 6.601841 1170.5511 757 107
SMALLPOX (DRYVAX) Cow pox 125 0.6461921 6.443733 922.3838 14005 158
INFLUENZA (SEASONAL) (AFLURIA) HIV antigen negative 48 0.4149403 6.091730 1033.1137 26313 54
SMALLPOX (ACAM2000) Pericardial disease 64 0.2820515 5.936602 555.5036 8943 108

Evans, Stephen JW, Patrick C Waller, and S Davis. 2001. “Use of Proportional Reporting Ratios (Prrs) for Signal Generation from Spontaneous Adverse Drug Reaction Reports.” Pharmacoepidemiology and Drug Safety 10 (6): 483–86.

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.