2. Test Plots, Tables

Raw data referred from ケィオスの時系列解析メモランダム https://chaos-kiyono.hatenablog.com/entry/2022/07/01/142934

Author

Kizen Sasaki

First version

2023 December 20

Modified

2023 December 30

Code
library(RHRV)
library(tidyverse)
library(openxlsx)
# Frequency-domain analysis techniques p.54, , p73
FileNo <- 2019
FileName <- paste0("time_HR_", FileNo, ".csv")
# read csv file which specified by FileName above.
data <- read.table(file.path("csv_xls", FileName), header = TRUE, sep = ",", colClasses = c("character", "numeric"))
# p58-60
hrv.data <- CreateHRVData()
hrv.data <- SetVerbose(hrv.data, TRUE)
# from Abraham Otero on 2023-10-24 19:25 R-Forge: rhrv: R/HRV Interface to Heart Rate Variability Analyses
hr <- data[,2]
rr <- 1/hr
rr = rr*60*1000
hrv.data$Beat$RR <- rr
hrv.data$Beat$niHR <- hr
hrv.data$Beat$Time <- cumsum(rr)/1000

Figure 1

Code
# p60-61
hrv.data <- BuildNIHR(hrv.data)
hrv.data <- FilterNIHR(hrv.data)
hrv.data <- InterpolateNIHR(hrv.data, freqhr = 4)

# Plot p47
PlotNIHR(hrv.data) 
PlotHR(hrv.data)

(a) Non-interpolated

(b) Interpolated

Figure 1: Heart Rate Signal

Figure 2

Code
hrv.data <- CreateFreqAnalysis(hrv.data)
hrv.data=CalculatePowerBand(hrv.data, indexFreqAnalysis = 1,size=300, shift=30,
type = "wavelet", wavelet = "la8", bandtolerance = 0.01, relative = FALSE)
# Plotting wavelet analysis
PlotPowerBand(hrv.data, indexFreqAnalysis = 1, normalized=TRUE, hr=TRUE)

Figure 2: Normalized power bands of HRV and Heart Rate Signal

Figure 3

Code
# Creating Several Frequency Analysis p52, "Heart Rate Variability Analysis with the R package RHVR"
# Package RHRV p68-69, layout refered Heart Rate Variability Analysis with the R package RHVR, p52-53
hrv.data <- CreateFreqAnalysis(hrv.data)
hrv.data <- CalculatePSD(hrv.data, 1, "pgram", addLegend = T, doPlot = F)

hrv.data <- CalculatePSD(hrv.data, 2, "pgram", spans = 9, doPlot = F)

hrv.data <- CreateFreqAnalysis(hrv.data)
hrv.data <- CalculatePSD(hrv.data, 3, "ar", doPlot = F)

hrv.data <- CreateFreqAnalysis(hrv.data)
hrv.data <- CalculatePSD(hrv.data, 4, "lomb", doPlot = F)

# Plot the results
PlotPSD(hrv.data, 1, addLegend = T, ylim = c(1, 100000))
PlotPSD(hrv.data, 2, addLegend = F)
PlotPSD(hrv.data, 3, addLegend = T)
PlotPSD(hrv.data, 4, addLegend = F)

(a) Raw periodogram

(b) Smoothed Periodogram

(c) AR(8) spectrum

(d) Lomb Periodogram

Figure 3: HRV Several Frequency Analysis Power spectrum

Code
# CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1) # Verfy ULF, VLF, LF, HF
hrv.data=CalculatePSD(hrv.data,indexFreqAnalysis = 1, method = "lomb", doPlot="F")

# CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1)
ULF <- round(median(CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1)[[1]]), 5)

VLF <- round(median(CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1)[[2]]), 5)

LF <-  round(median(CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1)[[3]]), 5)

HF <-  round(median(CalculateEnergyInPSDBands(hrv.data, indexFreqAnalysis =1)[[4]]), 5)

LFHF <- round(LF/HF, 5)

HRmax <- max(hrv.data$Beat$niHR)
HRmin <- min(hrv.data$Beat$niHR)
HRave <- round(mean(hrv.data$Beat$niHR))
HRmed <- round(median(hrv.data$Beat$niHR))

# result from hrv.data=CalculatePSD(hrv.data,indexFreqAnalysis = 1, method = "lomb", doPlot="F")
# ULF <- round(median(hrv.data$FreqAnalysis[[1]]$ULF), 5)
# VLF <- round(median(hrv.data$FreqAnalysis[[1]]$VLF), 5)
# LF <-  round(median(hrv.data$FreqAnalysis[[1]]$LF), 5)
# HF <-  round(median(hrv.data$FreqAnalysis[[1]]$HF), 5)

Table 1 Table (a) shows …….

Code
# Check the results of the analysis
# Prepare tables for the results of the analysis

# Time-domain analysis techniques p.54, p73
hrv.data <- CreateTimeAnalysis(hrv.data, size = 300, interval = 7.8125)

table1 <- tibble(
  HRV_Parameters = c("SDNN", "SDNNIDX", "pNN50", "SDSD", "rMSSD", "IRRR", "MADRR", "TINN", "HRVi"),
  Units1 = c("$ms$", "$ms$", "%", "$ms$", "$ms$", "$ms$", "$ms$", "$ms$", "$ms$"),
  Value1 = hrv.data$TimeAnalysis[[1]][HRV_Parameters]
)

# for LF/HF, ULF, VLF, LF, HF and heart rates table
table2 <- tibble(
  Parameters2 = c("LF/HF", "ULF", "VLF", "LF", "HF", "HRmax", "HRmin", "HRave", "HRmed"),
  Units2 = c("% ", "$ms^{2}$", "$ms^{2}$", "$ms^{2}$", "$ms^{2}$", "bpm", "bpm", "bpm", "bpm"),
  Value2 = c(LFHF, ULF, VLF, LF, HF, HRmax, HRmin, HRave, HRmed)
)

# Heart Rate Variability Parameters during 2-hourse Bicycle training

knitr::kable(table1, caption = "First Table")
knitr::kable(table2, caption = "Second Table")

Table 1: Heart Rate Variability Parameters during 2-hourse Bicycle training

(a) tbc
HRV_Parameters Units1 Value1
SDNN ms 63.16391
SDNNIDX ms 55.3249
pNN50 % 18.29268
SDSD ms 40.00299
rMSSD ms 40.00153
IRRR ms 88
MADRR ms 22
TINN ms 288.3886
HRVi ms 18.45687
(b) tbc
Parameters2 Units2 Value2
LF/HF % 3.61626
ULF ms^{2} 0.18781
VLF ms^{2} 0.03395
LF ms^{2} 0.11478
HF ms^{2} 0.03174
HRmax bpm 113.42155
HRmin bpm 63.42495
HRave bpm 83.00000
HRmed bpm 83.00000

Figure 4

(a) ‘Classic’ Poincaré Plot.

(b) Poincaré Plot using the confidence region estimation.

Figure 4: Poincaré Plot

Table 2

Code
knitr::kable(table3, caption = "Poincaré Table")
knitr::kable(table3, caption = "Poincaré Table")

Table 2: Poincaré Plot

(a) ‘Classic’ Poincaré.
Parameter Value
SD1 28.28639
SD2 84.73039
(b) Poincaré analysis.
Parameter Value
SD1 28.28639
SD2 84.73039