Pharmacovigilance Analysis using FAERS

The FDA Adverse Event Reporting System (FAERS) is a cornerstone of post-market safety surveillance. However, its complex relational structure, data duplicates, and unstandardized terminology often hinder reproducible research.

The faers package provides a modern, end-to-end framework designed to bridge the gap between raw spontaneous reporting data and actionable pharmacovigilance signals. This vignette demonstrates a complete workflow using Insulin as a case study, covering the following four core phases:

  • Data Acquisition and Parsing: Seamlessly downloading and parsing quarterly ASCII/XML data.

  • Clinical Terminology Standardization: Mapping drugs and adverse events to MedDRA and RxNorm hierarchies.

  • Multi-level Deduplication Strategy: Advanced deduplication logic to ensure statistical integrity.

  • Pharmacovigilance Signal Detection: Performing high-performance disproportionality analyses (ROR, PRR, BCPNN, EBGM).

Check metadata of FAERS

library(faers)

This will return a data.table reporting years, period, quarter, and file urls and file sizes. By default, this will use the cached file in tools::R_user_dir("faers", "cache"). If it doesn’t exist, the internal will parse metadata in https://fis.fda.gov/extensions/FPD-QDE-FAERS/FPD-QDE-FAERS.html

head(faers_meta(internal = TRUE),3)
#> → Using internal FAERS metadata
#>   Snapshot time: 2024-09-19 00:18:06.64623
#>     year quarter             period
#>    <int>  <char>             <char>
#> 1:  2024      q2       April - June
#> 2:  2024      q1    January - March
#> 3:  2023      q4 October - December
#>                                                    ascii_urls ascii_file_size
#>                                                        <char>          <char>
#> 1: https://fis.fda.gov/content/Exports/faers_ascii_2024q2.zip          63.9MB
#> 2: https://fis.fda.gov/content/Exports/faers_ascii_2024q1.zip          63.1MB
#> 3: https://fis.fda.gov/content/Exports/faers_ascii_2023Q4.zip          69.1MB
#>                                                    xml_urls xml_file_size
#>                                                      <char>        <char>
#> 1: https://fis.fda.gov/content/Exports/faers_xml_2024q2.zip         126MB
#> 2: https://fis.fda.gov/content/Exports/faers_xml_2024q1.zip         128MB
#> 3: https://fis.fda.gov/content/Exports/faers_xml_2023Q4.zip         140MB

Data Acquisition and Parsing

The FAERS Quarterly Data files contain raw data extracted from the AERS database for the indicated time ranges. The quarterly data files, which are available in ASCII or SGML formats, include:

Field Name Dataset Name Description
demo Demographic Patient demographics, report sources, and administrative information.
drug Drug Drug information (names, dosage, routes) from the case reports.
reac Reaction Adverse event terms coded using MedDRA Preferred Terms (PT).
outc Outcome Patient outcomes (e.g., death, hospitalization, life-threatening).
rpsr Report Source Specific sources of the reports (e.g., physician, manufacturer).
ther Therapy Drug therapy start and end dates for the reported drugs.
indi Indication MedDRA terms for the medical indications for which the drugs were used.

Generally, we can use faers() function to download and parse all quarterly data files from FAERS. Internally, the faers() function seamlessly utilizes faers_download() and faers_parse() to preprocess each quarterly data file from the FAERS repository. The default format was ascii and will return a FAERSascii object. (xml format would also be okay , but presently, the XML file receives only minimal support in the following process.)

Some variables has been added into specific field. See ?faers_parse for details.

# Please make sure to replace dir with your own directory path, as the file
# included in the package is a sampled version.
data1 <- faers(2004, "q1",
    dir = system.file("extdata", package = "faers"),
    compress_dir = tempdir()
)
#> Finding 1 file already downloaded: aers_ascii_2004q1.zip
data1
#> FAERS data from 1 Quarterly ascii file
#>   Total reports: 100 (with duplicates)

Furthermore, in cases where multiple quarterly data files are requisite, the faers_combine() function is judiciously employed.

