Skip to contents

Introduction

The clinmon function in ClinicoPath provides comprehensive analysis of continuous hemodynamic monitoring data. This tool calculates clinically relevant indices from physiological time series, enabling automated assessment of cerebrovascular reactivity, autoregulation, and cardiovascular function in critical care settings.

Clinical Motivation

Continuous hemodynamic monitoring is essential in modern critical care for:

  • Cerebrovascular Monitoring: Assessment of pressure reactivity (PRx), autoregulation indices
  • Cardiac Function: Estimation of cardiac output and cardiovascular resistance
  • Neurointensive Care: Optimal cerebral perfusion pressure (CPPopt) determination
  • Research Applications: Quantitative analysis of physiological relationships
  • Quality Control: Automated processing of large monitoring datasets
  • Real-time Analysis: Continuous calculation of clinically relevant indices

This function integrates with the specialized clintools package to provide state-of-the-art analysis methods developed for clinical research.

Available Hemodynamic Indices

Pressure Reactivity Indices

  • PRx: Pressure reactivity index (correlation between ABP and ICP)
  • CPPopt: Optimal cerebral perfusion pressure

Cerebrovascular Flow Indices

  • Mx: Mean flow index (correlation between ABP/CPP and MCAv)
  • Sx: Systolic flow index
  • Dx: Diastolic flow index
  • CVRi: Cardiovascular resistance index

Pulsatility Indices

  • PI: Gosling index of pulsatility
  • RI: Pourcelot’s resistive index
  • PWA: Pulse wave amplitude

Cardiac Indices

  • COest: Estimated cardiac output

Package Setup

## Warning: replacing previous import 'dplyr::as_data_frame' by
## 'igraph::as_data_frame' when loading 'ClinicoPath'
## Warning: replacing previous import 'DiagrammeR::count_automorphisms' by
## 'igraph::count_automorphisms' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::groups' by 'igraph::groups' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'DiagrammeR::get_edge_ids' by
## 'igraph::get_edge_ids' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::union' by 'igraph::union' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::select' by 'jmvcore::select' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::union' by 'lubridate::union' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::%--%' by 'lubridate::%--%' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tnr' by 'mlr3measures::tnr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::precision' by
## 'mlr3measures::precision' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tn' by 'mlr3measures::tn' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fnr' by 'mlr3measures::fnr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tp' by 'mlr3measures::tp' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::npv' by 'mlr3measures::npv' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::ppv' by 'mlr3measures::ppv' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::auc' by 'mlr3measures::auc' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tpr' by 'mlr3measures::tpr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fn' by 'mlr3measures::fn' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fp' by 'mlr3measures::fp' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fpr' by 'mlr3measures::fpr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::recall' by
## 'mlr3measures::recall' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::specificity' by
## 'mlr3measures::specificity' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::sensitivity' by
## 'mlr3measures::sensitivity' when loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::as_data_frame' by
## 'tibble::as_data_frame' when loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::crossing' by 'tidyr::crossing' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'magrittr::extract' by 'tidyr::extract' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::sensitivity' by
## 'caret::sensitivity' when loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::specificity' by
## 'caret::specificity' when loading 'ClinicoPath'
## Registered S3 methods overwritten by 'useful':
##   method         from     
##   autoplot.acf   ggfortify
##   fortify.acf    ggfortify
##   fortify.kmeans ggfortify
##   fortify.ts     ggfortify
## Warning: replacing previous import 'jmvcore::select' by 'dplyr::select' when
## loading 'ClinicoPath'
## Registered S3 methods overwritten by 'ggpp':
##   method                  from   
##   heightDetails.titleGrob ggplot2
##   widthDetails.titleGrob  ggplot2
## Warning: replacing previous import 'DataExplorer::plot_histogram' by
## 'grafify::plot_histogram' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::select' by 'jmvcore::select' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::auc' by 'pROC::auc' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::roc' by 'pROC::roc' when loading
## 'ClinicoPath'
## Warning: replacing previous import 'tibble::view' by 'summarytools::view' when
## loading 'ClinicoPath'
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)

# Note: This function requires the clintools package
# Install if needed: install.packages("clintools")

# For demonstration, we'll create synthetic monitoring data
set.seed(42)

