pobm.obm package

pobm.obm.burden

class pobm.obm.burden.HypoxicBurdenMeasures(begin: numpy.array, end: numpy.array, CT_Threshold: float = 90, CA_Baseline: float = None)[source]

Bases: object

Class that calculates hypoxic burden features from SpO2 time series.

Parameters
  • begin (Numpy array) – Numpy array of indices of beginning of each desaturation event.

  • end (Numpy array) – Numpy array of indices of end of each desaturation event. begin and end should have the same length.

  • CT_Threshold (float, optional) – Percentage of the time spent below the “CT_Threshold” % oxygen saturation level.

  • CA_Baseline (float, optional) – Baseline to compute the CA feature. Default value is mean of the signal.

compute(signal)[source]

Computes all the biomarkers of this category.

Parameters

signal – 1-d array, of shape (N,) where N is the length of the signal

Returns

HypoxicBurdenMeasuresResults class containing the following features:

  • CA: Integral SpO2 below the xx SpO2 level normalized by the total recording time

  • CT: Percentage of the time spent below the xx% oxygen saturation level

  • POD: Percentage of oxygen desaturation events

  • AODmax: The area under the oxygen desaturation event curve, using the maximum SpO2 value as baseline and normalized by the total recording time

  • AOD100: Cumulative area of desaturations under the 100% SpO2 level as baseline and normalized by the total recording time

Example:

from pobm.obm.burden import HypoxicBurdenMeasures

# Initialize the class with the desired parameters
hypoxic_class = HypoxicBurdenMeasures(results_desat.begin, results_desat.end, CT_Threshold=90, CA_Baseline=90)

# Compute the biomarkers
results_hypoxic = hypoxic_class.compute(spo2_signal)
comp_ca(signal)[source]

Compute the cumulative area biomarker

Parameters

signal – 1-d array, of shape (N,) where N is the length of the signal

Returns

CA, the cumulative area (float)

comp_ct(signal)[source]

Compute the cumulative time biomarker

Parameters

signal – 1-d array, of shape (N,) where N is the length of the signal

Returns

CT, the cumulative time (float)

pobm.obm.complex

class pobm.obm.complex.ComplexityMeasures(CTM_Threshold: float = 0.25, DFA_Window: int = 20, M_Sampen: int = 3, R_Sampen: float = 0.2, M_ApEn: int = 2, R_ApEn: float = 0.25)[source]

Bases: object

Class that calculates complexity features from SpO2 time series.

Parameters
  • CTM_Threshold (float, optional) – Radius of Central Tendency Measure.

  • DFA_Window (int, optional) – Length of window to calculate DFA biomarker.

  • M_Sampen (int, optional) – Embedding dimension to compute SampEn.

  • R_Sampen (float, optional) – Tolerance to compute SampEn.

  • M_ApEn (int, optional) – Embedding dimension to compute ApEn.

  • R_ApEn (float, optional) – Tolerance to compute ApEn.

compute(signal) → pobm._ResultsClasses.ComplexityMeasuresResults[source]

Computes all the biomarkers of this category. :param signal: 1-d array, of shape (N,) where N is the length of the signal :return: ComplexityMeasuresResults class containing the following features:

  • ApEn: Approximate Entropy.

  • LZ: Lempel-Ziv complexity.

  • CTM: Central Tendency Measure.

  • SampEn: Sample Entropy.

  • DFA: Detrended Fluctuation Analysis.

Example:

from pobm.obm.complex import ComplexityMeasures

# Initialize the class with the desired parameters
complexity_class = ComplexityMeasures(CTM_Threshold=0.25, DFA_Window=20, M_Sampen=3, R_Sampen=0.2, M_ApEn=2, R_ApEn=0.25)

# Compute the biomarkers
results_complexity = complexity_class.compute(spo2_signal)
comp_apen(signal)[source]

Compute the approximate entropy, according to [1]_ :param signal: 1-d array, of shape (N,) where N is the length of the signal :return: ApEn (float) .. [1] Pincus, S. M. Approximate entropy as a measure of system complexity. Proc. Natl. Acad. Sci. U. S. A. 88, 2297–2301 (1991).

comp_lz(signal, dual_quantization=True)[source]