data2 <- faers(c(2004, 2017), c("q1", "q2"),
    dir = system.file("extdata", package = "faers"),
    compress_dir = tempdir()
)
#> Finding 2 files already downloaded: aers_ascii_2004q1.zip and
#> faers_ascii_2017q2.zip
#> → Combining all 2 <FAERS> Datas
data2
#> FAERS data from 2 Quarterly ascii files
#>   Total reports: 200 (with duplicates)

You can use faers_get() to get specific field data, a data.table will be returned.

head(faers_get(data2, "demo"),3)
#>     year quarter primaryid  caseid i_f_code foll_seq     image event_dt
#>    <int>  <char>    <char>  <char>   <char>    <int>    <char>    <int>
#> 1:  2004      q1   4263764 4060920        I       NA 4263764-6 20020101
#> 2:  2004      q1   4263927 4064250        I       NA 4263927-X       NA
#> 3:  2004      q1   4264001 4062524        I       NA 4264001-9 20031218
#>      mfr_dt   fda_dt rept_cod               mfr_num
#>       <int>    <int>   <char>                <char>
#> 1: 20031219 20040102      EXP          USA031255171
#> 2: 20031209 20040102      EXP             B0317710A
#> 3: 20031219 20040102      EXP JP-JNJFOC-20031204393
#>                                  mfr_sndr   age age_cod gender  e_sub    wt
#>                                    <char> <num>  <char> <char> <char> <num>
#> 1:                  ELI LILLY AND COMPANY    68      YR      F      N  82.0
#> 2: GLAXOSMITHKLINE GLOBAL CLINICAL SAFETY    58      YR      F      N    NA
#> 3:                         CENTOCOR, INC.    53      YR      F      N  36.8
#>    wt_cod  rept_dt occp_cod death_dt to_mfr confid    v23 caseversion
#>    <char>    <int>   <char>   <lgcl> <char> <char> <lgcl>       <int>
#> 1:     KG 20031223     <NA>       NA   <NA>   <NA>     NA           0
#> 2:   <NA> 20031219     <NA>       NA   <NA>   <NA>     NA           0
#> 3:     KG 20031231       MD       NA   <NA>   <NA>     NA           0
#>    age_in_years country_code    sex init_fda_dt auth_num lit_ref age_grp
#>           <num>       <char> <char>       <int>   <char>  <char>  <char>
#> 1:           68         <NA> Female          NA     <NA>    <NA>    <NA>
#> 2:           58         <NA> Female          NA     <NA>    <NA>    <NA>
#> 3:           53         <NA> Female          NA     <NA>    <NA>    <NA>
#>    reporter_country occr_country
#>              <char>       <char>
#> 1:             <NA>         <NA>
#> 2:             <NA>         <NA>
#> 3:             <NA>         <NA>

Clinical Terminology Standardization

The reac (reactions) and indi (indications) files in FAERS use Preferred Terms (PT) from the Medical Dictionary for Regulatory Activities (MedDRA). Standardizing these fields is crucial to map raw terms to their broader clinical categories, such as System Organ Classes (SOC).

Use the faers_standardize() function to integrate your local MedDRA dictionary:

# Replace `meddra_path` with the path to your uncompressed MedDRA data
data <- faers_standardize(data2, meddra_path)

For this demonstration, we will load a pre-standardized dataset included in the package:

