(1) 概述

介绍

心率变异性(HRV)描述了根据心电图(ECG)信号计算出的心跳频率的变化。它被认为是个人心血管疾病的关键指标。

自从确定自主神经系统与心血管死亡率之间存在显著关系以来,研究人员一直致力于从原始RR间期信号中寻找有用的特征来表征自主神经系统状态。

提供HRV分析功能的软件已经存在,但处于专有许可之下,无法访问结果的计算方式。为了使HRV分析免费可用并允许一些透明度,我们决定开源我们的包。hrv分析是一个用于Python环境的开源软件包,提供了一套完整的工具来执行HRV分析。

在本文中,我们将只介绍包的核心方面。更多信息可以在文档中找到[]。两个主要部分是过滤功能和特征提取功能。

与现有软件的比较

为了确保所有实施方法的准确性,已与现有标准软件Kubios HRV(v3.1)进行了仔细比较[]。我们比较了我们的软件包和Kubios软件提供的所有功能。按域详细列出的所有方法为:

  • –时域特征:平均RR、SDNN、平均HR、RMSSD、NN50、pNN50、HRV三角指数
  • –用于频域功能:VLF、LF、HF、LF/HR比率、LFnu、HFnu
  • –对于非线性域特征:SD1、SD2、SD2/SD1、SampEn

我们不会在本文中介绍每个功能。文档中提供了所有相关信息[].

为了收集一些测试数据,我们使用Polar H10胸带[]。我们选择此传感器是因为它可靠并且提供非常准确的RR间隔[,]。此外,API可用于提取连续RR-interval值以进行自定义分析。

其中一位候选人配备了该设备几天,我们选择了没有明显伪影的数据段。分段的时间范围已设置为5分钟,符合标准[]据我们所知,用于正确的hrv分析。没有应用任何预处理来进行无偏比较。

为了比较不同情况下特征的计算,我们重点研究了具有不同心律模式的5个周期:一个周期有加速/减速,一个周期心率高(体力活动情况,跑步),还有几个周期心率正常。

为了便于阅读,我们将只显示其中的两个比较,但所有部分的结果都是相似的。时域和非线性域特征的比较结果如下表所示(图1).

图1

比较hrv分析和Kubios的时域和非线性域特征。

所有计算的特征都非常接近。观察到的一些微小差异可以用数学近似解释。

在频域方面,我们使用韦尔奇快速傅里叶变换对功率谱密度(PSD)进行了比较。Welch的周期图是Kubios中的高级功能,因此我们无法比较此方法的结果。我们确保与Kubios具有相同的设置和参数。例如,我们将采样频率设置为4 Hz(这是Kubios中的默认参数),段大小固定为300秒,重叠率为50%。

下表显示了一些差异(图2).

图2

hrv分析和Kubios的频域特征比较。

这些差异可能被认为是显著的,但它只是强调了一些其他参数的重要性,如窗口函数、解链段的方法或如何计算积分,Kubios软件没有提供这些信息。这也可能是由于Scipy包的库实现[]用于计算PSD。另一种解释可能是Kubios对计算的变量使用了不同的精度(例如float64位与float32位),或者依赖于不同的FFT实现,这可能会导致计算中的微小变化。

然而,由于这两个特征的数量级非常接近,我们认为这些指标是相关的医学指标。

我们注意到,当我们观察归一化值或比率时,对LF和HF特征的过度和低估消失了,这往往会证实我们函数的准确性。

实施和架构

语言

hrv分析是用纯Python编写的。由于分析和机器学习项目的兴起,Python在研究领域越来越受欢迎。它是一种开源语言,开发简单,代码简明扼要,并且有许多高效的科学库可用。基于这些原因,我们希望这将有助于研究界采纳该方案。

API组织

心率变异性分析依赖于两个连续步骤:第一步是预处理,第二步是特征计算。