Compute Lempel-Ziv, according to [2]_ :param signal: 1-d array, of shape (N,) where N is the length of the signal :param dual_quantization: if True, the signal is converted into a binary signal, according to the original algorithm [2]_. If False, the signal is quantized in 4 levels. :return: LZ (float) .. [2] Lempel, A. & Ziv, J. On the Complexity of Finite Sequences. IEEE Trans. Inf. Theory 22, 75–81 (1976).

comp_ctm(signal)[source]

Compute CTM, according to [3]_ :param signal: 1-d array, of shape (N,) where N is the length of the signal :return: CTM (float) .. [3] Cohen, M. E., Hudson, D. L. & Deedwania, P. C. Applying continuous chaotic modeling to cardiac signal analysis. IEEE Eng. Med. Biol. Mag. 15, 97–102 (1996).

comp_sampen(signal)[source]

Compute the sample entropy, according to [4]_ :param signal: 1-d array, of shape (N,) where N is the length of the signal :return: SampEn (float) .. [4] Richman, J. S. & Moorman, J. R. Physiological time-series analysis using approximate entropy and sample entropy. Am J Physiol-Heart C 278, H2039–H2049 (2000).

comp_dfa(signal)[source]

Compute DFA, Detrended Fluctuation Analysis according to [5]_ :param signal: 1-d array, of shape (N,) where N is the length of the signal :return: DFA (float) .. [5] Peng, C. ‐K., Havlin, S., Stanley, H. E. & Goldberger, A. L. Quantification of scaling exponents and crossover phenomena in nonstationary heartbeat time series. Chaos An Interdiscip. J. Nonlinear Sci. 5, 82–87 (1995).

pobm.obm.desat

class pobm.obm.desat.DesaturationsMeasures(ODI_Threshold: int = 3, hard_threshold: int = 90, threshold_method: pobm._ResultsClasses.DesatMethodEnum = <DesatMethodEnum.Relative: 1>, quantile_threshold: float = 0.1, desat_max_length: int = 90, min_dist_meta_event: int = 0, desat_min_length: int = 0)[source]

Bases: object

Class that calculates the desaturation features from SpO2 time series.

Parameters
  • threshold_method (DesatMethodEnum, optional) – Select the threshold method to detect desaturations

  • ODI_Threshold (int, optional) – Threshold to compute Oxygen Desaturation Index. Used only if threshold_method = DesatMethodEnum.Relative

  • hard_threshold (int, optional) – Hard threshold to detect desaturations. Used only if threshold_method = DesatMethodEnum.Hard

  • quantile_threshold (float, optional) – Threshold to detect desaturations. Used only if threshold_method = DesatMethodEnum.Quantile

  • desat_max_length (int, optional) – The maximum length of desaturations.

  • min_dist_meta_event (int, optional) – The maximal distance between 2 desaturations to convert them into a meta desat

compute(signal: numpy.ndarray, begin: numpy.ndarray = None, end: numpy.ndarray = None) → pobm._ResultsClasses.DesaturationsMeasuresResults[source]

Computes all the biomarkers of this category.

Parameters
  • signal – 1-d array, of shape (N,) where N is the length of the signal

  • begin (Numpy array, optional) – Numpy array of indices of beginning of each desaturation event. Default value is None.

  • end (Numpy array, optional) – Numpy array of indices of end of each desaturation event. begin and end should have the same length. Default value is None.

Returns

DesaturationsMeasuresResults class containing the following features:

  • ODI: Oxygen Desaturation Index

  • DL_u: Mean of desaturation length

  • DL_sd: Standard deviation of desaturation length

  • DA100_u: Mean of desaturation area using 100% as baseline.

  • DA100_sd: Standard deviation of desaturation area using 100% as baseline

  • DAmax_u: Mean of desaturation area using max value as baseline.

  • DAmax_sd: Standard deviation of desaturation area using max value as baseline

  • DD100_u: Mean of depth desaturation from 100%.

  • DD100_sd: Standard deviation of depth desaturation from 100%.

  • DDmax_u: Mean of depth desaturation from max value.

  • DDmax_sd: Standard deviation of depth desaturation from max value.

  • DS_u: Mean of the desaturation slope.

  • DS_sd: Standard deviation of the desaturation slope.

  • TD_u: Mean of time between two consecutive desaturation events.

  • TD_sd: Standard deviation of time between 2 consecutive desaturation events.

  • begin: List of indices of beginning of each desaturation event

  • end: List of indices of end of each desaturation event

Example:

from pobm.obm.desat import DesaturationsMeasures
from pobm._ResultsClasses import DesatMethodEnum

