Title: WHO Cardiovascular Disease Risk Calculator
Version: 1.0.0
Description: 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.
License: MIT + file LICENSE
Encoding: UTF-8
RoxygenNote: 7.3.3
Suggests: devtools, renv, spelling
Language: en-US
Config/testthat/edition: 3
NeedsCompilation: no
Packaged: 2026-04-01 09:59:18 UTC; r878876
Author: WHO CVD Risk Chart Working Group [aut], Andrea Pedot [cre, ctb]
Maintainer: Andrea Pedot <andrea.pedot@unimi.it>
Repository: CRAN
Date/Publication: 2026-04-07 07:30:09 UTC

WHO CVD Risk Calculator

Description

Calculate 10-year cardiovascular disease (CVD) risk using the 2019 WHO risk prediction models. This package implements both laboratory-based and non-laboratory-based models, recalibrated for 21 global regions.

Author(s)

Maintainer: Andrea Pedot andrea.pedot@unimi.it

References

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


Calculate WHO 10-Year CVD Risk (Laboratory-Based Model)

Description

Calculates the 10-year risk of cardiovascular disease (fatal and non-fatal myocardial infarction and stroke) using the WHO laboratory-based model. This model requires total cholesterol measurement.

Usage

calculate_who_risk(
  age,
  sex,
  sbp,
  cholesterol,
  smoking,
  diabetes,
  region = NULL,
  country = NULL
)

Arguments

age

Numeric vector. Age in years (valid range: 40-80).

sex

Character vector. Sex: "male" or "female".

sbp

Numeric vector. Systolic blood pressure in mmHg.

cholesterol

Numeric vector. Total cholesterol in mmol/L. To convert from mg/dL to mmol/L, divide by 38.67.

smoking

Logical vector. Current smoking status (TRUE = current smoker).

diabetes

Logical vector. History of diabetes (TRUE = diabetic).

region

Character vector. WHO/GBD region name. One of the 21 global regions (see get_regions for valid values). If NULL and country is provided, region will be determined automatically.

country

Character vector. ISO 3166-1 alpha-3 country code (e.g., "USA", "GBR", "IND"). Used to determine region if region is NULL. See get_country_codes for valid values.

Details

The model uses Cox proportional hazards regression with the following predictors:

Risk is calculated separately for myocardial infarction/CHD death and stroke, then combined assuming independence of the two outcomes:

P_{CVD} = 1 - (1 - P_{MI}) \times (1 - P_{stroke})

The model is recalibrated to region-specific incidence rates and mean risk factor levels from the Global Burden of Disease study.

Value

Numeric vector of 10-year CVD risk as a proportion (0-1). Multiply by 100 to get percentage.

Centering Values

Variables are centered at:

See Also

calculate_who_risk_nonlab for the non-laboratory-based model, get_regions for available regions, get_country_codes for country code lookup.

Examples

# Single calculation
calculate_who_risk(
  age = 55,
  sex = "male",
  sbp = 140,
  cholesterol = 5.5,
  smoking = TRUE,
  diabetes = FALSE,
  region = "western_europe"
)

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

# Vectorized calculation
calculate_who_risk(
  age = c(45, 55, 65),
  sex = c("male", "female", "male"),
  sbp = c(120, 140, 160),
  cholesterol = c(5.0, 6.0, 7.0),
  smoking = c(FALSE, TRUE, FALSE),
  diabetes = c(FALSE, FALSE, TRUE),
  country = c("USA", "GBR", "IND")
)


Calculate WHO 10-Year CVD Risk (Non-Laboratory-Based Model)

Description

Calculates the 10-year risk of cardiovascular disease using the WHO non-laboratory-based model. This model uses BMI instead of cholesterol and does not require diabetes status, making it suitable for resource-limited settings where laboratory testing may not be available.

Usage

calculate_who_risk_nonlab(
  age,
  sex,
  sbp,
  bmi,
  smoking,
  region = NULL,
  country = NULL
)

Arguments

age

Numeric vector. Age in years (valid range: 40-80).

sex

Character vector. Sex: "male" or "female".

sbp

Numeric vector. Systolic blood pressure in mmHg.

bmi

Numeric vector. Body mass index in kg/m².

smoking

Logical vector. Current smoking status (TRUE = current smoker).

region

Character vector. WHO/GBD region name. One of the 21 global regions (see get_regions for valid values). If NULL and country is provided, region will be determined automatically.

country

Character vector. ISO 3166-1 alpha-3 country code.

Details

This model is designed for use in resource-limited settings where laboratory measurements (cholesterol, glucose) may not be readily available. It uses BMI as a proxy for metabolic risk.

Important limitations:

Value

Numeric vector of 10-year CVD risk as a proportion (0-1).

Centering Values

Variables are centered at:

See Also

calculate_who_risk for the laboratory-based model.

Examples

# Single calculation
calculate_who_risk_nonlab(
  age = 55,
  sex = "male",
  sbp = 140,
  bmi = 28,
  smoking = TRUE,
  region = "south_asia"
)

# Using country code
calculate_who_risk_nonlab(
  age = 60,
  sex = "female",
  sbp = 135,
  bmi = 26,
  smoking = FALSE,
  country = "KEN"
)


Map Country Code to Region

Description

Utility function to map ISO 3166-1 alpha-3 country codes to WHO/GBD regions.

Usage

country_to_region(country)

Arguments

country

Character vector of ISO 3166-1 alpha-3 country codes.

Value

Character vector of region names.

Examples

country_to_region(c("USA", "DEU", "JPN"))


Get Country Code to Region Mapping

Description

Returns a named vector mapping ISO 3166-1 alpha-3 country codes to their corresponding WHO/GBD regions.

Usage

get_country_codes(country = NULL)

Arguments

country

Optional character vector of country codes to look up. If NULL (default), returns the complete mapping.

Value

If country is NULL, returns a named character vector where names are country codes and values are region names. If country is provided, returns the corresponding region(s).

Examples

# Get all mappings
head(get_country_codes())

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


Get Available Region Names

Description

Returns a character vector of valid WHO/GBD region names that can be used with the risk calculation functions.

Usage

get_regions()

Value

Character vector of 21 GBD region names.

Examples

get_regions()