---
title: "2. Test Plots, Tables"
subtitle: "Raw data referred from ケィオスの時系列解析メモランダム https://chaos-kiyono.hatenablog.com/entry/2022/07/01/142934"
author:
- Kizen Sasaki
date: 2023-12-20
date-modified: today
date-format: 'YYYY MMMM DD'
language:
title-block-published: First version
titel-block-modified: This version
format:
html:
html-math-method: katex
code-tools: true
code-fold: true
code-link: true
pdf:
geometry:
- top=30mm
- bottom=30mm
- left=30mm
- right=25mm
docx: default
code-line-numbers: true
---
```{r}
#| message: false
#| echo: true
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
```
@fig-1
```{r}
#| message: false
#| echo: true
#| label: fig-1
#| fig.cap: "Heart Rate Signal"
#| fig-subcap:
#| - "Non-interpolated"
#| - "Interpolated"
#| fig-height: 7
#| layout-ncol: 2
# 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)
```
@fig-2
```{r}
#| message: false
#| echo: true
#| label: fig-2
#| fig.cap: "Normalized power bands of HRV and Heart Rate Signal"
#| fig-height: 12
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)
```
@fig-3
```{r}
#| message: false
#| echo: true
#| label: fig-3
#| fig.cap: "HRV Several Frequency Analysis Power spectrum"
#| fig-subcap:
#| - "Raw periodogram"
#| - "Smoothed Periodogram"
#| - "AR(8) spectrum"
#| - "Lomb Periodogram"
#| fig-height: 7
#| layout-ncol: 2
# 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)
```
```{r}
#| message: false
#| echo: true
# 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)
```
@tbl-1 Table (a) shows .......
```{r}
#| message: false
#| echo: true
#| label: tbl-1
#| tbl-cap: "Heart Rate Variability Parameters during 2-hourse Bicycle training"
#| tbl-subcap:
#| - "tbc"
#| - "tbc"
#| layout-ncol: 2
# 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")
```
@fig-4
```{r}
#| message: false
#| echo: false
#| label: fig-4
#| fig.cap: "Poincaré Plot"
#| fig-subcap:
#| - "'Classic' Poincaré Plot."
#| - "Poincaré Plot using the confidence region estimation."
#| fig-height: 8
#| fig-width: 8
#| layout-ncol: 2
# Set timeLag = 1 to obtain the "classic" Poincaré parameters
# Create non-linear analysis structures "classic"
hrv.data <- CreateNonLinearAnalysis(hrv.data)
hrv.data <- PoincarePlot(hrv.data,
indexNonLinearAnalysis = 1,
timeLag = 1, doPlot = TRUE)
sd1sd2 <- data.frame(SD1 = hrv.data$NonLinearAnalysis[[1]]$PoincarePlot$SD1,
SD2 = hrv.data$NonLinearAnalysis[[1]]$PoincarePlot$SD2)
# Poncaré Plot using the confidence region estimation p.141-145
hrv.data <- CreateNonLinearAnalysis(hrv.data)
hrv.data <- PoincarePlot(hrv.data,
indexNonLinearAnalysis = 2,
timeLag = 1, confidenceEstimation = TRUE,
confidence = 0.9,
doPlot = TRUE)
sd1sd2 <- data.frame(SD1 = hrv.data$NonLinearAnalysis[[2]]$PoincarePlot$SD1,
SD2 = hrv.data$NonLinearAnalysis[[2]]$PoincarePlot$SD2)
table3 <- tibble( Parameter = c("SD1", "SD2"),
Value = c(hrv.data$NonLinearAnalysis[[1]]$PoincarePlot$SD1,
hrv.data$NonLinearAnalysis[[1]]$PoincarePlot$SD2))
# Units = c("$bpm$", "$bpm$"))
table4 <- tibble( Parameter= c("SD1", "SD2"),
Value = c(hrv.data$NonLinearAnalysis[[2]]$PoincarePlot$SD1,
hrv.data$NonLinearAnalysis[[2]]$PoincarePlot$SD2))
# Units = c("$bpm$", "$bpm$"))
```
@tbl-2
```{r}
#| message: false
#| echo: true
#| label: tbl-2
#| tbl-cap: "Poincaré Plot"
#| tbl-subcap:
#| - "'Classic' Poincaré."
#| - "Poincaré analysis."
#| layout-ncol: 2
knitr::kable(table3, caption = "Poincaré Table")
knitr::kable(table3, caption = "Poincaré Table")
```