# Initialize the class with the desired parameters
desat_class = DesaturationsMeasures(ODI_Threshold=3, threshold_method=DesatMethodEnum.Relative)

# Compute the biomarkers
results_desat = desat_class.compute(spo2_signal)

# Compute the biomarkers with known desaturation locations
results_desat = desat_class.compute(spo2_signal, begin, end)

pobm.obm.general

class pobm.obm.general.OverallGeneralMeasures(ZC_Baseline: float = None, percentile: int = 1, M_Threshold: int = 2, DI_Window: int = 12)[source]

Bases: object

Class that calculates overall general features from SpO2 time series.

Parameters
  • ZC_Baseline (int, optional) – Baseline for calculating number of zero-crossing points.

  • percentile (int, optional) – Percentile to perform. For example, for percentile 1, the argument should be 1

  • M_Threshold (int, optional) – Percentage of the signal M_Threshold % below median oxygen saturation. Typically use 1,2 or 5

  • DI_Window (int, optional) – Length of window to calculate the Delta Index.

compute(signal) → pobm._ResultsClasses.OverallGeneralMeasuresResult[source]

Computes all the biomarkers of this category.

Parameters

signal – 1-d array, of shape (N,) where N is the length of the signal

Returns

OveralGeneralMeasuresResult class containing the following features:

  • AV: Average of the signal.

  • MED: Median of the signal.

  • Min: Minimum value of the signal.

  • SD: Std of the signal.

  • RG: SpO2 range (difference between the max and min value).

  • P: percentile.

  • M: Percentage of the signal x% below median oxygen saturation.

  • ZC: Number of zero-crossing points.

  • DI: Delta Index.

  • K: Kurtosis.

  • SK: Skew.

  • MAD: Mean absolute deviation.

Example:

from pobm.obm.general import OverallGeneralMeasures

# Initialize the class with the desired parameters
statistics_class = OverallGeneralMeasures(ZC_Baseline=90, percentile=1, M_Threshold=2, DI_Window=12)

# Compute the biomarkers
results_statistics = statistics_class.compute(spo2_signal)

pobm.obm.periodicity

class pobm.obm.periodicity.PRSAMeasures(PRSA_Window: int = 10, K_AC: int = 2)[source]

Bases: object

Class that calculates PRSA features from SpO2 time series.

Parameters
  • PRSA_Window (int, optional) – Fragment duration of PRSA.

  • K_AC (int, optional) – Number of values to shift when computing autocorrelation

compute(signal) → pobm._ResultsClasses.PRSAResults[source]

Computes all the biomarkers of this category.

Parameters

signal – 1-d array, of shape (N,) where N is the length of the signal

Returns

PRSAResults class containing the following features:

  • PRSAc: PRSA capacity.

  • PRSAad: PRSA amplitude difference.

  • PRSAos: PRSA overall slope.

  • PRSAsb: PRSA slope before the anchor point.

  • PRSAsa: PRSA slope after the anchor point.

  • AC: Autocorrelation.

Example:

from pobm.obm.periodicity import PRSAMeasures

# Initialize the class with the desired parameters
prsa_class = PRSAMeasures(PRSA_Window=10, K_AC=2)

# Compute the biomarkers
results_PRSA = prsa_class.compute(spo2_signal)
class pobm.obm.periodicity.PSDMeasures(frequency_low_threshold: float = 0.014, frequency_high_threshold: float = 0.033)[source]

Bases: object

Class that calculates PSD features from SpO2 time series.

Parameters
  • frequency_low_threshold (float, optional) – Low threshold for the PSD_band biomarker.

  • frequency_high_threshold (float, optional) – High threshold for the PSD_band biomarker.

compute(signal) → pobm._ResultsClasses.PSDResults[source]

Computes all the biomarkers of this category.

Parameters

signal – The SpO2 signal, of shape (N,)

Returns

PSDResults class containing the following features:

  • PSD_total: The amplitude of the spectral signal.

  • PSD_band: The amplitude of the signal multiplied by a band-pass filter in the desired band.

  • PSD_ratio: The ratio between PSD_total and PSD_band.

  • PDS_peak: The max value of the FFT into the desired band.

Example:

from pobm.obm.periodicity import PSDMeasures

# Initialize the class with the desired parameters
psd_class = PSDMeasures()

# Compute the biomarkers
results_PSD = psd_class.compute(spo2_signal)

Module contents