data <- readRDS(system.file("extdata", "standardized_data.rds", package = "faers"))
head(data, 3)
#> $demo
#>       year quarter primaryid   caseid i_f_code foll_seq     image event_dt
#>      <int>  <char>    <char>   <char>   <char>    <int>    <char>    <int>
#>   1:  2004      q1   4263764  4060920        I       NA 4263764-6 20020101
#>   2:  2004      q1   4263927  4064250        I       NA 4263927-X       NA
#>   3:  2004      q1   4264001  4062524        I       NA 4264001-9 20031218
#>   4:  2004      q1   4264319  4064506        I       NA 4264319-X 20031216
#>   5:  2004      q1   4266745  4056689        I       NA 4266745-1 20030529
#>  ---                                                                      
#> 196:  2017      q2 136874291 13687429        I       NA      <NA>       NA
#> 197:  2017      q2 136987441 13698744        I       NA      <NA>   201706
#> 198:  2017      q2 137054551 13705455        I       NA      <NA> 20160103
#> 199:  2017      q2 137055661 13705566        I       NA      <NA>       NA
#> 200:  2017      q2 137086221 13708622        I       NA      <NA>       NA
#>        mfr_dt   fda_dt rept_cod                                      mfr_num
#>         <int>    <int>   <char>                                       <char>
#>   1: 20031219 20040102      EXP                                 USA031255171
#>   2: 20031209 20040102      EXP                                    B0317710A
#>   3: 20031219 20040102      EXP                        JP-JNJFOC-20031204393
#>   4: 20031218 20040105      EXP                                 MEDI-0001221
#>   5: 20040105 20040108      EXP                 FR-GLAXOSMITHKLINE-B0318977A
#>  ---                                                                        
#> 196: 20170612 20170624      EXP                          GB-TORRENT-00015363
#> 197: 20170623 20170628      EXP                     JP-PFIZER INC-2017277430
#> 198: 20170501 20170630      EXP                         US-BAYER-2017-084170
#> 199: 20140423 20170630      PER  US-IPSEN BIOPHARMACEUTICALS, INC.-2014-2195
#> 200: 20151116 20170630      PER US-IPSEN BIOPHARMACEUTICALS, INC.-2015-08780
#>                                    mfr_sndr   age age_cod gender  e_sub    wt
#>                                      <char> <num>  <char> <char> <char> <num>
#>   1:                  ELI LILLY AND COMPANY    68      YR      F      N  82.0
#>   2: GLAXOSMITHKLINE GLOBAL CLINICAL SAFETY    58      YR      F      N    NA
#>   3:                         CENTOCOR, INC.    53      YR      F      N  36.8
#>   4:                         MEDIMUNE, INC.    NA    <NA>      F      N    NA
#>   5:                        GLAXOSMITHKLINE    48      YR      F      Y    NA
#>  ---                                                                         
#> 196:                                TORRENT    NA    <NA>   <NA>      Y    NA
#> 197:                                 PFIZER    NA    <NA>   <NA>      Y    NA
#> 198:                                  BAYER    84      YR      M      Y    NA
#> 199:                                  IPSEN    NA    <NA>      F      Y    NA
#> 200:                                  IPSEN    52      YR      F      Y    NA
#>      wt_cod  rept_dt occp_cod death_dt to_mfr confid    v23 caseversion
#>      <char>    <int>   <char>   <lgcl> <char> <char> <lgcl>       <int>
#>   1:     KG 20031223     <NA>       NA   <NA>   <NA>     NA           0
#>   2:   <NA> 20031219     <NA>       NA   <NA>   <NA>     NA           0
#>   3:     KG 20031231       MD       NA   <NA>   <NA>     NA           0
#>   4:   <NA> 20031231       MD       NA   <NA>   <NA>     NA           0
#>   5:   <NA> 20040108       CN       NA   <NA>   <NA>     NA           0
#>  ---                                                                   
#> 196:   <NA> 20170624       CN       NA   <NA>   <NA>     NA           1
#> 197:   <NA> 20170628       MD       NA   <NA>   <NA>     NA           1
#> 198:   <NA> 20170630       LW       NA   <NA>   <NA>     NA           1
#> 199:   <NA> 20170630       OT       NA   <NA>   <NA>     NA           1
#> 200:   <NA> 20170630       MD       NA   <NA>   <NA>     NA           1
#>      age_in_years country_code    sex init_fda_dt             auth_num lit_ref
#>             <num>       <char> <char>       <int>               <char>  <char>
#>   1:           68         <NA> Female          NA                 <NA>    <NA>
#>   2:           58         <NA> Female          NA                 <NA>    <NA>
#>   3:           53         <NA> Female          NA                 <NA>    <NA>
#>   4:           NA         <NA> Female          NA                 <NA>    <NA>
#>   5:           48         <NA> Female          NA                 <NA>    <NA>
#>  ---                                                                          
#> 196:           NA           GB   <NA>    20170624 GB-MHRA-ADR 24016450    <NA>
#> 197:           NA           JP   <NA>    20170628                 <NA>    <NA>
#> 198:           84           US   Male    20170630                 <NA>    <NA>
#> 199:           NA           US Female    20170630                 <NA>    <NA>
#> 200:           52           US Female    20170630                 <NA>    <NA>
#>      age_grp reporter_country occr_country
#>       <char>           <char>       <char>
#>   1:    <NA>             <NA>         <NA>
#>   2:    <NA>             <NA>         <NA>
#>   3:    <NA>             <NA>         <NA>
#>   4:    <NA>             <NA>         <NA>
#>   5:    <NA>             <NA>         <NA>
#>  ---                                      
#> 196:       N               GB           GB
#> 197:    <NA>               JP           JP
#> 198:       E               US           US
#> 199:    <NA>               US           US
#> 200:    <NA>               US           US

