Package {possum}


Type: Package
Title: Surgical Risk Prediction with the POSSUM Score Family
Version: 0.1.0
Description: Computes the Physiological and Operative Severity Score for the enUmeration of Mortality and morbidity (POSSUM), its Portsmouth modification (P-POSSUM), and the colorectal (CR-POSSUM), vascular (V-POSSUM) and ruptured aortic aneurysm (RAAA-POSSUM) variants, risk-adjustment systems used in surgical audit. Functions map physiological and operative variables to their component scores and return the predicted probabilities of morbidity and mortality from the published logistic equations. The coefficients follow Copeland and others (1991) <doi:10.1002/bjs.1800780327> for POSSUM, Prytherch and others (1998) <doi:10.1046/j.1365-2168.1998.00840.x> for P-POSSUM, Tekkis and others (2004) <doi:10.1002/bjs.4430> for the colorectal variant (CR-POSSUM), and Neary and others (2003) <doi:10.1002/bjs.4041> for the vascular variant (V-POSSUM). The package is intended for audit and research; it is not a validated medical device and must not be used as the sole basis for clinical decisions.
License: MIT + file LICENSE
Encoding: UTF-8
URL: https://github.com/chrislongros/possum
BugReports: https://github.com/chrislongros/possum/issues
Imports: stats
Suggests: tinytest
Config/roxygen2/version: 8.0.0
NeedsCompilation: no
Packaged: 2026-07-18 10:23:31 UTC; chris
Author: Christos Longros ORCID iD [aut, cre], Daniel Enrique Chourio Barboza [aut]
Maintainer: Christos Longros <chris.longros@gmail.com>
Repository: CRAN
Date/Publication: 2026-07-28 14:30:07 UTC

CR-POSSUM predicted mortality

Description

Applies the colorectal POSSUM mortality equation (Tekkis and others, 2004):

\mathrm{logit}(mortality) = -9.167 + 0.338 \times PS + 0.308 \times OS

Usage

cr_possum(physiological_score, operative_score)

Arguments

physiological_score

CR-POSSUM physiological score (6-23), e.g. from cr_possum_physiology.

operative_score

CR-POSSUM operative score (4-22), e.g. from cr_possum_operative.

Value

Predicted probability of mortality (0-1).

Examples

cr_possum(physiological_score = 12, operative_score = 8)

CR-POSSUM operative score

Description

Sums the four operative components of CR-POSSUM, all entered as their points. severity 1 (minor) / 3 (moderate) / 4 (major) / 8 (complex major); soiling 1 (none or serous) / 2 (local pus) / 3 (free pus, faeces or blood); cancer_staging 1 (none or Dukes A-B) / 2 (Dukes C) / 3 (Dukes D); urgency 1 (elective) / 3 (urgent) / 8 (emergency).

Usage

cr_possum_operative(severity, soiling, cancer_staging, urgency)

Arguments

severity

CR-POSSUM operative severity points (1, 3, 4 or 8).

soiling, cancer_staging

Points (1, 2 or 3).

urgency

Mode-of-surgery points (1, 3 or 8).

Value

Integer CR-POSSUM operative score (range 4-22).

Examples

cr_possum_operative(severity = 4, soiling = 1, cancer_staging = 2, urgency = 1)

CR-POSSUM physiological score

Description

Sums the six physiological components of the colorectal POSSUM (CR-POSSUM) score. Age, systolic blood pressure, pulse, haemoglobin and urea are scored from raw clinical values; cardiac is entered as its points.

Usage

cr_possum_physiology(age, cardiac, systolic_bp, pulse, hb, urea)

Arguments

age, systolic_bp, pulse, hb, urea

Numeric raw clinical values, all non-negative.

cardiac

CR-POSSUM cardiac-failure points (1, 2 or 3).

Details

Cut-points and weights (Tekkis and others, 2004):

age (years) \le60=1 / 61-80=3 or 4 / \ge81=8
systolic BP (mmHg) 100-170=1 / >170 or 90-99=2 / \le89=3
pulse (/min) 40-100=1 / 101-120=2 / >120 or <40=3
haemoglobin (g/dL) 13-16=1 / 10-12.9 or 16.1-18=2 / <10 or >18=3
urea (mmol/L) \le10=1 / 10.1-15=2 / >15=3
cardiac failure none/mild=1 / moderate=2 / severe=3 (entered as points)

Value

Integer CR-POSSUM physiological score (range 6-23).

Examples

cr_possum_physiology(age = 72, cardiac = 1, systolic_bp = 140, pulse = 88,
                     hb = 12, urea = 8)

P-POSSUM predicted mortality

