A fast, flexible tool for generating disease surveillance reports from data exported from 'EpiTrax', a central repository for epidemiological data used by public health officials. It provides functions to manipulate 'EpiTrax' datasets, tailor reports to internal or public use, and export reports in CSV, Excel 'xlsx', or PDF formats.
EpiTrax is a central repository for epidemiological data developed by Utah State’s Department of Health and Human Services (DHHS). It is now used by several other states. Through EpiTrax, public health officials have access to many different types of disease surveillance data, which they use to produce regular (e.g., weekly, monthly, annual) reports on their respective jurisdictions. This can be a tedious, time-intensive process, often involving multiple spreadsheets.
The epitraxr package makes it fast and easy to process EpiTrax data
and generate reports. With epitraxr it is simple to setup a report
pipeline, then you simply hit “run” and select your latest EpiTrax
export—epitraxr will do the rest!
You can install the stable version of epitraxr from CRAN with:
install.packages("epitraxr")
To get a bug fix or to use a feature from the development version, you
can install the development version of epitraxr from
GitHub with:
# install.packages("devtools")
devtools::install_github("EpiForeSITE/epitraxr")
For local health departments, we recommend going through the steps under Installation For Local Health Departments (below). Our experience is that LHD-managed machines need additional tools and packages installed first. This list will walk you through those steps.
Many features of epitraxr will work with the standard installation.
However, there are several optional features, such as PDF report
generation and the R Shiny app, that require you to install additional
dependencies. You can do that by adding the dependencies = TRUE flag
when installing the package:
# Stable version from CRAN
install.packages("epitraxr", dependencies = TRUE)
# Development version from GitHub
# install.packages("devtools")
devtools::install_github("EpiForeSITE/epitraxr", dependencies = TRUE)
For PDF reports, you may need to install a LaTeX distribution as well.
We recommend using TinyTeX as described in
the R Markdown
Cookbook.
First, install the tinytex package:
install.packages("tinytex")
Then, install TinyTeX (the LaTeX distribution) using the tinytex
package:
tinytex::install_tinytex()
# to uninstall TinyTeX, run
# tinytex::uninstall_tinytex()
After that, you can use epitraxr to generate PDF reports.
In our experience, machines managed by local health departments (LHDs) are less likely to have installed all necessary packages and tools. For these users, we recommend completing the following steps before installing the package using the instructions above.
devtoolsinstall.packages("devtools")
tinytex packageinstall.packages("tinytex")
tinytex packagetinytex::install_tinytex()
epitraxr# Stable version from CRAN
install.packages("epitraxr", dependencies = TRUE)
# Development version from GitHub
devtools::install_github("EpiForeSITE/epitraxr", dependencies = TRUE)
epitraxr from
GitHub and ran into an error (such as one solved by the above steps),
you may need to install the package again with the option
force = TRUE to ensure the full package is downloaded and installed
properly:# Development version from GitHub
devtools::install_github("EpiForeSITE/epitraxr", dependencies = TRUE, force = TRUE)
epitraxr expects input data in CSV format (not Excel) that contains
EpiTrax data exported with the following columns:
patient_mmwr_week (integer)patient_mmwr_year (integer)patient_disease (character)For example:
"patient_mmwr_week","patient_mmwr_year","patient_disease"
"26","2020","Chlamydia trachomatis infection"
Your dataset can include other columns, but epitraxr will ignore them.
Also, rows with missing or NA values in the input dataset will be ignored and a warning will be printed to the Console. The warning is intended to inform the user that their input had missing/NA values, in case the user wants to correct that (and re-run the report generation). It does not mean the program was unable to generate reports from the rest of the data.
To configure your reports, epitraxr accepts three OPTIONAL files:
internal_report_diseases.csv in our example
scripts.EpiTrax_name: A list of all diseases to include in the report
AS THEY ARE NAMED IN EPITRAX. This column is required.Group_name: Containing the disease group (e.g., “Zoonotic
Disease”) for each disease in the EpiTrax_name column. This
column is optional and is only used by the grouped disease
report functions (create_report_grouped_stats() and
epitrax_report_grouped_stats()). If omitted, most epitraxr
functions will operate normally, but the grouped disease report
functions will set all diseases to the single group
“Uncategorized”.epitraxr will
default to using whatever diseases are found in the input dataset.public_report_diseases.csv in our example
scripts.EpiTrax_name: A list of all diseases to include in the report
AS THEY ARE NAMED IN EPITRAX.Public_name: How each disease should be named in the public
report. For example, converting “Chlamydia trachomatis
infection” to “Chlamydia”.
Public_name
their report entries will be combined. For example, to combine
“Syphilis, primary” and “Syphilis, secondary” into “Syphilis”,
simply set the Public_name of both diseases to “Syphilis”.current_population: Population for converting case counts for
the current year to Rates per 100k. Defaults to 100k.avg_5yr_population: Population to use for converting case counts
for the 5yr historical average to Rates per 100k. Defaults to
current_population.rounding_decimals: How many digits to round decimal values.
Defaults to 2.generate_csvs: Whether to generate CSVs. When false, only Excel
files will be generated. Defaults to TRUE.trend_threshold: Threshold for determining the “Trend” column in
reports that compute this statistic. A percent change above or
below the trend_threshold will result in a change in the trend.
Defaults to 0.15 (15%).report_config.yaml in our
example scripts.Again, these files are optional, but significantly improve the quality of your reports.
Note: Disease lists (both internal and public) might include diseases for which there are no case data in the input dataset. In this case, their values will simply be 0s in the generated reports.
epitraxr can output reports as CSVs, Excel files, or PDFs. To write
reports to outputs, you need to provide the output functions with
folders where epitraxr will write the outputs. Generally, we’ll use
three folders:
report_settings/: Holds settings files for report generation.internal_reports/: Holds reports intended for internal use by the
health department.public_reports/: Holds reports intended for public use.You can create these manually or you can use the setup_filesystem()
function to create the directories. The example scripts in the
scripts/
folder all start by setting up the filesystem.
WARNING: Do not place any of your own files in the
internal_reports and public_reports folders you give epitraxr as
typically EVERYTHING in these folders is DELETED each time the
script runs (depending on how you configure setup_filesystem()). This
is intended to remove reports from previous runs so they don’t clutter
your filesystem. If you want to save old reports, move them out of the
internal_reports/public_reports folders before running your
epitraxr script again.
epitraxr Codeepitraxr can be used in either “standard” mode or “piped” mode
(recommended).
library(epitraxr)
data_file <- system.file(
"sample_data/sample_epitrax_data.csv",
package = "epitraxr"
)
epitrax_data <- read_epitrax_data(data_file)
report <- create_report_annual_counts(
data = epitrax_data,
diseases = c("Chickenpox", "Measles", "Lyme disease")
)
report
#> disease 2019 2020 2021 2022 2023 2024
#> 1 Chickenpox 218 318 263 234 249 292
#> 2 Lyme disease 0 0 0 0 0 0
#> 3 Measles 211 326 292 414 586 304
library(epitraxr)
config_file <- system.file(
"sample_data/sample_config.yml",
package = "epitraxr"
)
disease_list_file <- system.file(
"sample_data/sample_disease_list.csv",
package = "epitraxr"
)
epitrax <- create_epitrax_from_file(data_file) |>
epitrax_set_config_from_file(config_file) |>
epitrax_set_report_diseases(list(
internal = disease_list_file,
public = disease_list_file
)) |>
epitrax_ireport_annual_counts()
epitrax$internal_reports$annual_counts
#> disease 2019 2020 2021 2022 2023 2024
#> 1 Chickenpox 218 318 263 234 249 292
#> 2 Lyme disease 0 0 0 0 0 0
#> 3 Measles 211 326 292 414 586 304
Piped mode makes it super simple to add additional reports.
epitrax <- create_epitrax_from_file(data_file) |>
epitrax_set_config_from_file(config_file) |>
epitrax_set_report_diseases(list(
internal = disease_list_file,
public = disease_list_file
)) |>
epitrax_ireport_annual_counts() |>
epitrax_ireport_monthly_avgs() |>
epitrax_ireport_ytd_counts_for_month()
list(epitrax$internal_reports)
#> [[1]]
#> [[1]]$annual_counts
#> disease 2019 2020 2021 2022 2023 2024
#> 1 Chickenpox 218 318 263 234 249 292
#> 2 Lyme disease 0 0 0 0 0 0
#> 3 Measles 211 326 292 414 586 304
#>
#> [[1]]$`monthly_avgs_2019-2024`
#> disease Jan Feb Mar Apr May Jun Jul Aug Sep
#> 1 Chickenpox 23.5 22.333 21.000 26.667 19.833 19.167 24.167 20.0 18.833
#> 2 Lyme disease 0.0 0.000 0.000 0.000 0.000 0.000 0.000 0.0 0.000
#> 3 Measles 27.0 31.500 24.667 34.833 25.667 24.667 37.333 27.5 28.167
#> Oct Nov Dec
#> 1 25.333 19.000 22.500
#> 2 0.000 0.000 0.000
#> 3 36.333 29.167 28.667
#>
#> [[1]]$ytd_counts
#> disease Current_YTD_Counts Avg_5yr_YTD_Counts
#> 1 Chickenpox 292 256.4
#> 2 Lyme disease 0 0.0
#> 3 Measles 304 365.8
The epitraxr package includes a Shiny app, which provides a user-friendly interface for running report generation operations with epitraxr.
To run the Shiny app, you’ll need to install the optional dependencies,
such as shiny and DT (if you didn’t already do this during initial
package installation).
devtools::install_github("EpiForeSITE/epitraxr", dependencies = TRUE)
Next, load the package:
library(epitraxr)
Finally, use run_app() to launch the app:
run_app()
We’ve developed a couple of handy scripts that are included in the
GitHub repo under the
scripts/
folder:
epitraxr-piped.R:
Showcases report generation using epitraxr’s Piped Mode
(recommended)epitraxr-standard.R:
Showcases report generation using the epitraxr’s Standard ModeThese scripts provide you with a full report generation process that
should run successfully if you have the package installed with all
additional dependencies (see above). They provide identical output to
the original
project
(currently inactive), though
epitraxr-piped.R
additionally provides a few new reports and generates PDFs.
epitraxr unexpectedly fails to generate reports after previously
succeeding, check that none of the generated reports are open on your
machine. Often, an epitraxr script will start by deleting existing
reports from folders before generating new ones. If the files are
opened, epitraxr cannot delete them. Close any open files and try
running the script again.If you encounter a clear bug, please file an issue with a minimal reproducible example on GitHub.
Please note that the epitraxr project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
This project was made possible by cooperative agreement CDC-RFA-FT-23-0069 from the CDC’s Center for Forecasting and Outbreak Analytics. Its contents are solely the responsibility of the authors and do not necessarily represent the official views of the Centers for Disease Control and Prevention.