The standardized FAERSascii object stores complete MedDRA information in the @meddra slot. This includes both hierarchy and Standardised MedDRA Queries (SMQ) data.

You can access these components using faers_meddra():

# Retrieve MedDRA hierarchy index
head(faers_meddra(data, use = "hierarchy"), 3)
#>    llt_code                       llt_name  pt_code
#>       <int>                         <char>    <int>
#> 1: 10000001      "Ventilation" pneumonitis 10081988
#> 2: 10000002 11-beta-hydroxylase deficiency 10000002
#> 3: 10000003    11-oxysteroid activity incr 10033315
#>                           pt_name hlt_code
#>                            <char>    <int>
#> 1:   Hypersensitivity pneumonitis 10024972
#> 2: 11-beta-hydroxylase deficiency 10021608
#> 3:   Oxycorticosteroids increased 10001339
#>                                                           hlt_name hlgt_code
#>                                                             <char>     <int>
#> 1: Lower respiratory tract inflammatory and immunologic conditions  10024967
#> 2:                              Inborn errors of steroid synthesis  10027424
#> 3:                                            Adrenal cortex tests  10014706
#>                                                             hlgt_name soc_code
#>                                                                <char>    <int>
#> 1: Lower respiratory tract disorders (excl obstruction and infection) 10038738
#> 2:                     Metabolic and nutritional disorders congenital 10010331
#> 3:                       Endocrine investigations (incl sex hormones) 10022891
#>                                           soc_name soc_abbrev primary_soc_fg
#>                                             <char>     <char>         <char>
#> 1: Respiratory, thoracic and mediastinal disorders       Resp              Y
#> 2:      Congenital, familial and genetic disorders       Cong              Y
#> 3:                                  Investigations        Inv              Y

Standardization adds several key columns to the indi and reac fields, such as meddra_hierarchy_idx, meddra_code, and meddra_pt. When you use faers_get(), these standardized columns are automatically merged:

# Standardized columns are joined automatically
head(faers_get(data, "reac"), 3)
#>     year quarter primaryid                                   pt     v3 caseid
#>    <int>  <char>    <char>                               <char> <lgcl> <char>
#> 1:  2004      q1   4263764             BLOOD PRESSURE INCREASED     NA   <NA>
#> 2:  2004      q1   4263764 DIABETES MELLITUS INADEQUATE CONTROL     NA   <NA>
#> 3:  2004      q1   4263927             ACCELERATED HYPERTENSION     NA   <NA>
#>    drug_rec_act meddra_hierarchy_from meddra_code
#>          <lgcl>                <char>      <char>
#> 1:           NA                   llt    10005750
#> 2:           NA                   llt    10012607
#> 3:           NA                   llt    10000358
#>                               meddra_pt llt_code
#>                                  <char>    <int>
#> 1:             Blood pressure increased 10005750
#> 2: Diabetes mellitus inadequate control 10012607
#> 3:             Accelerated hypertension 10000358
#>                                llt_name  pt_code
#>                                  <char>    <int>
#> 1:             Blood pressure increased 10005750
#> 2: Diabetes mellitus inadequate control 10012607
#> 3:             Accelerated hypertension 10000358
#>                                 pt_name hlt_code
#>                                  <char>    <int>
#> 1:             Blood pressure increased 10047110
#> 2: Diabetes mellitus inadequate control 10012602
#> 3:             Accelerated hypertension 10000356
#>                                    hlt_name hlgt_code
#>                                      <char>     <int>
#> 1: Vascular tests NEC (incl blood pressure)  10007512
#> 2:        Diabetes mellitus (incl subtypes)  10018424
#> 3:   Accelerated and malignant hypertension  10057166
#>                                                  hlgt_name soc_code
#>                                                     <char>    <int>
#> 1: Cardiac and vascular investigations (excl enzyme tests) 10022891
#> 2:   Glucose metabolism disorders (incl diabetes mellitus) 10027433
#> 3:                         Vascular hypertensive disorders 10047065
#>                              soc_name soc_abbrev primary_soc_fg
#>                                <char>     <char>         <char>
#> 1:                     Investigations        Inv              Y
#> 2: Metabolism and nutrition disorders      Metab              Y
#> 3:                 Vascular disorders       Vasc              Y

Multi-level Deduplication Strategy

A significant limitation of the FAERS database is the presence of duplicate or incomplete reports. Multiple submissions for the same case (e.g., updates from a manufacturer) can bias statistical signals if not handled correctly.

In faers, two cases are considered identical if they show full concordance across:

Administered drugs

Adverse reactions

Discrepancies are permitted in only one (or none) of the following secondary fields: gender, age, country, event date, start date, or indications.

Run the faers_dedup() function to clean your dataset:

data <- faers_dedup(data)
#> → deduplication from the same source by retain the most recent report
#> → merging `drug`, `indi`, `ther`, and `reac` data
#> → deduplication from multiple sources by matching sex, age, reporting country, event date, start date, drug indications, drugs administered, and adverse reactions
data
#> Standardized and De-duplicated FAERS data from 2 Quarterly ascii files
#>   Total unique reports: 200

Pharmacovigilance Signal Detection

Pharmacovigilance focuses on the science and activities relating to the detection, assessment, and prevention of adverse effects. In this section, we transition from data preprocessing to Signal Mining using disproportionality analysis.

  1. Target Drug Filtering & Standardization To perform a precise analysis for “Insulin,” we must account for the inconsistency of drug naming in FAERS (e.g., brand names vs. generic names). We leverage fda_drugs() to retrieve standardized synonyms from the FDA database and then use faers_filter() to isolate relevant reports.
# Step 1: Define the target drug and fetch synonyms from Drugs@FDA
insulin_names <- "insulin"
insulin_pattern <- paste(insulin_names, collapse = "|")

# This queries the official FDA drug database
fda_insulin <- fda_drugs()[
    grepl(insulin_pattern, ActiveIngredient, ignore.case = TRUE)
]
# Step 2: Create a robust regex pattern including all identified brand names
insulin_pattern <- paste0(
    unique(tolower(c(insulin_names, fda_insulin$DrugName))),
    collapse = "|"
)

# Step 3: Filter the deduplicated dataset
# We search in both 'drugname' and 'prod_ai' fields for maximum coverage
insulin_data <- faers_filter(data, .field = "drug", .fn = function(x) {
    idx <- grepl(insulin_pattern, x$drugname, ignore.case = TRUE) |
           grepl(insulin_pattern, x$prod_ai, ignore.case = TRUE)
    x[idx, primaryid]
})
insulin_data
#> Standardized and De-duplicated FAERS data from 2 Quarterly ascii files
#>   Total unique reports: 9
  1. Disproportionality Analysis (Signal Mining)The faers_phv_signal() function is the core engine for signal detection. It automatically constructs contingency tables and calculates a comprehensive suite of statistical indices:Frequentist Methods: ROR (Reporting Odds Ratio), PRR (Proportional Reporting Ratio), and Chi-square .Bayesian Methods: BCPNN (Information Component) and EBGM (Empirical Bayes Geometric Mean).Crucial Concept: To calculate these scores, you must specify the .full argument, which represents the background distribution (typically the entire deduplicated FAERS dataset) used for comparison.
