Implementation of the Phoenix and Phoenix-8 Pediatric Sepsis Criteria
Project description
phoenix: Phoenix Sepsis and Phoenix-8 Sepsis Criteria
Implementation of the Phoenix and Phoenix-8 Sepsis Criteria as described in:
-
"Development and Validation of the Phoenix Criteria for Pediatric Sepsis and Septic Shock" by Sanchez-Pinto*, Bennett*, DeWitt**, Russell** et al. (2024)
- * Drs Sanchez-Pinto and Bennett contributed equally; ** Dr DeWitt and Mr Russell contributed equally.
-
"International Consensus Criteria for Pediatric Sepsis and Septic Shock" by Schlapbach, Watson, Sorce, et al. (2024).
Cite the package by citing the application note:
Peter E DeWitt, Seth Russell, Margaret N Rebull, L Nelson Sanchez-Pinto, Tellen
D Bennett, phoenix: an R package and Python module for calculating the Phoenix
pediatric sepsis score and criteria, JAMIA Open, Volume 7, Issue 3, October
2024, ooae066, https://doi.org/10.1093/jamiaopen/ooae066
Phoenix Criteria
A patient is consider septic if they have a suspected (or proven) infection with at total Phoenix score of at least two points. The Phoenix score is the sum of the scores from four organ dysfunction scores:
- Respiratory,
- Cardiovascular,
- Coagulation, and
- Neurologic.
Septic shock is defined as sepsis with at least one cardiovascular point.
In addition to the Phoenix criteria there is an extended criteria intended for research, Phoenix-8, which includes the four organ systems above along with
- Endocrine,
- Immunologic,
- Renal, and
- Hepatic.
Phoenix Rubric
Organ System | 0 Points | 1 Point | 2 Points | 3 Points |
---|---|---|---|---|
Respiratory (0-3 points) | ||||
Any respiratory support | IMVa | IMV | ||
PaO2:FiO2 | ≥ 400 | < 400 | < 200 | < 100 |
SpO2:FiO2b | ≥ 292 | < 292 | < 220 | < 148 |
Cardiovascular (0-6 points; sum of medications, Lactate, and MAP) | ||||
Systemic Vasoactive Medicationsc | No medications | 1 medication | 2 or more medications | |
Lactated (mmol/L) | < 5 | 5 ⋚ Lactate < 11 | ≥ 11 | |
Agee (months) adjusted MAPf (mmHg) | ||||
0 ≤ Age < 1 | ≥ 31 | 17 ≤ MAP < 31 | < 17 | |
1 ≤ Age < 12 | ≥ 39 | 25 ≤ MAP < 39 | < 25 | |
12 ≤ Age < 24 | ≥ 44 | 31 ≤ MAP < 44 | < 31 | |
24 ≤ Age < 60 | ≥ 45 | 32 ≤ MAP < 45 | < 32 | |
60 ≤ Age < 144 | ≥ 49 | 36 ≤ MAP < 49 | < 36 | |
144 ≤ Age < 216 | ≥ 52 | 38 ≤ MAP < 52 | < 38 | |
Coagulationg (0-2 points; 1 for each lab; max of 2 points) | ||||
Platelets (1000/μL) | ≥ 100 | < 100 | ||
INR | ≤ 1.3 | > 1.3 | ||
D-Dimer (mg/L FEU) | ≤ 2 | > 2 | ||
Fibrinogen (mg/dL) | ≥ 100 | < 100 | ||
Neurologich (0-2 points) | ||||
GCSi ≥ 11 | GCS ≤ 10 | Bilaterally fixed pupils | ||
Endocrine (0-1 point) | ||||
Blood Glucose (mg/dL) | 50 ≤ Blood Glucose ≤ 150 | < 50; or > 150 | ||
Immunologic (0-1 point; point from ANC and/or ALC) | ||||
ANC (cells/mm3) | ≥ 500 | < 500 | ||
ALC (cells/mm3) | ≥ 1000 | < 1000 | ||
Renal (0-1 point) | ||||
Agee (months) adjusted Creatinine (mg/dL) | ||||
0 ≤ Age < 1 | < 0.8 | ≥ 0.8 | ||
1 ≤ Age < 12 | < 0.3 | ≥ 0.3 | ||
12 ≤ Age < 24 | < 0.4 | ≥ 0.4 | ||
24 ≤ Age < 60 | < 0.6 | ≥ 0.6 | ||
60 ≤ Age < 144 | < 0.7 | ≥ 0.7 | ||
144 ≤ Age < 216 | < 1.0 | ≥ 1.0 | ||
Hepatic (0-1 point; point from total bilirubin and/or ALT) | ||||
Total Bilirubin (mg/dL) | < 4 | ≥ 4 | ||
ALT (IU/L) | ≤ 102 | > 102 |
bSpO2:FiO2 is only valid when SpO2 ≤ 97.
cVasoactive medications: any systemic dose of dobutamine, dopamine, epinephrine, milrinone, norepinephrine, and/or vasopressin.
dLactate can be arterial or venous. Reference range 0.5 - 2.2 mmol/L
eAge: measured in months and is not adjusted for prematurity.
fMAP - Use measured mean arterial pressure preferentially (invasive arterial if available, or non-invasive oscillometric), alternatively use the calculation diastolic + (systolic - diastolic) / 3
gCoagulation variable reference ranges: platelets, 150-450 103/μL; D-dimer, < 0.5 mg/L FEU; fibrinogen, 180-410 mg/dL. International normalized ratio reference range is based on local reference prothrombin time.
hNeurologic dysfunction scoring was pragmatically validated in both sedated and on sedated patients and those with and without IMV.
iGCS measures level of consciousness based on verbal, eye, and motor response. Values are integers from 3 to 15 with higher scores indicating better neurologic function.
Software
- Python module
- R package:
- Example SQL queries
Example use of the Python Module
import numpy as np
import pandas as pd
import importlib.resources
import phoenix as phx
Example Data set
There is an example data set included in the package in a file called
sepsis.csv
. Load that file to use in the following examples.
# read in the example data set
path = importlib.resources.files('phoenix')
sepsis = pd.read_csv(path.joinpath('data').joinpath('sepsis.csv'))
print(sepsis.head())
## pid age fio2 pao2 spo2 vent gcs_total pupil platelets inr d_dimer ... dopamine epinephrine milrinone norepinephrine vasopressin glucose anc alc creatinine bilirubin alt
## 0 1 0.06 0.75 NaN 99.0 1 NaN NaN 199.0 1.46 NaN ... 1 1 1 0 0 NaN NaN NaN 1.03 NaN 36.0
## 1 2 201.70 0.75 75.3 95.0 1 5.0 both-reactive 243.0 1.18 2.45 ... 1 0 0 1 0 110.0 14.220 2.220 0.51 0.2 32.0
## 2 3 20.80 1.00 49.5 NaN 1 15.0 both-reactive 49.0 1.60 NaN ... 1 0 0 0 0 93.0 2.210 0.190 0.33 0.8 182.0
## 3 4 192.50 NaN NaN NaN 0 14.0 NaN NaN 1.30 2.82 ... 0 0 0 0 0 110.0 3.184 0.645 0.31 8.5 21.0
## 4 5 214.40 NaN 38.7 95.0 0 NaN NaN 393.0 NaN NaN ... 0 0 0 0 0 NaN NaN NaN 0.52 NaN NaN
##
## [5 rows x 27 columns]
Organ Dysfunction Scoring
There is one function for each of the eight component organ dysfunction scores. Each of these functions return a numpy array of integers.
Respiratory Dysfunction Scoring
resp = phx.phoenix_respiratory(
pf_ratio = sepsis["pao2"] / sepsis["fio2"],
sf_ratio = np.where(sepsis["spo2"] <= 97, sepsis["spo2"] / sepsis["fio2"], np.nan),
imv = sepsis["vent"],
other_respiratory_support = (sepsis["fio2"] > 0.21).astype(int).to_numpy()
)
print(type(resp))
## <class 'numpy.ndarray'>
print(resp)
## [0 3 3 0 0 3 3 0 3 3 3 1 0 2 3 0 2 3 2 0]
Cardiovascular Dysfunction Scoring
card = phx.phoenix_cardiovascular(
vasoactives = sepsis["dobutamine"] + sepsis["dopamine"] + sepsis["epinephrine"] + sepsis["milrinone"] + sepsis["norepinephrine"] + sepsis["vasopressin"],
lactate = sepsis["lactate"],
age = sepsis["age"],
map = sepsis["dbp"] + (sepsis["sbp"] - sepsis["dbp"]) / 3
)
print(type(card))
## <class 'numpy.ndarray'>
print(card)
## [2 2 1 0 0 1 4 0 3 0 3 0 0 2 3 2 2 2 2 1]
Coagulation Dysfunction Scoring
coag = phx.phoenix_coagulation(
platelets = sepsis['platelets'],
inr = sepsis['inr'],
d_dimer = sepsis['d_dimer'],
fibrinogen = sepsis['fibrinogen']
)
print(type(coag))
## <class 'numpy.ndarray'>
print(coag)
## [1 1 2 1 0 2 2 1 1 0 1 0 0 1 2 1 1 2 0 1]
Neurologic Dysfunction Scoring
neuro = phx.phoenix_neurologic(
gcs = sepsis["gcs_total"],
fixed_pupils = (sepsis["pupil"] == "both-fixed").astype(int)
)
print(type(neuro))
## <class 'numpy.ndarray'>
print(neuro)
## [0 1 0 0 0 1 0 0 1 1 2 0 0 0 0 0 0 0 0 0]
Endocrine Dysfunction Scoring
endo = phx.phoenix_endocrine(sepsis["glucose"])
print(type(endo))
## <class 'numpy.ndarray'>
print(endo)
## [0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1]
Immunologic Dysfunction Scoring
immu = phx.phoenix_immunologic(sepsis["anc"], sepsis["alc"])
print(type(immu))
## <class 'numpy.ndarray'>
print(immu)
## [0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 1 1 0 1 1]
Renal Dysfunction Scoring
renal = phx.phoenix_renal(sepsis["creatinine"], sepsis["age"])
print(type(renal))
## <class 'numpy.ndarray'>
print(renal)
## [1 0 0 0 0 1 1 0 1 0 1 0 0 0 1 0 0 1 1 0]
Hepatic Dysfunction Scoring
hepatic = phx.phoenix_hepatic(sepsis["bilirubin"], sepsis["alt"])
print(type(hepatic))
## <class 'numpy.ndarray'>
print(hepatic)
## [0 0 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0]
Phoenix Scoring
The Phoenix score is the sum of the respiratory, cardiovascular, coagulation, and neurologic scores. Sepsis is defined as a total score of at least two points and septic shock is defined as sepsis with at least one cardiovascular point.
phoenix = phx.phoenix(
pf_ratio = sepsis["pao2"] / sepsis["fio2"],
sf_ratio = sepsis["spo2"] / sepsis["fio2"],
imv = sepsis["vent"],
other_respiratory_support = (sepsis["fio2"] > 0.21).astype(int).to_numpy(),
vasoactives = sepsis["dobutamine"] + sepsis["dopamine"] + sepsis["epinephrine"] + sepsis["milrinone"] + sepsis["norepinephrine"] + sepsis["vasopressin"],
lactate = sepsis["lactate"],
age = sepsis["age"],
map = sepsis["dbp"] + (sepsis["sbp"] - sepsis["dbp"]) / 3,
platelets = sepsis['platelets'],
inr = sepsis['inr'],
d_dimer = sepsis['d_dimer'],
fibrinogen = sepsis['fibrinogen'],
gcs = sepsis["gcs_total"],
fixed_pupils = (sepsis["pupil"] == "both-fixed").astype(int))
print(phoenix.info())
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 20 entries, 0 to 19
## Data columns (total 7 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 phoenix_respiratory_score 20 non-null int64
## 1 phoenix_cardiovascular_score 20 non-null int64
## 2 phoenix_coagulation_score 20 non-null int64
## 3 phoenix_neurologic_score 20 non-null int64
## 4 phoenix_sepsis_score 20 non-null int64
## 5 phoenix_sepsis 20 non-null int64
## 6 phoenix_septic_shock 20 non-null int64
## dtypes: int64(7)
## memory usage: 1.2 KB
## None
print(phoenix.head())
## phoenix_respiratory_score phoenix_cardiovascular_score phoenix_coagulation_score phoenix_neurologic_score phoenix_sepsis_score phoenix_sepsis phoenix_septic_shock
## 0 3 2 1 0 6 1 1
## 1 3 2 1 1 7 1 1
## 2 3 1 2 0 6 1 1
## 3 0 0 1 0 1 0 0
## 4 0 0 0 0 0 0 0
Phoenix-8 Scoring
Phoenix-8 is an extended score using all eight organ dysfunction scores.
phoenix8_scores = phx.phoenix8(
pf_ratio = sepsis["pao2"] / sepsis["fio2"],
sf_ratio = np.where(sepsis["spo2"] <= 97, sepsis["spo2"] / sepsis["fio2"], np.nan),
imv = sepsis["vent"],
other_respiratory_support = (sepsis["fio2"] > 0.21).astype(int).to_numpy(),
vasoactives = sepsis["dobutamine"] + sepsis["dopamine"] + sepsis["epinephrine"] + sepsis["milrinone"] + sepsis["norepinephrine"] + sepsis["vasopressin"],
lactate = sepsis["lactate"],
map = sepsis["dbp"] + (sepsis["sbp"] - sepsis["dbp"]) / 3,
platelets = sepsis['platelets'],
inr = sepsis['inr'],
d_dimer = sepsis['d_dimer'],
fibrinogen = sepsis['fibrinogen'],
gcs = sepsis["gcs_total"],
fixed_pupils = (sepsis["pupil"] == "both-fixed").astype(int),
glucose = sepsis["glucose"],
anc = sepsis["anc"],
alc = sepsis["alc"],
creatinine = sepsis["creatinine"],
bilirubin = sepsis["bilirubin"],
alt = sepsis["alt"],
age = sepsis["age"])
print(phoenix8_scores.info())
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 20 entries, 0 to 19
## Data columns (total 12 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 phoenix_respiratory_score 20 non-null int64
## 1 phoenix_cardiovascular_score 20 non-null int64
## 2 phoenix_coagulation_score 20 non-null int64
## 3 phoenix_neurologic_score 20 non-null int64
## 4 phoenix_sepsis_score 20 non-null int64
## 5 phoenix_sepsis 20 non-null int64
## 6 phoenix_septic_shock 20 non-null int64
## 7 phoenix_endocrine_score 20 non-null int64
## 8 phoenix_immunologic_score 20 non-null int64
## 9 phoenix_renal_score 20 non-null int64
## 10 phoenix_hepatic_score 20 non-null int64
## 11 phoenix8_score 20 non-null int64
## dtypes: int64(12)
## memory usage: 2.0 KB
## None
print(phoenix8_scores.head())
## phoenix_respiratory_score phoenix_cardiovascular_score phoenix_coagulation_score phoenix_neurologic_score ... phoenix_immunologic_score phoenix_renal_score phoenix_hepatic_score phoenix8_score
## 0 0 2 1 0 ... 0 1 0 4
## 1 3 2 1 1 ... 1 0 0 8
## 2 3 1 2 0 ... 1 0 1 8
## 3 0 0 1 0 ... 1 0 1 3
## 4 0 0 0 0 ... 0 0 0 0
##
## [5 rows x 12 columns]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file phoenix_sepsis-1.1.1.tar.gz
.
File metadata
- Download URL: phoenix_sepsis-1.1.1.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41f231ce95daa6890989db19b7568222af30d735b169407f75df3345ca535034 |
|
MD5 | fb514f64df6adaad14b9df2ed5f83038 |
|
BLAKE2b-256 | 68af8347957d273c5eb92bbfd17ee1f7c1714396adce63a78d12fc765ab1fb1b |
File details
Details for the file phoenix_sepsis-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: phoenix_sepsis-1.1.1-py3-none-any.whl
- Upload date:
- Size: 11.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50120a0ea45e1c7e189876466a43cb4f228a0d66894b6d63501320c1fa218bec |
|
MD5 | 83314c98c772c4097e806923cf7ab1b8 |
|
BLAKE2b-256 | 0de819afae780d3f19736ae187901aa3225ed7e02964cf012e08ae57a16c93a8 |