可以在Aura关联github上访问完整的Python API参考(https://aura-healthcare.github.io/hrv-analysis/hrvanalysis.html).

  • hr分析.后处理:包含预处理RR间隔的所有方法
  • hr分析.提取功能:包含基于RR间隔计算特征的所有方法
  • hrv分析.plot:包含绘制RR间隔图形和特征的所有方法(图3)
图3

包体系结构的构建块。

当然,可以在每个块中添加新功能、预处理方法或绘图函数来改进库。

步骤1–预处理

众所周知,异常和异位搏动具有巨大的影响[]心率变异性特征的计算。在临床环境中,最佳实践是手动检查ECG记录中的伪影,并在分析中仅包括无伪影部分[]。这个过程非常耗时,不适合长期录制。或者,通常的做法是自动调整RR间隔并消除异常节拍[]但据我们所知,在最佳使用方法方面还没有达成共识。这个hrv分析包提供了一个两步预处理系统。首先,有两种方法可以检测异常和异位搏动,并用NaN公司值(不是Python中的数字)。第二种方法对先前删除的值进行插值。

使用Python API,如下例所示:

从hrvanalysis.preprocessing导入(删除输出,插值nan值) rr_intervals_list=[1000、150、1050、2600、1000]rr_intervals_list=remove_outliers(rr_intervals_list,低_rri=300,高_rri=2000)rr_间隔_列表>>>[1000,南,1050,南,1000] interpole_nan_values(rr_intervals_list,interpolation_method=«线性»)>>>[10001002510501000900]
第2步-特征计算

如前所述,几十年来,研究人员和生理学家一直在跟踪和利用HRV,因为它被认为是一些健康相关问题的有用指标。评估心率变化有几种方法:时域、频域和非线性域分析。它们都已在包中实现,非常易于使用,因为它们都采用相同的输入RR间隔数据。

Python API可以按如下方式使用:

从hrvanalysis导入(gettime_domain_features,获取频率域功能) rr_intervals_list=[1010、987、…、950、929] 获取时间域特性(rr间隔列表)>>>{‘mean_nni’:718.248,‘sdnn’:43.11,‘sdsd’:19.51,‘ni_50’:24,‘pnni_50':2.4,“nni_20”:225,“pnni_20”:22.5,“rmssd”:19.52,“median_nni”:722.5,“range_nni”:249,“cvsd”:0.027,“cvnni”:0.060,“mean_hr”:83.85,“最大小时”:101.69,“最小小时”:71.51,“标准小时”:5.197} 获取频率域功能(rr间隔列表)>>>{“lf”:299.72,“hf”:436.15,“lf_hr_ratio”:0.69,“lfnu”:40.73,“hfnu”:59.27,“total_power”:833.46,“vlf”:97.58}

我们的实现支持大量输入参数(采样频率、频带等)和文献中常见的傅里叶分解方法。所有相关信息都可以在软件包的文档中找到。

绘图模块

同时,还有一些功能用于绘制标准图形(及其相关特征),研究人员通常使用这些功能进行hrv分析。

以下是plot_psd()使用包的两种不同绘图方法(Welch和Lomb)的方法(图4).

图4

使用plot_psd()方法绘制的示例。

依赖关系

统计分析和预处理方法依赖于Numpy[]和熊猫[]为阵列提供了优化和高效的方法。Scipy公司[]和天文[]用于频域分析,尤其是涉及傅里叶变换的分析。绘图模块完全依赖于Matplotlib库。

质量控制

代码质量也是一个重要的主题。目前,使用Python统一测试框架的测试覆盖了82%的代码[],用于跟踪此统计信息的代码覆盖率报告工具。测试通过持续集成工具Travis CI运行。由于github CI模块,所有最新的依赖项都被加载到Docker容器中。该包是在Python 3.5中开发的,但可以在3.5到最新版本(目前为Python 3.9)的所有Python版本中使用。

该软件包还遵循PEP 484,对所有功能参数和输出使用“类型提示”。我们希望这将提高代码的可读性,并帮助更容易地检测错误。

有两个与库的每个高级功能相对应的主要测试文件(均在github上提供):

  • –预处理测试:检查每个预处理方法是否返回正确的修改RR间隔列表
  • –功能计算测试:检查每个功能计算是否与Kubios功能相似。

所有测试也可以单独运行,提供的文档中给出了在本地运行这些测试的说明。

该库还遵循PEP8编码标准,所有文件都使用了linter pylint,以确保不同模块之间的一致性。

我们希望它能简化维护和进一步改进。

结论

该库的第一个版本集成了我们认为最重要的功能,以进行稳健和充分的基本HRV分析。除了列出的Python依赖项之外,它不依赖于任何其他软件。它的体系结构很灵活,我们希望很容易集成到定制系统中(如API)。通过适当的测试覆盖范围以及与用于计算HRV特征的现有最先进工具的比较,可以确保鲁棒性。

该库的第一个用途是通过AURA协会的项目进行癫痫监测,可能会考虑许多未来的用例。例如,它可以对各种慢性心脏病进行随访。

不过,该方案并没有假装详尽无遗。接下来的一些步骤可能会添加对原始ECG数据的支持(通过QRS复合检测进行RR间隔提取),或者高级时频分析(多页过滤器),仅举几个例子。通过开源此软件包(可在https://github.com/Aura-healthcare/hrv-analysis网站),我们希望其他研究人员或用户能很好地利用它,希望社区能帮助我们丰富这个图书馆。

(2) 可用性

操作系统

GNU/Linux、Mac OS X、Windows以及Docker支持的任何平台上,如Azure和AWS。

程序设计语言

hrv分析是用Python 3编写的。

依赖关系

例如,库、框架,包括最低版本兼容性。

Python 3.5最低版本

Numpy>=1.15.1

SciPy≥1.1.0

熊猫>=0.23.4

Matplotlib>=2.2.2

天体仪>=3.0.4

氮>=0.4.1

软件位置

档案文件

姓名:hrv分析

永久标识符: https://pypi.org/project/hrv-analysis/#files

许可证:GNU通用许可证版本3.0

出版商:罗宾·尚普塞克斯

发布版本:1.0.0版

发布日期:2018年10月11日

代码库

姓名:github

标识符: https://github.com/Aura-Healthcare/hrv-analysis网站

许可证:GNU通用许可证版本3.0

发布日期:2018年9月

语言

英语

(3) 再利用潜力

使用的Python语言和依赖库包都是开源的。Hrv分析可用于临床和公共卫生研究人员、从事人类或动物健康工作的专业人员或体育爱好者;适合任何想要对心率变异性进行详细分析并检查自主神经系统功能的人。