Creating Test Data

Since hemodynamic monitoring data is specialized, let’s create realistic synthetic data:

# Create 1 hour of synthetic monitoring data at 1 Hz
duration_seconds <- 3600  # 1 hour
sampling_freq <- 1  # 1 Hz
time_points <- seq(0, duration_seconds - 1, by = 1)

# Generate realistic arterial blood pressure (ABP)
abp_baseline <- 90  # Mean arterial pressure
abp_pulse <- 20     # Pulse pressure amplitude
abp_respiratory <- 5 # Respiratory variation

monitoring_data <- data.frame(
  time_seconds = time_points,
  abp_mmhg = abp_baseline + 
             abp_pulse * sin(2 * pi * 1.2 * time_points / 60) +  # 72 bpm
             abp_respiratory * sin(2 * pi * 0.25 * time_points / 60) +  # 15 breaths/min
             rnorm(length(time_points), 0, 2),
  
  icp_mmhg = 12 + 
             2 * sin(2 * pi * 0.25 * time_points / 60) +  # Respiratory variation
             rnorm(length(time_points), 0, 1),
  
  mcav_cms = 60 + 
             10 * sin(2 * pi * 1.2 * time_points / 60) +  # Cardiac pulsation
             rnorm(length(time_points), 0, 2),
  
  hr_bpm = 72 + 
           5 * sin(2 * pi * 0.1 * time_points / 60) +  # Slow variation
           rnorm(length(time_points), 0, 2)
)

# Calculate derived variables
monitoring_data$cpp_mmhg <- monitoring_data$abp_mmhg - monitoring_data$icp_mmhg

# Display data structure
cat("Monitoring data structure:\\n")
## Monitoring data structure:\n
str(monitoring_data)
## 'data.frame':    3600 obs. of  6 variables:
##  $ time_seconds: num  0 1 2 3 4 5 6 7 8 9 ...
##  $ abp_mmhg    : num  92.7 91.5 96 99 101 ...
##  $ icp_mmhg    : num  11.8 11.8 11.6 11.5 12.1 ...
##  $ mcav_cms    : num  61.5 62.7 61.4 62.5 64.2 ...
##  $ hr_bpm      : num  70.1 75.7 71 72.4 73.8 ...
##  $ cpp_mmhg    : num  80.9 79.7 84.4 87.5 88.9 ...
cat("\\nFirst few rows:\\n")
## \nFirst few rows:\n
head(monitoring_data)
##   time_seconds  abp_mmhg icp_mmhg mcav_cms   hr_bpm cpp_mmhg
## 1            0  92.74192 11.81565 61.49918 70.14099 80.92627
## 2            1  91.50815 11.78931 62.73292 75.68087 79.71884
## 3            2  95.96173 11.57903 61.37452 71.00221 84.38271
## 4            3  99.02051 11.48169 62.51811 72.37743 87.53882
## 5            4 100.96625 12.05227 64.15998 73.77952 88.91398
## 6            5 102.19609 13.23030 67.78934 71.88570 88.96579

Basic Hemodynamic Analysis

Example 1: Pressure Reactivity Analysis

Calculate PRx (pressure reactivity index) from ABP and ICP:

# Note: Function available in jamovi interface
# Requires clintools package to be installed

# Basic pressure reactivity analysis
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  freq = 1,                    # 1 Hz sampling
  blocksize = 10,              # 10-second blocks
  epochsize = 20,              # 20 blocks per epoch
  output_level = "epoch",      # Epoch-level output
  show_summary = TRUE,
  show_detailed = FALSE
)

Clinical Interpretation

PRx Values: - PRx < 0.2: Good pressure reactivity (favorable) - PRx 0.2-0.35: Intermediate reactivity - PRx > 0.35: Poor pressure reactivity (concerning)

The PRx index quantifies the correlation between arterial blood pressure and intracranial pressure, indicating the brain’s ability to autoregulate.

Example 2: Cerebrovascular Flow Analysis

Analyze autoregulation using ABP and middle cerebral artery velocity:

