| Title: | Survival Prediction for Severe Limb Ischaemia (BASIL Model) |
|---|---|
| Description: | Predicts survival for patients with severe limb ischaemia using the prognostic model developed from the Bypass versus Angioplasty in Severe Ischaemia of the Leg (BASIL) trial (Bradbury and others (2010) <doi:10.1016/j.jvs.2010.01.077>). The model is an accelerated failure time Weibull regression. The package is intended for research and audit; it is not a substitute for clinical judgement and its predictions should not be used as the sole basis for clinical decisions. |
| Authors: | Christos Longros [aut, cre] (ORCID: <https://orcid.org/0009-0001-2717-0857>), Nikolaos Papatheodorou [aut] (ORCID: <https://orcid.org/0000-0002-7156-9443>) |
| Maintainer: | Christos Longros <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.1.0 |
| Built: | 2026-07-16 17:01:55 UTC |
| Source: | https://github.com/cran/basil |
Predicts the probability of survival at one or more time points for a patient with severe limb ischaemia, using the BASIL trial survival prediction model (Bradbury and others, 2010). The model is an accelerated failure time Weibull regression; coefficients are those of the official BASIL prognostic spreadsheet.
basil( age, tissue_loss, bmi, creatinine, bollinger, smoking, mi_angina, stroke_tia, ankle_pressures_n, max_ankle_pressure, times = c(0.5, 1, 2), shrunk = TRUE )basil( age, tissue_loss, bmi, creatinine, bollinger, smoking, mi_angina, stroke_tia, ankle_pressures_n, max_ankle_pressure, times = c(0.5, 1, 2), shrunk = TRUE )
age |
Age in years (clamped to 40-95). |
tissue_loss |
Logical; tissue loss present. |
bmi |
Body mass index category: |
creatinine |
Serum creatinine category: |
bollinger |
Below-knee Bollinger angiogram score category: |
smoking |
Smoking status: |
mi_angina |
Logical; history of myocardial infarction or angina. |
stroke_tia |
Logical; history of stroke or transient ischaemic attack. |
ankle_pressures_n |
Number of below-knee ankle pressures measurable (0, 1, 2 or 3). |
max_ankle_pressure |
Maximum ankle pressure obtained, mmHg (clamped to 0-200). |
times |
Numeric vector of times in years at which to return survival (default 0.5, 1 and 2). |
shrunk |
Logical; if |
Two composite variables are entered as categories rather than raw values,
because their derivations are not fully specified in the spreadsheet:
creatinine as "low", "medium", "high" or
"missing", and bollinger (the below-knee Bollinger angiogram
score) as "<5", ">=5" or "unknown". Age is clamped to
40-95 and maximum ankle pressure to 0-200, as in the deployed model.
A named numeric vector of survival probabilities at times,
with the linear predictor attached as attribute "lp".
# The BASIL spreadsheet's worked example basil(age = 80, tissue_loss = TRUE, bmi = "30+", creatinine = "medium", bollinger = "<5", smoking = "ex", mi_angina = TRUE, stroke_tia = TRUE, ankle_pressures_n = 0, max_ankle_pressure = 0)# The BASIL spreadsheet's worked example basil(age = 80, tissue_loss = TRUE, bmi = "30+", creatinine = "medium", bollinger = "<5", smoking = "ex", mi_angina = TRUE, stroke_tia = TRUE, ankle_pressures_n = 0, max_ankle_pressure = 0)
Maps a raw serum creatinine value to the category used by the
creatinine argument of basil. The cut points are those of
the BASIL model (Bradbury and others, 2010): below 88, 88-115, and above 115
mol/L for low, medium and high, respectively.
basil_creatinine_category(x, units = c("umol", "mgdl"))basil_creatinine_category(x, units = c("umol", "mgdl"))
x |
Numeric vector of serum creatinine values. |
units |
Units of |
A character vector of "low", "medium", "high" or
"missing", suitable for the creatinine argument of
basil.
basil_creatinine_category(c(70, 100, 130, NA)) basil_creatinine_category(1.5, units = "mgdl") # 1.5 mg/dL -> 132.6 umol/L -> "high"basil_creatinine_category(c(70, 100, 130, NA)) basil_creatinine_category(1.5, units = "mgdl") # 1.5 mg/dL -> 132.6 umol/L -> "high"
Applies basil to each row of a data frame, appending the linear
predictor and the predicted survival at each of times as columns.
basil_risk(data, times = c(0.5, 1, 2), shrunk = TRUE)basil_risk(data, times = c(0.5, 1, 2), shrunk = TRUE)
data |
A data frame with one row per patient and columns |
times |
Numeric vector of times in years (default 0.5, 1 and 2). |
shrunk |
Logical; passed to |
data with an lp column and one surv_t<time>
column for each entry in times.
patients <- data.frame( age = c(80, 65), tissue_loss = c(TRUE, FALSE), bmi = c("30+", "20-25"), creatinine = c("medium", "low"), bollinger = c("<5", ">=5"), smoking = c("ex", "non"), mi_angina = c(TRUE, FALSE), stroke_tia = c(TRUE, FALSE), ankle_pressures_n = c(0, 2), max_ankle_pressure = c(0, 80)) basil_risk(patients)patients <- data.frame( age = c(80, 65), tissue_loss = c(TRUE, FALSE), bmi = c("30+", "20-25"), creatinine = c("medium", "low"), bollinger = c("<5", ">=5"), smoking = c("ex", "non"), mi_angina = c(TRUE, FALSE), stroke_tia = c(TRUE, FALSE), ankle_pressures_n = c(0, 2), max_ankle_pressure = c(0, 80)) basil_risk(patients)