This function implements
the Pooled Cohort Risk equations from Goff et al, 2013.
the updated Pooled Cohort Risk equations from Yadlowski et al, 2018
The PREVENT equations from Khan et al, 2023
These equations predict 10-year risk of a first atherosclerotic cardiovascular disease (ASCVD) event, such as a stroke or myocardial infarction. The 2017 American College of Cardiology and American Heart Association blood pressure guideline recommends using 10-year predicted atherosclerotic cardiovascular disease risk to guide the decision to initiate or intensify antihypertensive medication. The guideline recommends using the Pooled Cohort risk prediction equations to predict 10-year atherosclerotic cardiovascular disease risk in clinical practice.
predict_10yr_ascvd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Goff_2013",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_10yr_cvd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_10yr_hf_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_10yr_chd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_10yr_stroke_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_30yr_ascvd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_30yr_cvd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_30yr_hf_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_30yr_chd_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_30yr_stroke_risk(
age_years,
race = NULL,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
statin_meds = NULL,
diabetes,
bmi = NULL,
egfr_mlminm2 = NULL,
acr = NULL,
hba1c = NULL,
sdi = NULL,
equation_version = "Khan_2023",
prevent_type = "base",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
statin_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
predict_5yr_ascvd_risk(
age_years,
race,
sex,
smoke_current,
chol_total_mgdl,
chol_hdl_mgdl,
bp_sys_mmhg,
bp_meds,
diabetes,
equation_version = "Goff_2013",
override_boundary_errors = FALSE,
race_levels = list(black = "black", white = "white"),
sex_levels = list(female = "female", male = "male"),
smoke_current_levels = list(no = "no", yes = "yes"),
bp_meds_levels = list(no = "no", yes = "yes"),
diabetes_levels = list(no = "no", yes = "yes")
)
numeric vector of age values, in years.
character vector of race values. Categories should include
only 'black' or 'white'. If the race variable has additional categories
other than 'black' or 'white', then group all non 'black' values into
the 'white' category. This variable is not required if
equation_version = 'Khan_2023'
character vector of sex values. Categories should include only 'male' or 'female'.
character vector of current smoking habits. Categories should include only 'no' and 'yes'.
total cholesterol, in mg/dL.
HDL-cholesterol, in mg/dL.
systolic blood pressure, in mm Hg.
character vector of blood pressure medication use habits. Categories should include only 'no' and 'yes'. For example, if currently using medication to lower blood pressure, the value should be 'yes'.
character vector of statin medication use habits.
Categories should include only 'no' and 'yes'. For example, if currently
using a statin, the value should be 'yes'. This variable is only
required if equation_version = 'Khan_2023'
character vector of diabetes status. Categories should include only 'no' and 'yes'. For example, if diabetes is present, the value should be 'yes'.
numeric vector of bmi values. Only required if
equation_version = "Khan_2023"
numeric vector of egfr_mlminm2 values. Only required
if equation_version = "Khan_2023"
numeric vector of acr values. Only required if
equation_version = "Khan_2023"
and prevent_type
is "acr"
or
"full"
.
numeric vector of hba1c values. Only required if
equation_version = "Khan_2023"
and prevent_type
is "hba1c"
or
"full"
.
numeric vector of sdi values. Only required if
equation_version = "Khan_2023"
and prevent_type
is "sdi"
or
"full"
.
a character value of length 1. Valid options are
'Goff_2013'
'Yadlowsky_2018'
'Khan_2023'
If 'Goff_2013' (the default option) is selected, the original Pooled Cohort risk equations are used (See Goff et al., 2013).
If 'Yadlowsky_2018' is selected, the equations recommended by Yadlowsky et al., 2018 are used.
If 'Khan_2023' is selected, the equations recommended by Khan et al., 2023 are used.
a character value of length 1. Only required if
equation_version = "Khan_2023"
. Valid options are:
'base': computes the base PREVENT equation (default).
'acr': computes the PREVENT equation using albumin-to-creatinine ratio.
'hba1c': computes the PREVENT equation using hemoglobin A1c.
'sdi': computes the PREVENT equation using social deprivation index.
'full': computes the PREVENT equation using all novel predictors.
a logical vector of length 1. If FALSE
(the default), then predict_10yr_ascvd_risk()
will throw hard errors
if you give it continuous input values that are outside the bounaries
of what the Pooled Cohort risk calculator recommends. If TRUE
, errors
will not be thrown. Please use with caution.
a list of length 2 with names 'black' and 'white'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
race
belong to the 'black' and 'white' categories. For example,
race
may contain values of 'african_american', 'white', and
'hispanic'. In this case, race_levels
should be
list(white = c('white', 'hispanic'), black = 'african_american')
.
a list of length 2 with names 'female' and 'male'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
sex
belong to the 'female' and 'male' categories (see examples).
a list of length 2 with names 'no' and 'yes'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
smoke_current
belong to the 'no' and 'yes' categories (see examples).
a list of length 2 with names 'no' and 'yes'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
bp_meds
belong to the 'no' and 'yes' categories (see examples).
a list of length 2 with names 'no' and 'yes'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
statin_meds
belong to the 'no' and 'yes' categories (see examples).
a list of length 2 with names 'no' and 'yes'.
values in the list should be character vectors of any length, and
values in the character vectors should indicate what values in
diabetes
belong to the 'no' and 'yes' categories (see examples).
a numeric vector with 10-year predicted risk values for ASCVD events.
The 2017 American College of Cardiology (ACC) / American Heart Association (AHA) blood pressure (BP) guideline recommends using 10-year predicted atherosclerotic cardiovascular disease (ASCVD) risk to guide the decision to initiate antihypertensive medication. The guideline recommends using the Pooled Cohort risk prediction equations (Goff et al, 2013) to predict 10-year ASCVD risk. The Pooled Cohort risk prediction equations have been externally validated in several studies and, in some populations, are known to overestimate 10-year ASCVD risk. In 2018, an updated set of equations were developed by Yadlowsky et al. using more contemporary data and statistical methods.
Goff DC, Lloyd-Jones DM, Bennett G, Coady S, D’agostino RB, Gibbons R, Greenland P, Lackland DT, Levy D, O’donnell CJ, Robinson JG. 2013 ACC/AHA guideline on the assessment of cardiovascular risk: a report of the American College of Cardiology/American Heart Association Task Force on Practice Guidelines. Journal of the American College of Cardiology. 2014 Jul 1;63(25 Part B):2935-59. DOI: 10.1016/j.jacc.2014.03.006
Yadlowsky S, Hayward RA, Sussman JB, McClelland RL, Min YI, Basu S. Clinical implications of revised pooled cohort equations for estimating atherosclerotic cardiovascular disease risk. Annals of internal medicine. 2018 Jul 3;169(1):20-9. DOI: 10.7326/M17-3011
Khan SS, Coresh J, Pencina MJ, Ndumele CE, Rangaswami J, Chow SL, Palaniappan LP, Sperling LS, Virani SS, Ho JE, Neeland IJ, Tuttle KR, Rajgopal Singh R, Elkind MSV, Lloyd-Jones DM; American Heart Association. Novel Prediction Equations for Absolute Risk Assessment of Total Cardiovascular Disease Incorporating Cardiovascular-Kidney-Metabolic Health: A Scientific Statement From the American Heart Association. Circulation. 2023 Dec 12;148(24):1982-2004. PMID: 37947094.
# example taken from Goff et al, 2013
sex = c('female', 'female', 'male', 'male')
race = c('black', 'white', 'black', 'white')
# 55 years of age
age_years = rep(55, times = 4)
# total cholesterol 213 mg/dL
chol_total_mgdl = rep(213, times = 4)
# HDL cholesterol 50 mg/dL
chol_hdl_mgdl = rep(50, times = 4)
# untreated systolic BP 120 mm Hg
bp_sys_mmhg = rep(120, times = 4)
bp_meds = rep('no', times = 4)
# nonsmoker
smoke_current = rep('no', times = 4)
# without diabetes
diabetes = rep('no', times = 4)
pcr_probs <- predict_10yr_ascvd_risk(
sex = sex,
race = race,
age_years = age_years,
chol_total_mgdl = chol_total_mgdl,
chol_hdl_mgdl = chol_hdl_mgdl,
bp_sys_mmhg = bp_sys_mmhg,
bp_meds = bp_meds,
smoke_current = smoke_current,
diabetes = diabetes
)
# note that this isn't an exact match of Table 4 in
# Goff et al supplement - this is because the table's
# coefficients are rounded to a lower decimal count than
# the coefficients used in predict_10yr_ascvd_risk()
round(100 * pcr_probs, 1)
#> [1] 3.0 2.1 6.1 5.4
# using a data frame with more granular categories and names
some_data <- data.frame(
gender = c('woman', 'woman', 'man', 'male'),
race_3cats = c('AA', 'white', 'AA', 'other'),
# 55 years of age
age_years = rep(55, times = 4),
# total cholesterol 213 mg/dL
chol_total_mgdl = rep(213, times = 4),
# HDL cholesterol 50 mg/dL
chol_hdl_mgdl = rep(50, times = 4),
# untreated systolic BP 120 mm Hg
bp_sys_mmhg = rep(120, times = 4),
bp_meds = rep('No', times = 4),
# nonsmoker
smoke_current = c("no", "former", "no", "never"),
# without diabetes
diabetes = rep('No', times = 4),
stringsAsFactors = FALSE
)
pcr_probs <- with(
some_data,
predict_10yr_ascvd_risk(
sex = gender,
sex_levels = list(female = 'woman', male = c('man', 'male')),
race = race_3cats,
age_years = age_years,
chol_total_mgdl = chol_total_mgdl,
chol_hdl_mgdl = chol_hdl_mgdl,
bp_sys_mmhg = bp_sys_mmhg,
bp_meds = bp_meds,
smoke_current = smoke_current,
diabetes = diabetes,
race_levels = list(black = 'AA', white = c('white', 'other')),
smoke_current_levels = list(no = c('no', 'former', 'never'), yes = 'Yes'),
bp_meds_levels = list(no = 'No', yes = 'Yes'),
diabetes_levels = list(no = 'No', yes = 'Yes')
)
)