# Perform signal detection using all supported methods
# BiocParallel is used here to ensure memory-efficient processing
insulin_signals <- faers_phv_signal(
    insulin_data,
    .full = data,
    BPPARAM = BiocParallel::SerialParam(RNGseed = 1L)
)

# Display top signals at the default level (System Organ Class - SOC)
head(insulin_signals, 3)
#> Key: <soc_name>
#>                                      soc_name     a     b     c     d expected
#>                                        <char> <int> <int> <int> <int>    <num>
#> 1:       Blood and lymphatic system disorders     1     8    10   181    0.495
#> 2:                          Cardiac disorders     2     7    14   177    0.720
#> 3: Congenital, familial and genetic disorders     0     9     1   190    0.045
#>         ror ror_ci_low ror_ci_high      prr prr_ci_low prr_ci_high        chisq
#>       <num>      <num>       <num>    <num>      <num>       <num>        <num>
#> 1: 2.262500  0.2572522    19.89840 2.122222  0.3037912    14.82540 5.596283e-05
#> 2: 3.612245  0.6847643    19.05519 3.031746  0.8081172    11.37395 9.617573e-01
#> 3: 0.000000  0.0000000         NaN 0.000000  0.0000000         NaN 3.656454e-27
#>    chisq_pvalue bcpnn_norm_ic bcpnn_norm_ic_ci_low bcpnn_norm_ic_ci_high
#>           <num>         <num>                <num>                 <num>
#> 1:    0.9940312     0.0710472            -2.497623              2.639718
#> 2:    0.3267445     0.5675674            -1.526573              2.661708
#> 3:    1.0000000    -0.5111021            -4.877628              3.855424
#>    bcpnn_mcmc_ic bcpnn_mcmc_ic_ci_low bcpnn_mcmc_ic_ci_high   oe_ratio
#>            <num>                <num>                 <num>      <num>
#> 1:     0.5928924            -3.010220              2.088073  0.5921941
#> 2:     1.0354854            -1.318757              2.210155  1.0350469
#> 3:    -0.1217393           -10.040709              2.133913 -0.1243281
#>    oe_ratio_ci_low oe_ratio_ci_high odds_ratio odds_ratio_ci_low
#>              <num>            <num>      <num>             <num>
#> 1:       -3.190907         2.279620   2.249795        0.04640325
#> 2:       -1.558021         2.426449   3.575180        0.33257276
#> 3:       -9.949514         2.149612   0.000000        0.00000000
#>    odds_ratio_ci_high fisher_pvalue     ebgm ebgm_ci_low ebgm_ci_high
#>                 <num>         <num>    <num>       <num>        <num>
#> 1:           19.93923     0.4054350 1.395816        0.91         2.05
#> 2:           21.37723     0.1552616 1.435648        0.95         2.09
#> 3:          817.11230     1.0000000 1.373343        0.89         2.03
  1. Multi-level Event Analysis While the default analysis occurs at the SOC (System Organ Class) level, faers allows you to explore signals at different granularities of the MedDRA hierarchy, such as HLGT (High-Level Group Term) or PT (Preferred Term).
# Refine the analysis to the HLGT level by adjusting the .events argument
insulin_signals_hlgt <- faers_phv_signal(
    insulin_data,
    .events = "hlgt_name", 
    .full = data,
    BPPARAM = BiocParallel::SerialParam(RNGseed = 1L)
)