# Cerebrovascular autoregulation analysis
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 5,               # 5-second blocks for better resolution
  epochsize = 30,              # 30 blocks per epoch
  output_level = "epoch",
  overlapping = TRUE,          # Overlapping analysis for smoother trends
  show_summary = TRUE,
  show_detailed = TRUE
)

Clinical Significance

Mx Index (Mean flow index): - Mx < 0.3: Intact autoregulation - Mx 0.3-0.4: Impaired autoregulation
- Mx > 0.4: Severely impaired autoregulation

Sx and Dx Indices: Systolic and diastolic flow components of autoregulation.

Advanced Analysis Options

High-Frequency Analysis

For high-resolution monitoring systems:

# Create high-frequency data (100 Hz)
hf_duration <- 600  # 10 minutes
hf_freq <- 100      # 100 Hz
hf_time <- seq(0, hf_duration - 1/hf_freq, by = 1/hf_freq)

hf_data <- data.frame(
  time_seconds = hf_time,
  abp_mmhg = 90 + 25 * sin(2 * pi * 1.2 * hf_time / 60) + rnorm(length(hf_time), 0, 1),
  mcav_cms = 60 + 10 * sin(2 * pi * 1.2 * hf_time / 60) + rnorm(length(hf_time), 0, 1)
)

# High-frequency analysis
clinmon(
  data = hf_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 100,                  # 100 Hz sampling frequency
  blocksize = 3,               # 3-second blocks
  epochsize = 20,              # 20 blocks per epoch
  output_level = "epoch",
  fast_processing = TRUE,      # Enable fast processing for large datasets
  show_summary = TRUE
)

Optimal CPP Analysis

Determine optimal cerebral perfusion pressure:

# CPPopt analysis requires special output mode
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  freq = 1,
  blocksize = 10,
  epochsize = 30,
  output_level = "cppopt",     # Special CPPopt analysis mode
  show_summary = TRUE,
  show_detailed = TRUE
)

CPPopt Clinical Application

  • Determines the CPP value associated with optimal autoregulation
  • Used to guide CPP management in neurocritical care
  • Helps personalize CPP targets for individual patients

Multiple Physiological Variables

Comprehensive Monitoring Analysis

Analyze all available variables simultaneously:

# Complete hemodynamic profile
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  mcav = "mcav_cms",
  hr = "hr_bpm",
  freq = 1,
  blocksize = 10,
  epochsize = 20,
  output_level = "epoch",
  blockmin = 0.7,              # Require 70% valid data per block
  epochmin = 0.8,              # Require 80% valid blocks per epoch
  show_summary = TRUE,
  show_detailed = TRUE
)

Using CPP Instead of Separate ABP/ICP

When CPP is directly measured or pre-calculated:

# Analysis using cerebral perfusion pressure
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  cpp = "cpp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 5,
  epochsize = 25,
  output_level = "epoch",
  show_summary = TRUE
)

Analysis Parameters and Optimization

Block and Epoch Size Selection

# Compare different temporal resolutions
parameter_combinations <- list(
  "High Resolution" = list(blocksize = 3, epochsize = 40),
  "Standard" = list(blocksize = 10, epochsize = 20),
  "Low Resolution" = list(blocksize = 30, epochsize = 10)
)

for (config_name in names(parameter_combinations)) {
  config <- parameter_combinations[[config_name]]
  
  cat(paste0("\\n", config_name, " Configuration:\\n"))
  
  clinmon(
    data = monitoring_data,
    time_var = "time_seconds",
    abp = "abp_mmhg",
    icp = "icp_mmhg",
    freq = 1,
    blocksize = config$blocksize,
    epochsize = config$epochsize,
    output_level = "epoch",
    show_summary = TRUE,
    show_detailed = FALSE
  )
}

Parameter Selection Guidelines

Block Size: - 3-5 seconds: High temporal resolution, more noise - 10 seconds: Standard clinical use, good balance - 30+ seconds: Smoother trends, reduced temporal resolution

Epoch Size: - 10-20 blocks: Faster updates, more variable - 20-30 blocks: Standard for most indices - 40+ blocks: Smoother estimates, delayed response

Data Quality Thresholds

# Strict quality requirements
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 10,
  epochsize = 20,
  blockmin = 0.9,              # Require 90% valid data per block
  epochmin = 0.9,              # Require 90% valid blocks per epoch
  output_level = "epoch",
  show_summary = TRUE
)

