MyNixOS website logo
Description

WHO Cardiovascular Disease Risk Calculator.

Implements the 2019 World Health Organization (WHO) cardiovascular disease (CVD) risk prediction models, as described in Kaptoge et al. (2019) <doi:10.1016/S2214-109X(19)30318-3>. Provides two validated models for estimating 10-year risk of fatal and non-fatal cardiovascular events (myocardial infarction and stroke): a laboratory-based model using age, sex, systolic blood pressure, total cholesterol, smoking status, and diabetes history; and a non-laboratory-based model substituting body mass index (BMI) for cholesterol and diabetes, suitable for resource-limited settings. Risk estimates are recalibrated to 21 Global Burden of Disease regions using region-specific incidence rates and risk factor distributions derived from the Emerging Risk Factors Collaboration. Functions are fully vectorized for efficient batch calculations and support automatic country-to-region mapping via ISO 3166-1 alpha-3 country codes.

WHOrisk: WHO Cardiovascular Disease Risk Calculator

An R package implementing the 2019 WHO cardiovascular disease (CVD) risk prediction models for 21 global regions.

Overview

This package calculates 10-year risk of cardiovascular disease (fatal and non-fatal myocardial infarction and stroke) using the WHO risk charts published in The Lancet Global Health (2019).

Reference: > Kaptoge S, Pennells L, De Bacquer D, et al. World Health Organization cardiovascular disease risk charts: revised models to estimate risk in 21 global regions. Lancet Glob Health. 2019;7(10):e1332-e1345. doi:10.1016/S2214-109X(19)30318-3{.uri}

Features

  • Two models available:
    • Laboratory-based model (requires cholesterol measurement)
    • Non-laboratory-based model (uses BMI instead, suitable for resource-limited settings)
  • Fully vectorized for efficient batch calculations
  • Zero dependencies - uses only base R
  • Automatic country-to-region mapping using ISO 3166-1 alpha-3 country codes
  • 21 global regions with region-specific recalibration

Installation

# Install from source
install.packages("WHOrisk", repos = NULL, type = "source")

# Or using devtools
devtools::install_local("path/to/WHOrisk")

Usage

Laboratory-Based Model

library(WHOrisk)

# Single patient calculation using region
risk <- calculate_who_risk(
  age = 55,
  sex = "male",
  sbp = 140,
  cholesterol = 5.5,  # mmol/L
  smoking = TRUE,
  diabetes = FALSE,
  region = "western_europe"
)
print(paste0("10-year CVD risk: ", round(risk * 100, 1), "%"))

# Using country code instead of region
risk <- calculate_who_risk(
  age = 60,
  sex = "female",
  sbp = 130,
  cholesterol = 6.0,
  smoking = FALSE,
  diabetes = TRUE,
  country = "ITA"  # Italy -> western_europe
)

# Vectorized calculation for multiple patients
risks <- calculate_who_risk(
  age = c(45, 55, 65, 75),
  sex = c("male", "female", "male", "female"),
  sbp = c(120, 140, 160, 150),
  cholesterol = c(5.0, 6.0, 7.0, 5.5),
  smoking = c(FALSE, TRUE, FALSE, FALSE),
  diabetes = c(FALSE, FALSE, TRUE, TRUE),
  country = c("USA", "GBR", "IND", "JPN")
)

Non-Laboratory-Based Model

For settings where cholesterol measurement is not available:

risk <- calculate_who_risk_nonlab(
  age = 55,
  sex = "male",
  sbp = 140,
  bmi = 28,
  smoking = TRUE,
  region = "south_asia"
)

Utility Functions

# Get list of valid regions
get_regions()

# Get country code mappings
get_country_codes()

# Look up specific countries
get_country_codes(c("USA", "GBR", "IND"))

# Map country to region
country_to_region(c("FRA", "DEU", "ITA"))  # All return "western_europe"

Model Details

Variables and Centering

VariableLaboratory ModelNon-Lab ModelCentered At
Age60 years
Systolic BP120 mmHg
Total Cholesterol-6 mmol/L
BMI-25 kg/m²
Smoking-
Diabetes--

Valid Ranges

  • Age: 40-80 years (model derivation range)
  • Systolic BP: Typically 70-250 mmHg
  • Cholesterol: 2-12 mmol/L (divide mg/dL by 38.67)
  • BMI: 12-60 kg/m²

21 Global Regions

Region CodeDescription
north_africa_middle_eastNorth Africa and Middle East
central_subsaharan_africaCentral Sub-Saharan Africa
eastern_subsaharan_africaEastern Sub-Saharan Africa
southern_subsaharan_africaSouthern Sub-Saharan Africa
western_subsaharan_africaWestern Sub-Saharan Africa
southern_latin_americaSouthern Latin America
high_income_north_americaHigh-income North America
caribbeanCaribbean
andean_latin_americaAndean Latin America
central_latin_americaCentral Latin America
tropical_latin_americaTropical Latin America
east_asiaEast Asia
south_asiaSouth Asia
southeast_asiaSoutheast Asia
central_asiaCentral Asia
high_income_asia_pacificHigh-income Asia Pacific
western_europeWestern Europe
central_europeCentral Europe
eastern_europeEastern Europe
oceaniaOceania
australasiaAustralasia

Algorithm

The model calculates separate 10-year risks for: 1. Myocardial infarction / CHD death 2. Stroke

These are combined assuming independence:

P(CVD) = 1 - (1 - P(MI)) × (1 - P(Stroke))

Risk is calculated using Cox proportional hazards:

P(event) = 1 - S₀^exp(LP)

Where: - S₀ = region-specific baseline survival (from GBD incidence data) - LP = linear predictor including main effects and age interactions

Cholesterol Unit Conversion

The model uses mmol/L. To convert from mg/dL:

cholesterol_mmol <- cholesterol_mg_dl / 38.67

Limitations

  1. Age range: Model was derived for ages 40-80. Extrapolation outside this range is less reliable.

  2. Non-laboratory model: Does not include diabetes, so may underestimate risk in diabetic patients.

  3. Regional calibration: Based on 2017 GBD estimates; actual risk may vary by specific country or population.

  4. Risk factors not included: Family history, ethnicity, HDL cholesterol, triglycerides, etc.

License

MIT License. See LICENSE file for details.

The underlying risk models are from the WHO CVD Risk Chart Working Group.

Metadata

Version

1.0.0

License

Unknown

Platforms (80)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    uefi
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-uefi
  • aarch64-windows
  • aarch64_be-none
  • arc-linux
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • sh4-linux
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-uefi
  • x86_64-windows