Description

Applies the Portsmouth (P-POSSUM) mortality equation (Prytherch and others, 1998), which recalibrates the POSSUM mortality prediction:

\mathrm{logit}(mortality) = -9.065 + 0.1692 \times PS + 0.1550 \times OSS

Usage

p_possum(physiological_score, operative_score)

Arguments

physiological_score

POSSUM physiological score (12-88).

operative_score

POSSUM operative severity score (6-48).

Value

Predicted probability of mortality (0-1).

Examples

p_possum(physiological_score = 20, operative_score = 10)

POSSUM predicted morbidity and mortality

Description

Applies the original POSSUM logistic equations (Copeland and others, 1991) to a physiological and operative severity score:

\mathrm{logit}(morbidity) = -5.91 + 0.16 \times PS + 0.19 \times OSS

\mathrm{logit}(mortality) = -7.04 + 0.13 \times PS + 0.16 \times OSS

Usage

possum(physiological_score, operative_score)

Arguments

physiological_score

POSSUM physiological score (12-88), e.g. from possum_physiology.

operative_score

POSSUM operative severity score (6-48), e.g. from possum_operative.

Value

A list with elements morbidity and mortality, the predicted probabilities (0-1).

Examples

possum(physiological_score = 20, operative_score = 10)

POSSUM operative severity score

Description

Sums the six operative components. n_procedures and blood_loss are scored from their raw values; severity, soiling, malignancy and urgency are entered as their POSSUM points.

Usage

possum_operative(
  severity,
  n_procedures,
  blood_loss,
  soiling,
  malignancy,
  urgency
)

Arguments

severity, soiling, malignancy

POSSUM points (1, 2, 4 or 8).

n_procedures

Number of procedures at this operation (at least 1).

blood_loss

Total blood loss in mL (non-negative).

urgency

POSSUM points for the mode of surgery (1, 4 or 8).

Details

Raw cut-points (points 1 / 2 / 4 / 8): number of procedures 1 / - / 2 / >2; blood loss (mL) \le100 / 101-500 / 501-999 / \ge1000. Graded, as points: severity 1 (minor) / 2 (moderate) / 4 (major) / 8 (major+); soiling 1 (none) / 2 (serous) / 4 (local pus) / 8 (free bowel content, pus or blood); malignancy 1 (none) / 2 (primary only) / 4 (nodal metastases) / 8 (distant metastases); urgency 1 (elective) / 4 (emergency, within 24 h) / 8 (emergency, within 2 h).

Value

Integer operative severity score (minimum 6).

Examples

possum_operative(severity = 4, n_procedures = 1, blood_loss = 200,
                 soiling = 1, malignancy = 2, urgency = 1)

POSSUM physiological score

Description

Sums the twelve physiological components of the POSSUM score. The nine objective variables are scored from their raw clinical values; the three graded variables (cardiac, respiratory, ecg) are entered directly as their POSSUM points.

Usage

possum_physiology(
  age,
  systolic_bp,
  pulse,
  gcs,
  hb,
  wbc,
  urea,
  sodium,
  potassium,
  cardiac,
  respiratory,
  ecg
)

Arguments

age, systolic_bp, pulse, gcs, hb, wbc, urea, sodium, potassium

Numeric raw clinical values in the units above. All must be non-negative, and gcs must be 3-15, the range of the scale.

cardiac, respiratory

POSSUM points (1, 2, 4 or 8) for the cardiac and respiratory signs.

ecg

POSSUM points for the ECG (1, 4 or 8).

Details

Cut-points (points 1 / 2 / 4 / 8):

age (years) \le60 / 61-70 / \ge71 / -
systolic BP (mmHg) 110-130 / 100-109 or 131-170 / 90-99 or \ge171 / \le89
pulse (/min) 50-80 / 40-49 or 81-100 / 101-120 / \le39 or \ge121
GCS 15 / 12-14 / 9-11 / \le8
haemoglobin (g/dL) 13-16 / 11.5-12.9 or 16.1-17 / 10-11.4 or 17.1-18 / <10 or >18
WCC (10^9/L) 4-10 / 3.1-3.9 or 10.1-20 / \le3 or \ge20.1 / -
urea (mmol/L) \le7.5 / 7.6-10 / 10.1-15 / \ge15.1
sodium (mmol/L) \ge136 / 131-135 / 126-130 / \le125
potassium (mmol/L) 3.5-5 / 3.2-3.4 or 5.1-5.3 / 2.9-3.1 or 5.4-5.9 / \le2.8 or \ge6