head(insulin_signals_hlgt, 3)
#> Key: <hlgt_name>
#>                        hlgt_name     a     b     c     d expected   ror
#>                           <char> <int> <int> <int> <int>    <num> <num>
#> 1:      Abortions and stillbirth     0     9     1   190    0.045     0
#> 2:           Acid-base disorders     0     9     1   190    0.045     0
#> 3: Administration site reactions     0     9     7   184    0.315     0
#>    ror_ci_low ror_ci_high   prr prr_ci_low prr_ci_high        chisq
#>         <num>       <num> <num>      <num>       <num>        <num>
#> 1:          0         NaN     0          0         NaN 3.656454e-27
#> 2:          0         NaN     0          0         NaN 3.656454e-27
#> 3:          0         NaN     0          0         NaN 1.786975e-29
#>    chisq_pvalue bcpnn_norm_ic bcpnn_norm_ic_ci_low bcpnn_norm_ic_ci_high
#>           <num>         <num>                <num>                 <num>
#> 1:            1    -0.5111021            -4.877628              3.855424
#> 2:            1    -0.5111021            -4.877628              3.855424
#> 3:            1    -1.1507801            -5.019473              2.717913
#>    bcpnn_mcmc_ic bcpnn_mcmc_ic_ci_low bcpnn_mcmc_ic_ci_high   oe_ratio
#>            <num>                <num>                 <num>      <num>
#> 1:    -0.1217393            -9.949514              2.149612 -0.1243281
#> 2:    -0.1217393            -9.946112              2.126954 -0.1243281
#> 3:    -0.7037844           -10.647371              1.546410 -0.7048720
#>    oe_ratio_ci_low oe_ratio_ci_high odds_ratio odds_ratio_ci_low
#>              <num>            <num>      <num>             <num>
#> 1:       -9.949514         2.149612          0                 0
#> 2:       -9.946112         2.126954          0                 0
#> 3:      -10.647371         1.546410          0                 0
#>    odds_ratio_ci_high fisher_pvalue      ebgm ebgm_ci_low ebgm_ci_high
#>                 <num>         <num>     <num>       <num>        <num>
#> 1:          817.11230             1 1.1005555        0.88         4.14
#> 2:          817.11230             1 1.1005555        0.88         4.14
#> 3:           16.61573             1 0.9766533        0.88         4.13

sessionInfo

sessionInfo()
#> R version 4.5.1 (2025-06-13)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: Asia/Shanghai
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] faers_1.5.4
#> 
#> loaded via a namespace (and not attached):
#>  [1] sass_0.4.10         generics_0.1.4      openEBGM_0.9.1     
#>  [4] lattice_0.22-7      digest_0.6.39       magrittr_2.0.4     
#>  [7] evaluate_1.0.5      grid_4.5.1          RColorBrewer_1.1-3 
#> [10] MCMCpack_1.7-1      fastmap_1.2.0       jsonlite_2.0.0     
#> [13] Matrix_1.7-3        survival_3.8-3      mcmc_0.9-8         
#> [16] scales_1.4.0        codetools_0.2-20    textshaping_1.0.4  
#> [19] jquerylib_0.1.4     cli_3.6.5           rlang_1.1.6        
#> [22] splines_4.5.1       cachem_1.1.0        yaml_2.3.12        
#> [25] tools_4.5.1         parallel_4.5.1      SparseM_1.84-2     
#> [28] BiocParallel_1.42.2 MatrixModels_0.5-4  coda_0.19-4.1      
#> [31] dplyr_1.1.4         ggplot2_4.0.0       vctrs_0.6.5        
#> [34] R6_2.6.1            lifecycle_1.0.4     fs_1.6.7           
#> [37] htmlwidgets_1.6.4   MASS_7.3-65         ragg_1.5.0         
#> [40] pkgconfig_2.0.3     desc_1.4.3          pkgdown_2.1.3      
#> [43] bslib_0.10.0        pillar_1.11.1       gtable_0.3.6       
#> [46] data.table_1.17.8   glue_1.8.0          systemfonts_1.3.1  
#> [49] tidyselect_1.2.1    xfun_0.55           tibble_3.3.0       
#> [52] rstudioapi_0.17.1   knitr_1.51          farver_2.1.2       
#> [55] htmltools_0.5.9     rmarkdown_2.30      compiler_4.5.1     
#> [58] quantreg_6.1        S7_0.2.0