# Lenient quality requirements (for artifact-prone data)
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 10,
  epochsize = 20,
  blockmin = 0.3,              # Require only 30% valid data per block
  epochmin = 0.3,              # Require only 30% valid blocks per epoch
  output_level = "epoch",
  show_summary = TRUE
)

Clinical Applications and Case Studies

Case Study 1: Traumatic Brain Injury Monitoring

Continuous monitoring in TBI patient:

# Simulate TBI patient data with raised ICP
tbi_data <- monitoring_data
# Simulate gradually increasing ICP over time
icp_increase <- seq(0, 15, length.out = nrow(tbi_data))
tbi_data$icp_mmhg <- tbi_data$icp_mmhg + icp_increase
tbi_data$cpp_mmhg <- tbi_data$abp_mmhg - tbi_data$icp_mmhg

# Comprehensive TBI monitoring
clinmon(
  data = tbi_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 10,
  epochsize = 20,
  output_level = "epoch",
  show_summary = TRUE,
  show_detailed = TRUE
)

Clinical Insights

This analysis provides: - PRx trends: Monitor deterioration in pressure reactivity - CPPopt values: Guide CPP management - Autoregulation status: Assess cerebrovascular function - Temporal patterns: Identify concerning trends

Case Study 2: Intraoperative Monitoring

High-frequency monitoring during neurosurgery:

# Simulate intraoperative data with events
surgery_duration <- 7200  # 2 hours
surgery_time <- seq(0, surgery_duration - 1, by = 1)

surgery_data <- data.frame(
  time_seconds = surgery_time,
  abp_mmhg = 85 + 15 * sin(2 * pi * 1.0 * surgery_time / 60) + rnorm(length(surgery_time), 0, 3),
  mcav_cms = 55 + 8 * sin(2 * pi * 1.0 * surgery_time / 60) + rnorm(length(surgery_time), 0, 2)
)

# Intraoperative monitoring with tight temporal resolution
clinmon(
  data = surgery_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 5,               # 5-second resolution for OR
  epochsize = 12,              # 1-minute epochs
  overlapping = TRUE,          # Smooth temporal changes
  output_level = "epoch",
  show_summary = TRUE,
  show_detailed = TRUE
)

Case Study 3: Research Applications

Large dataset analysis for research:

# Simulate multi-day monitoring dataset
research_duration <- 86400  # 24 hours
research_time <- seq(0, research_duration - 1, by = 10)  # 0.1 Hz sampling

research_data <- data.frame(
  time_seconds = research_time,
  abp_mmhg = 95 + 20 * sin(2 * pi * research_time / 3600) + rnorm(length(research_time), 0, 4),
  icp_mmhg = 8 + 3 * sin(2 * pi * research_time / 3600) + rnorm(length(research_time), 0, 1.5),
  hr_bpm = 70 + 10 * sin(2 * pi * research_time / 7200) + rnorm(length(research_time), 0, 3)
)

# Research analysis with optimized parameters
clinmon(
  data = research_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  hr = "hr_bpm",
  freq = 0.1,                  # 0.1 Hz sampling
  blocksize = 60,              # 1-minute blocks
  epochsize = 60,              # 1-hour epochs
  fast_processing = TRUE,      # Optimize for large datasets
  output_level = "epoch",
  show_summary = TRUE,
  show_detailed = FALSE
)

Output Interpretation and Clinical Guidelines

Understanding Hemodynamic Indices

cat("Hemodynamic Index Interpretation Guide:\\n\\n")
## Hemodynamic Index Interpretation Guide:\n\n
interpretation_guide <- data.frame(
  Index = c("PRx", "Mx", "Sx", "Dx", "PI", "RI", "CVRi", "COest"),
  Normal_Range = c("< 0.2", "< 0.3", "< 0.3", "< 0.3", "0.6-1.2", "0.5-0.7", "Variable", "4-8 L/min"),
  Clinical_Concern = c("> 0.35", "> 0.4", "> 0.4", "> 0.4", "> 1.5", "> 0.8", "Elevated", "< 3 or > 12"),
  Clinical_Meaning = c(
    "Pressure reactivity",
    "Autoregulation status",
    "Systolic autoregulation",
    "Diastolic autoregulation",
    "Vascular pulsatility",
    "Vascular resistance",
    "Cerebrovascular resistance",
    "Cardiac output estimate"
  )
)

