A comprehensive R Shiny application for exploring systematically reviewed evidence on COVID‑19, influenza, and RSV vaccine effectiveness and safety.
- VIP Data Visualisation Shiny App
The Vaccine Integrity Project (VIP) interactive data tool summarises newly published research evaluating the effectiveness and safety of vaccines and immunisation products for:
- COVID‑19
- Influenza
- Respiratory syncytial virus (RSV)
The tool is built in R Shiny and provides two main interactive tabs:
- Studies - a list of included studies with reference information, study characteristics, and risk‑of‑bias assessments.
- Outcomes - vaccine effectiveness/efficacy and safety estimates extracted from the included studies.
The underlying data come from systematic reviews of peer‑reviewed research conducted as part of the VIP project.
- Interactive filtering by:
- Virus
- Population
- Age group
- Study period
- Study design
- Outcome domain
- Risk of bias
- Vaccine and strain
- Responsive layout with collapsible sidebar filters.
- Freeze header row and first column in data tables.
- Responsive/mobile‑friendly table behaviour.
- Lightweight / full‑view toggles.
- Download full source Excel workbooks.
- Download filtered views as Excel files.
- About page with project information and collapsible definitions.
- Dynamic row counts and filter helper messages.
- Support for embedded deployment via iframe.
├── app.R # Main Shiny application
├── shiny_aux/
│ ├── config.R # Study configuration (columns, filters, population map)
│ ├── outcome_config.R # Outcome configuration
│ ├── filter_ui.R # Filter UI components
│ ├── filter_server.R # Filter server logic
│ ├── helpers.R # Helper functions
│ └── styles.R # Custom CSS
├── characteristics_tables/
│ └── All_Study_Characteristics.xlsx
├── outcome_tables/
│ └── All_Tables_split.xlsx
├── www/
│ ├── VIP_Logo_Horizontal.png
│ └── VIP_Logo_Vertical.png
└── README.md
The Shiny app reads from two primary Excel workbooks:
characteristics_tables/All_Study_Characteristics.xlsx- Sheet Study Characteristics
- Additional sheets:
Footnotes,Outcomes_Long,N_Long,Population_Long,Virus_Long,RoB_Long
outcome_tables/All_Tables_split.xlsx- Sheet All
- Additional sheets:
Footnotes,Population_Long,Virus_Long
These workbooks are generated from the consensus data‑extraction file using data processing scripts (available upon request).
- R (>= 4.0 recommended)
- RStudio (optional but recommended)
- Internet access for package installation
git clone https://github.com/your‑org/vip-data-vis.git
cd vip-data-visOpen app.R.
Click Run App.
The app depends on:
library(shiny)
library(readxl)
library(DT)
library(shinyjs)
library(dplyr)
library(writexl)
library(ggplot2)
library(rlang)
library(bslib)Install with:
install.packages(c(
"shiny", "readxl", "DT", "shinyjs",
"dplyr", "writexl", "ggplot2",
"rlang", "bslib"
))Displays one row per included study with columns such as:
- Study
- Virus
- Population
- Age range
- Study period
- Total N
- Study design
- Risk of bias
- Funding source
- Journal / PMID / PMCID / DOI / Link
Filters available:
- Virus
- Type of Outcome
- Age Group
- Population Type
- Study Period
- Study Design
- Risk of Bias
- Advanced population filters
Displays extracted outcome estimates with columns including:
- Study label
- Population
- Age range
- Outcome
- Estimate
- Estimate type
- Risk of bias
- Vaccine formulations and strains
- Sample sizes
Filters available:
- Virus
- Type of Outcome
- Age Group
- Population Type
- Study Period
- Study Design
- Type of Estimate
- Risk of Bias
Both tabs include a lightweight view toggle that hides less critical columns to reduce horizontal scrolling.
- Download full Excel - exports the original source workbook.
- Download filtered view - exports only the currently visible rows, including a Footnotes sheet.
- Create an account at shinyapps.io.
- Install
rsconnect:install.packages("rsconnect") - Authenticate:
rsconnect::setAccountInfo( name = "your‑account", token = "your‑token", secret = "your‑secret" )
- Deploy:
rsconnect::deployApp(appDir = "path/to/app")
Use an iframe:
<iframe
src="https://your-account.shinyapps.io/vip_data_vis/"
width="100%"
height="700"
style="border:none;"
allowfullscreen
>
</iframe>shiny_aux/config.R contains:
pop_code_to_full <- c(
"OA" = "Older Adults",
"A" = "Adults",
"I" = "Infants",
"C" = "Children",
"IC" = "Immunocompromised",
"HR" = "Other co-occurring conditions",
"P" = "Pregnant",
"H" = "Healthcare personnel"
)shiny_aux/outcome_config.R and config.R define:
always_hide- columns never displayed in the main table.article_cols- columns hidden in lightweight view.column_order- display order.desired_widths- column width preferences.
Each filter uses long‑format helper tables (Population_Long, Virus_Long, etc.) to map user selections to a set of row IDs. The final data set is the intersection of all active filter ID sets.
When no value is selected in a filter, the filter returns all IDs, so no rows are accidentally dropped.
- Download Study Characteristics - full source workbook, cleaned but unmodified columns.
- Download Outcomes - all outcome rows in the source workbook.
Both tabs include Download filtered view, which exports only the currently visible rows.
Selected columns can be removed at export time via drop_columns.
Edit shiny_aux/filter_ui.R and shiny_aux/filter_server.R to add or modify filters.
Update the relevant configuration files:
config.Rfor Studies.outcome_config.Rfor Outcomes.
Edit shiny_aux/styles.R.
Replace the files in the www/ folder with your own images.
This work builds on the Vaccine Integrity Project (VIP) led by CIDRAP.
We thank all reviewers, extractors, and contributors who made this systematic review possible.