Graded variables, entered as points: cardiac and respiratory take 1, 2, 4 or 8; ecg takes 1 (normal), 4 (atrial fibrillation 60-90/min) or 8 (any other abnormality). Confirm the grading against the original tables before use.

Value

Integer physiological score (minimum 12).

Examples

possum_physiology(age = 65, systolic_bp = 120, pulse = 75, gcs = 15,
                  hb = 13.5, wbc = 8, urea = 6, sodium = 140, potassium = 4.2,
                  cardiac = 1, respiratory = 1, ecg = 1)

POSSUM and P-POSSUM risk for a table of patients

Description

Convenience wrapper that scores a whole cohort in one call, rather than invoking possum_physiology, possum_operative and the risk functions separately. Each row of data is one patient.

Usage

possum_risk(data)

Arguments

data

A data frame (one row per patient) containing the columns required by possum_physiology and possum_operative: age, systolic_bp, pulse, gcs, hb, wbc, urea, sodium, potassium, cardiac, respiratory, ecg, severity, n_procedures, blood_loss, soiling, malignancy and urgency.

Details

Rows are scored independently. A row with a missing or out-of-range value cannot be scored, so its five output columns are returned as NA and the rest of the cohort is scored as normal; a single missing laboratory value no longer aborts the whole call. A warning reports how many rows were left unscored.

Value

data with five columns added: physiological_score, operative_score, possum_morbidity, possum_mortality and p_possum_mortality. Rows that could not be scored carry NA in all five.

Examples

df <- data.frame(
  age = c(45, 82), systolic_bp = c(120, 95), pulse = c(70, 115),
  gcs = c(15, 13), hb = c(14, 9.5), wbc = c(7, 22), urea = c(5, 18),
  sodium = c(140, 128), potassium = c(4.2, 6.1), cardiac = c(1, 4),
  respiratory = c(1, 4), ecg = c(1, 8), severity = c(1, 8),
  n_procedures = c(1, 1), blood_loss = c(50, 1200), soiling = c(1, 8),
  malignancy = c(1, 4), urgency = c(1, 8))
possum_risk(df)

RAAA-POSSUM predicted mortality (ruptured abdominal aortic aneurysm)

Description

Applies a POSSUM mortality equation specific to ruptured abdominal aortic aneurysm surgery, computed from the standard POSSUM physiological and operative severity scores. Two forms are provided:

\mathrm{logit}(mortality) = -2.7569 + 0.0968 \times PS

\mathrm{logit}(mortality) = -4.9795 + 0.0913 \times PS + 0.0958 \times OS

Usage

raaa_possum(
  physiological_score,
  operative_score = NULL,
  model = c("physiology", "full")
)

Arguments

physiological_score

Standard POSSUM physiological score (12-88), e.g. from possum_physiology.

operative_score

Standard POSSUM operative severity score (6-48), e.g. from possum_operative. Required when model = "full", and an error when model = "physiology", which cannot use it.

model

Which equation to use: "physiology" (default, physiology score only) or "full" (physiology plus operative score).

Details

RAAA-POSSUM (Prytherch and others, 2001) reuses the standard POSSUM scores. Both equations are as tabulated by Neary, Heather and Earnshaw (2003).

Value

Predicted probability of mortality (0-1).

Examples

raaa_possum(physiological_score = 30)
raaa_possum(physiological_score = 30, operative_score = 18, model = "full")

V-POSSUM predicted mortality (vascular)

Description

Applies a vascular POSSUM (V-POSSUM) mortality equation, computed from the standard POSSUM physiological and operative severity scores (from possum_physiology and possum_operative). Two forms are provided:

\mathrm{logit}(mortality) = -6.0386 + 0.1539 \times PS

\mathrm{logit}(mortality) = -8.0616 + 0.1552 \times PS + 0.1238 \times OS

Usage

v_possum(
  physiological_score,
  operative_score = NULL,
  model = c("physiology", "full")
)

Arguments

physiological_score

Standard POSSUM physiological score (12-88), e.g. from possum_physiology.

operative_score

Standard POSSUM operative severity score (6-48), e.g. from possum_operative. Required when model = "full", and an error when model = "physiology", which cannot use it.

model

Which equation to use: "physiology" (default, physiology score only) or "full" (physiology plus operative score).

Details

V-POSSUM (Prytherch and others, 2001, for major arterial surgery) reuses the standard POSSUM scores. Both equations are as tabulated by Neary, Heather and Earnshaw (2003). No V-POSSUM morbidity equation has been published.

Value

Predicted probability of mortality (0-1).

Examples

v_possum(physiological_score = 25)
v_possum(physiological_score = 25, operative_score = 15, model = "full")