kable(interpretation_guide, caption = "Clinical Interpretation of Hemodynamic Indices")
Clinical Interpretation of Hemodynamic Indices
Index Normal_Range Clinical_Concern Clinical_Meaning
PRx < 0.2 > 0.35 Pressure reactivity
Mx < 0.3 > 0.4 Autoregulation status
Sx < 0.3 > 0.4 Systolic autoregulation
Dx < 0.3 > 0.4 Diastolic autoregulation
PI 0.6-1.2 > 1.5 Vascular pulsatility
RI 0.5-0.7 > 0.8 Vascular resistance
CVRi Variable Elevated Cerebrovascular resistance
COest 4-8 L/min < 3 or > 12 Cardiac output estimate
cat("Clinical Trending Guidelines:\\n\\n")
## Clinical Trending Guidelines:\n\n
cat("πŸ”΄ CRITICAL TRENDS:\\n")
## πŸ”΄ CRITICAL TRENDS:\n
cat("   β€’ PRx increasing above 0.35\\n")
##    β€’ PRx increasing above 0.35\n
cat("   β€’ Mx consistently above 0.4\\n")
##    β€’ Mx consistently above 0.4\n
cat("   β€’ Sudden changes in autoregulation indices\\n")
##    β€’ Sudden changes in autoregulation indices\n
cat("   β€’ Loss of normal physiological variability\\n\\n")
##    β€’ Loss of normal physiological variability\n\n
cat("🟑 MONITORING TRENDS:\\n")
## 🟑 MONITORING TRENDS:\n
cat("   β€’ PRx values 0.2-0.35\\n")
##    β€’ PRx values 0.2-0.35\n
cat("   β€’ Gradual changes in baseline values\\n")
##    β€’ Gradual changes in baseline values\n
cat("   β€’ Increased index variability\\n")
##    β€’ Increased index variability\n
cat("   β€’ Asymmetric changes between indices\\n\\n")
##    β€’ Asymmetric changes between indices\n\n
cat("🟒 FAVORABLE TRENDS:\\n")
## 🟒 FAVORABLE TRENDS:\n
cat("   β€’ PRx consistently below 0.2\\n")
##    β€’ PRx consistently below 0.2\n
cat("   β€’ Stable autoregulation indices\\n")
##    β€’ Stable autoregulation indices\n
cat("   β€’ Preserved physiological variability\\n")
##    β€’ Preserved physiological variability\n
cat("   β€’ Appropriate responses to interventions\\n")
##    β€’ Appropriate responses to interventions\n

Data Quality and Artifact Management

Handling Missing Data

# Create data with missing values (common in clinical monitoring)
artifact_data <- monitoring_data
# Simulate sensor disconnections and artifacts
artifact_data$abp_mmhg[1000:1100] <- NA  # 100-second gap
artifact_data$mcav_cms[2000:2050] <- NA  # 50-second gap

# Analysis with artifact-tolerant settings
clinmon(
  data = artifact_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  mcav = "mcav_cms",
  freq = 1,
  blocksize = 10,
  epochsize = 20,
  blockmin = 0.5,              # Accept blocks with 50% valid data
  epochmin = 0.6,              # Accept epochs with 60% valid blocks
  output_level = "epoch",
  show_summary = TRUE
)

Quality Assessment Recommendations

