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).
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 140MBThe 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>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 USThe 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 YStandardization 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 YA 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: 200Pharmacovigilance 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.
# 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
# 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
# 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()
#> 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