cat("Data Quality Assessment Framework:\\n\\n")
## Data Quality Assessment Framework:\n\n
cat("1. SIGNAL QUALITY CHECKS:\\n")
## 1. SIGNAL QUALITY CHECKS:\n
cat("   βœ“ Physiological range validation\\n")
##    βœ“ Physiological range validation\n
cat("   βœ“ Sampling frequency verification\\n")
##    βœ“ Sampling frequency verification\n
cat("   βœ“ Missing data pattern analysis\\n")
##    βœ“ Missing data pattern analysis\n
cat("   βœ“ Artifact detection and removal\\n\\n")
##    βœ“ Artifact detection and removal\n\n
cat("2. ANALYSIS PARAMETER OPTIMIZATION:\\n")
## 2. ANALYSIS PARAMETER OPTIMIZATION:\n
cat("   βœ“ Block size appropriate for signal characteristics\\n")
##    βœ“ Block size appropriate for signal characteristics\n
cat("   βœ“ Epoch size balancing resolution vs. stability\\n")
##    βœ“ Epoch size balancing resolution vs. stability\n
cat("   βœ“ Quality thresholds based on data characteristics\\n")
##    βœ“ Quality thresholds based on data characteristics\n
cat("   βœ“ Overlap settings for trend analysis\\n\\n")
##    βœ“ Overlap settings for trend analysis\n\n
cat("3. CLINICAL VALIDATION:\\n")
## 3. CLINICAL VALIDATION:\n
cat("   βœ“ Index values within expected ranges\\n")
##    βœ“ Index values within expected ranges\n
cat("   βœ“ Temporal trends consistent with clinical course\\n")
##    βœ“ Temporal trends consistent with clinical course\n
cat("   βœ“ Response to interventions as expected\\n")
##    βœ“ Response to interventions as expected\n
cat("   βœ“ Correlation between related indices\\n")
##    βœ“ Correlation between related indices\n

Advanced Features and Customization

Fast Processing for Large Datasets

# For very large datasets (days to weeks of data)
large_dataset_analysis <- function(data) {
  clinmon(
    data = data,
    time_var = "time_seconds",
    abp = "abp_mmhg",
    icp = "icp_mmhg",
    mcav = "mcav_cms",
    freq = 1,
    blocksize = 30,              # Larger blocks for efficiency
    epochsize = 20,              # Reasonable epoch size
    fast_processing = TRUE,      # Enable fast processing
    output_level = "epoch",
    blockmin = 0.7,
    epochmin = 0.7,
    show_summary = TRUE,
    show_detailed = FALSE        # Skip detailed output for large datasets
  )
}
# Smooth trend analysis with overlapping windows
clinmon(
  data = monitoring_data,
  time_var = "time_seconds",
  abp = "abp_mmhg",
  icp = "icp_mmhg",
  freq = 1,
  blocksize = 10,
  epochsize = 30,
  overlapping = TRUE,          # Enable overlapping analysis
  output_level = "epoch",
  show_summary = TRUE,
  show_detailed = TRUE
)

Integration with Clinical Workflows

Real-time Monitoring Implementation

cat("Real-time Monitoring Integration:\\n\\n")
## Real-time Monitoring Integration:\n\n
cat("πŸ”„ STREAMING DATA PROCESSING:\\n")
## πŸ”„ STREAMING DATA PROCESSING:\n
cat("   β€’ Buffer management for continuous analysis\\n")
##    β€’ Buffer management for continuous analysis\n
cat("   β€’ Incremental calculation updates\\n")
##    β€’ Incremental calculation updates\n
cat("   β€’ Real-time quality assessment\\n")
##    β€’ Real-time quality assessment\n
cat("   β€’ Automated alert generation\\n\\n")
##    β€’ Automated alert generation\n\n
cat("πŸ“Š CLINICAL DASHBOARD INTEGRATION:\\n")
## πŸ“Š CLINICAL DASHBOARD INTEGRATION:\n
cat("   β€’ Live trend displays\\n")
##    β€’ Live trend displays\n
cat("   β€’ Threshold-based alarming\\n")
##    β€’ Threshold-based alarming\n
cat("   β€’ Historical trend comparison\\n")
##    β€’ Historical trend comparison\n
cat("   β€’ Export capabilities for reporting\\n\\n")
##    β€’ Export capabilities for reporting\n\n
cat("πŸ₯ ELECTRONIC HEALTH RECORD INTEGRATION:\\n")
## πŸ₯ ELECTRONIC HEALTH RECORD INTEGRATION:\n
cat("   β€’ Automated data import\\n")
##    β€’ Automated data import\n
cat("   β€’ Structured result storage\\n")
##    β€’ Structured result storage\n
cat("   β€’ Clinical decision support\\n")
##    β€’ Clinical decision support\n
cat("   β€’ Research data extraction\\n")
##    β€’ Research data extraction\n

Research Applications

cat("Research Applications Framework:\\n\\n")
## Research Applications Framework:\n\n
cat("πŸ“ˆ LONGITUDINAL STUDIES:\\n")
## πŸ“ˆ LONGITUDINAL STUDIES:\n
cat("   β€’ Multi-patient cohort analysis\\n")
##    β€’ Multi-patient cohort analysis\n
cat("   β€’ Outcome correlation studies\\n")
##    β€’ Outcome correlation studies\n
cat("   β€’ Intervention effect assessment\\n")
##    β€’ Intervention effect assessment\n
cat("   β€’ Biomarker discovery\\n\\n")
##    β€’ Biomarker discovery\n\n
cat("πŸ”¬ METHODOLOGY VALIDATION:\\n")
## πŸ”¬ METHODOLOGY VALIDATION:\n
cat("   β€’ Index comparison studies\\n")
##    β€’ Index comparison studies\n
cat("   β€’ Algorithm optimization\\n")
##    β€’ Algorithm optimization\n
cat("   β€’ Clinical correlation validation\\n")
##    β€’ Clinical correlation validation\n
cat("   β€’ Inter-rater reliability assessment\\n\\n")
##    β€’ Inter-rater reliability assessment\n\n
cat("🎯 CLINICAL TRIALS:\\n")
## 🎯 CLINICAL TRIALS:\n
cat("   β€’ Objective endpoint measurement\\n")
##    β€’ Objective endpoint measurement\n
cat("   β€’ Treatment response quantification\\n")
##    β€’ Treatment response quantification\n
cat("   β€’ Safety monitoring\\n")
##    β€’ Safety monitoring\n
cat("   β€’ Dose-response relationships\\n")
##    β€’ Dose-response relationships\n

Best Practices and Guidelines

Analysis Protocol Development

cat("Hemodynamic Analysis Protocol Guidelines:\\n\\n")
## Hemodynamic Analysis Protocol Guidelines:\n\n
cat("1. PRE-ANALYSIS SETUP:\\n")
## 1. PRE-ANALYSIS SETUP:\n
cat("   βœ“ Verify data quality and completeness\\n")
##    βœ“ Verify data quality and completeness\n
cat("   βœ“ Confirm physiological signal ranges\\n")
##    βœ“ Confirm physiological signal ranges\n
cat("   βœ“ Document analysis parameters\\n")
##    βœ“ Document analysis parameters\n
cat("   βœ“ Define quality acceptance criteria\\n\\n")
##    βœ“ Define quality acceptance criteria\n\n
cat("2. PARAMETER SELECTION:\\n")
## 2. PARAMETER SELECTION:\n
cat("   βœ“ Match block size to signal characteristics\\n")
##    βœ“ Match block size to signal characteristics\n
cat("   βœ“ Choose epoch size based on clinical question\\n")
##    βœ“ Choose epoch size based on clinical question\n
cat("   βœ“ Set quality thresholds appropriately\\n")
##    βœ“ Set quality thresholds appropriately\n
cat("   βœ“ Consider overlapping for trend analysis\\n\\n")
##    βœ“ Consider overlapping for trend analysis\n\n
cat("3. RESULT INTERPRETATION:\\n")
## 3. RESULT INTERPRETATION:\n
cat("   βœ“ Consider clinical context\\n")
##    βœ“ Consider clinical context\n
cat("   βœ“ Validate against known physiological ranges\\n")
##    βœ“ Validate against known physiological ranges\n
cat("   βœ“ Assess temporal consistency\\n")
##    βœ“ Assess temporal consistency\n
cat("   βœ“ Correlate with clinical interventions\\n\\n")
##    βœ“ Correlate with clinical interventions\n\n
cat("4. QUALITY ASSURANCE:\\n")
## 4. QUALITY ASSURANCE:\n
cat("   βœ“ Regular algorithm validation\\n")
##    βœ“ Regular algorithm validation\n
cat("   βœ“ Clinical correlation checks\\n")
##    βœ“ Clinical correlation checks\n
cat("   βœ“ Inter-observer agreement studies\\n")
##    βœ“ Inter-observer agreement studies\n
cat("   βœ“ Continuous quality monitoring\\n")
##    βœ“ Continuous quality monitoring\n

Reporting Guidelines

Essential Elements to Report

cat("Hemodynamic Analysis Reporting Checklist:\\n\\n")
## Hemodynamic Analysis Reporting Checklist:\n\n
cat("βœ“ Patient demographics and clinical context\\n")
## βœ“ Patient demographics and clinical context\n
cat("βœ“ Monitoring equipment and setup details\\n")
## βœ“ Monitoring equipment and setup details\n
cat("βœ“ Sampling frequency and duration\\n")
## βœ“ Sampling frequency and duration\n
cat("βœ“ Analysis parameters (block/epoch sizes)\\n")
## βœ“ Analysis parameters (block/epoch sizes)\n
cat("βœ“ Quality thresholds and data completeness\\n")
## βœ“ Quality thresholds and data completeness\n
cat("βœ“ Index values with confidence intervals\\n")
## βœ“ Index values with confidence intervals\n
cat("βœ“ Clinical interpretation and significance\\n")
## βœ“ Clinical interpretation and significance\n
cat("βœ“ Limitations and assumptions\\n")
## βœ“ Limitations and assumptions\n

Common Pitfalls and Solutions

cat("Common Hemodynamic Analysis Pitfalls:\\n\\n")
## Common Hemodynamic Analysis Pitfalls:\n\n
cat("1. WRONG: Using inappropriate time windows\\n")
## 1. WRONG: Using inappropriate time windows\n
cat("   RIGHT: Match analysis windows to signal characteristics\\n\\n")
##    RIGHT: Match analysis windows to signal characteristics\n\n
cat("2. WRONG: Ignoring data quality issues\\n")
## 2. WRONG: Ignoring data quality issues\n
cat("   RIGHT: Implement rigorous quality control\\n\\n")
##    RIGHT: Implement rigorous quality control\n\n
cat("3. WRONG: Over-interpreting short-term changes\\n")
## 3. WRONG: Over-interpreting short-term changes\n
cat("   RIGHT: Focus on sustained trends and patterns\\n\\n")
##    RIGHT: Focus on sustained trends and patterns\n\n
cat("4. WRONG: Using single indices in isolation\\n")
## 4. WRONG: Using single indices in isolation\n
cat("   RIGHT: Integrate multiple indices for comprehensive assessment\\n\\n")
##    RIGHT: Integrate multiple indices for comprehensive assessment\n\n
cat("5. WRONG: Ignoring clinical context\\n")
## 5. WRONG: Ignoring clinical context\n
cat("   RIGHT: Always interpret results with clinical knowledge\\n")
##    RIGHT: Always interpret results with clinical knowledge\n

Conclusion

The clinmon function provides comprehensive hemodynamic analysis capabilities essential for modern neurocritical care and cardiovascular monitoring. Key takeaways:

  1. Choose appropriate parameters based on signal characteristics and clinical objectives
  2. Implement robust quality control to ensure reliable results
  3. Integrate multiple indices for comprehensive physiological assessment
  4. Consider clinical context when interpreting automated analyses
  5. Validate results against known physiological patterns and clinical course

This tool enables objective, quantitative assessment of complex physiological relationships, supporting evidence-based clinical decision-making and advancing our understanding of cerebrovascular and cardiovascular physiology.

References

  • Czosnyka, M., & Pickard, J. D. (2004). Monitoring and interpretation of intracranial pressure. Journal of Neurology, Neurosurgery & Psychiatry, 75(6), 813-821.
  • Steiner, L. A., et al.Β (2002). Continuous monitoring of cerebrovascular pressure reactivity allows determination of optimal cerebral perfusion pressure in patients with traumatic brain injury. Critical Care Medicine, 30(4), 733-738.
  • Aries, M. J., et al.Β (2012). Cerebral autoregulation in stroke: a review of transcranial Doppler studies. Stroke, 43(11), 3032-3042.
  • Donnelly, J., et al.Β (2015). Regulation of the cerebral circulation: bedside assessment and clinical implications. Critical Care, 19(1), 129.

This vignette was created for the ClinicoPath jamovi module. For more information and updates, visit https://github.com/sbalci/ClinicoPathJamoviModule.