neurokit2/hrv/hrv_time.py
def hrv_time(peaks, sampling_rate=1000, show=False, **kwargs):
    """Computes time-domain indices of Heart Rate Variability (HRV).

     See references for details.

    Parameters
    ----------
    peaks : dict
        Samples at which cardiac extrema (i.e., R-peaks, systolic peaks) occur.
        Can be a list of indices or the output(s) of other functions such as ecg_peaks,
        ppg_peaks, ecg_process or bio_process.
    sampling_rate : int, optional
        Sampling rate (Hz) of the continuous cardiac signal in which the peaks occur. Should be at
        least twice as high as the highest frequency in vhf. By default 1000.
    show : bool
        If True, will plot the distribution of R-R intervals.

    Returns
    -------
    DataFrame
        Contains time domain HRV metrics:
        - **RMSSD**: The square root of the mean of the sum of successive differences between
        adjacent RR intervals. It is equivalent (although on another scale) to SD1, and
        therefore it is redundant to report correlations with both (Ciccone, 2017).
        - **MeanNN**: The mean of the RR intervals.
        - **SDNN**: The standard deviation of the RR intervals.
        - **SDSD**: The standard deviation of the successive differences between RR intervals.
        - **CVNN**: The standard deviation of the RR intervals (SDNN) divided by the mean of the RR
        intervals (MeanNN).
        - **CVSD**: The root mean square of the sum of successive differences (RMSSD) divided by the
        mean of the RR intervals (MeanNN).
        - **MedianNN**: The median of the absolute values of the successive differences between RR intervals.
        - **MadNN**: The median absolute deviation of the RR intervals.
        - **HCVNN**: The median absolute deviation of the RR intervals (MadNN) divided by the median
        of the absolute differences of their successive differences (MedianNN).
        - **IQRNN**: The interquartile range (IQR) of the RR intervals.
        - **pNN50**: The proportion of RR intervals greater than 50ms, out of the total number of RR intervals.
        - **pNN20**: The proportion of RR intervals greater than 20ms, out of the total number of RR intervals.
        - **TINN**: A geometrical parameter of the HRV, or more specifically, the baseline width of
        the RR intervals distribution obtained by triangular interpolation, where the error of least
        squares determines the triangle. It is an approximation of the RR interval distribution.
        - **HTI**: The HRV triangular index, measuring the total number of RR intervals divded by the
        height of the RR intervals histogram.

    See Also
    --------
    ecg_peaks, ppg_peaks, hrv_frequency, hrv_summary, hrv_nonlinear

    Examples
    --------
    >>> import neurokit2 as nk
    >>>
    >>> # Download data
    >>> data = nk.data("bio_resting_5min_100hz")
    >>>
    >>> # Find peaks
    >>> peaks, info = nk.ecg_peaks(data["ECG"], sampling_rate=100)
    >>>
    >>> # Compute HRV indices
    >>> hrv = nk.hrv_time(peaks, sampling_rate=100, show=True)

    References
    ----------
    - Ciccone, A. B., Siedlik, J. A., Wecht, J. M., Deckert, J. A., Nguyen, N. D., & Weir, J. P.
    (2017). Reminder: RMSSD and SD1 are identical heart rate variability metrics. Muscle & nerve,
    56(4), 674-678.

    - Stein, P. K. (2002). Assessing heart rate variability from real-world Holter reports. Cardiac
    electrophysiology review, 6(3), 239-244.

    - Shaffer, F., & Ginsberg, J. P. (2017). An overview of heart rate variability metrics and norms.
    Frontiers in public health, 5, 258.

    """
    # Sanitize input
    peaks = _hrv_sanitize_input(peaks)
    if isinstance(peaks, tuple):  # Detect actual sampling rate
        peaks, sampling_rate = peaks[0], peaks[1]

    # Compute R-R intervals (also referred to as NN) in milliseconds
    rri = _hrv_get_rri(peaks, sampling_rate=sampling_rate, interpolate=False)
    diff_rri = np.diff(rri)

    out = {}  # Initialize empty container for results

    # Mean based
    out["RMSSD"] = np.sqrt(np.mean(diff_rri ** 2))

    out["MeanNN"] = np.nanmean(rri)
    out["SDNN"] = np.nanstd(rri, ddof=1)
    out["SDSD"] = np.nanstd(diff_rri, ddof=1)

    # Normalized
    out["CVNN"] = out["SDNN"] / out["MeanNN"]
    out["CVSD"] = out["RMSSD"] / out["MeanNN"]

    # Robust
    out["MedianNN"] = np.nanmedian(rri)
    out["MadNN"] = mad(rri)
    out["MCVNN"] = out["MadNN"] / out["MedianNN"]  # Normalized
    out["IQRNN"] = scipy.stats.iqr(rri)

    # Extreme-based
    nn50 = np.sum(np.abs(diff_rri) > 50)
    nn20 = np.sum(np.abs(diff_rri) > 20)
    out["pNN50"] = nn50 / len(rri) * 100
    out["pNN20"] = nn20 / len(rri) * 100

    # Geometrical domain
    bar_y, bar_x = np.histogram(rri, bins="auto")
    out["TINN"] = np.max(bar_x) - np.min(bar_x)  # Triangular Interpolation of the NN Interval Histogram
    out["HTI"] = len(rri) / np.max(bar_y)  # HRV Triangular Index

    if show:
        _hrv_time_show(rri, **kwargs)

    out = pd.DataFrame.from_dict(out, orient="index").T.add_prefix("HRV_")
    return out
Computes time-domain indices of Heart Rate Variability (HRV).

     See references for details.

    Parameters
    ----------
    peaks : dict
        Samples at which cardiac extrema (i.e., R-peaks, systolic peaks) occur.
        Can be a list of indices or the output(s) of other functions such as ecg_peaks,
        ppg_peaks, ecg_process or bio_process.
    sampling_rate : int, optional
        Sampling rate (Hz) of the continuous cardiac signal in which the peaks occur. Should be at
        least twice as high as the highest frequency in vhf. By default 1000.
    show : bool
        If True, will plot the distribution of R-R intervals.

    Returns
    -------
    DataFrame
        Contains time domain HRV metrics:
        - **RMSSD**: The square root of the mean of the sum of successive differences between
        adjacent RR intervals. It is equivalent (although on another scale) to SD1, and
        therefore it is redundant to report correlations with both (Ciccone, 2017).
        - **MeanNN**: The mean of the RR intervals.
        - **SDNN**: The standard deviation of the RR intervals.
        - **SDSD**: The standard deviation of the successive differences between RR intervals.
        - **CVNN**: The standard deviation of the RR intervals (SDNN) divided by the mean of the RR
        intervals (MeanNN).
        - **CVSD**: The root mean square of the sum of successive differences (RMSSD) divided by the
        mean of the RR intervals (MeanNN).
        - **MedianNN**: The median of the absolute values of the successive differences between RR intervals.
        - **MadNN**: The median absolute deviation of the RR intervals.
        - **HCVNN**: The median absolute deviation of the RR intervals (MadNN) divided by the median
        of the absolute differences of their successive differences (MedianNN).
        - **IQRNN**: The interquartile range (IQR) of the RR intervals.
        - **pNN50**: The proportion of RR intervals greater than 50ms, out of the total number of RR intervals.
        - **pNN20**: The proportion of RR intervals greater than 20ms, out of the total number of RR intervals.
        - **TINN**: A geometrical parameter of the HRV, or more specifically, the baseline width of
        the RR intervals distribution obtained by triangular interpolation, where the error of least
        squares determines the triangle. It is an approximation of the RR interval distribution.
        - **HTI**: The HRV triangular index, measuring the total number of RR intervals divded by the
        height of the RR intervals histogram.

    See Also
    --------
    ecg_peaks, ppg_peaks, hrv_frequency, hrv_summary, hrv_nonlinear

    Examples
    --------
    >>> import neurokit2 as nk
    >>>
    >>> # Download data
    >>> data = nk.data("bio_resting_5min_100hz")
    >>>
    >>> # Find peaks
    >>> peaks, info = nk.ecg_peaks(data["ECG"], sampling_rate=100)
    >>>
    >>> # Compute HRV indices
    >>> hrv = nk.hrv_time(peaks, sampling_rate=100, show=True)

    References
    ----------
    - Ciccone, A. B., Siedlik, J. A., Wecht, J. M., Deckert, J. A., Nguyen, N. D., & Weir, J. P.
    (2017). Reminder: RMSSD and SD1 are identical heart rate variability metrics. Muscle & nerve,
    56(4), 674-678.

    - Stein, P. K. (2002). Assessing heart rate variability from real-world Holter reports. Cardiac
    electrophysiology review, 6(3), 239-244.

    - Shaffer, F., & Ginsberg, J. P. (2017). An overview of heart rate variability metrics and norms.
    Frontiers in public health, 5, 258.

    
Computes time-domain indices of Heart Rate Variability (HRV).
See references for details.

Parameters

peaks : dict
Samples at which cardiac extrema  occur.
Can be a list of indices or the output(s) of other functions such as ecg_peaks,
ppg_peaks, ecg_process or bio_process.
sampling_rate : int, optional
Sampling rate (Hz) of the continuous cardiac signal in which the peaks occur. Should be at
least twice as high as the highest frequency in vhf. By default 1000.
show : bool
If True, will plot the distribution of R-R intervals.

Returns

DataFrame
Contains time domain HRV metrics:
RMSSD**: The square root of the mean of the sum of successive differences between
adjacent RR intervals. It is equivalent (although on another scale) to SD1, and
therefore it is redundant to report correlations with both (Ciccone, 2017).
MeanNN**: The mean of the RR intervals.
SDNN**: The standard deviation of the RR intervals.
SDSD**: The standard deviation of the successive differences between RR intervals.
CVNN**: The standard deviation of the RR intervals (SDNN) divided by the mean of the RR
intervals (MeanNN).
CVSD**: The root mean square of the sum of successive differences (RMSSD) divided by the
mean of the RR intervals (MeanNN).
MedianNN**: The median of the absolute values of the successive differences between RR intervals.
MadNN**: The median absolute deviation of the RR intervals.
HCVNN**: The median absolute deviation of the RR intervals (MadNN) divided by the median
of the absolute differences of their successive differences (MedianNN).
IQRNN**: The interquartile range (IQR) of the RR intervals.
pNN50**: The proportion of RR intervals greater than 50ms, out of the total number of RR intervals.
pNN20**: The proportion of RR intervals greater than 20ms, out of the total number of RR intervals.
TINN**: A geometrical parameter of the HRV, or more specifically, the baseline width of
the RR intervals distribution obtained by triangular interpolation, where the error of least
squares determines the triangle. It is an approximation of the RR interval distribution.
HTI**: The HRV triangular index, measuring the total number of RR intervals divded by the
height of the RR intervals histogram.

See Also



Examples



References

Ciccone, A. B., Siedlik, J. A., Wecht, J. M., Deckert, J. A., Nguyen, N.

Stein, P. K.

Shaffer, F., & Ginsberg, J. P.
Computes time - domain indices of Heart Rate Variability ( HRV ) . See references for details . Parameters peaks : dict Samples at which cardiac extrema occur . Can be a list of indices or the output ( s ) of other functions such as ecg_peaks ppg_peaks ecg_process or bio_process . sampling_rate : int optional Sampling rate ( Hz ) of the continuous cardiac signal in which the peaks occur . Should be at least twice as high as the highest frequency in vhf . By default 1000 . show : bool If True will plot the distribution of R - R intervals . Returns DataFrame Contains time domain HRV metrics : RMSSD ** : The square root of the mean of the sum of successive differences between adjacent RR intervals . It is equivalent ( although on another scale ) to SD1 and therefore it is redundant to report correlations with both ( Ciccone 2017 ) . MeanNN ** : The mean of the RR intervals . SDNN ** : The standard deviation of the RR intervals . SDSD ** : The standard deviation of the successive differences between RR intervals . CVNN ** : The standard deviation of the RR intervals ( SDNN ) divided by the mean of the RR intervals ( MeanNN ) . CVSD ** : The root mean square of the sum of successive differences ( RMSSD ) divided by the mean of the RR intervals ( MeanNN ) . MedianNN ** : The median of the absolute values of the successive differences between RR intervals . MadNN ** : The median absolute deviation of the RR intervals . HCVNN ** : The median absolute deviation of the RR intervals ( MadNN ) divided by the median of the absolute differences of their successive differences ( MedianNN ) . IQRNN ** : The interquartile range ( IQR ) of the RR intervals . pNN50 ** : The proportion of RR intervals greater than 50ms out of the total number of RR intervals . pNN20 ** : The proportion of RR intervals greater than 20ms out of the total number of RR intervals . TINN ** : A geometrical parameter of the HRV or more specifically the baseline width of the RR intervals distribution obtained by triangular interpolation where the error of least squares determines the triangle . It is an approximation of the RR interval distribution . HTI ** : The HRV triangular index measuring the total number of RR intervals divded by the height of the RR intervals histogram . See Also Examples References Ciccone A . B . Siedlik J . A . Wecht J . M . Deckert J . A . Nguyen N . Stein P . K . Shaffer F . & Ginsberg J . P .
def hrv_time(peaks, sampling_rate=1000, show=False, **kwargs):
    peaks = _hrv_sanitize_input(peaks)
    if isinstance(peaks, tuple):  
        peaks, sampling_rate = peaks[0], peaks[1]
    rri = _hrv_get_rri(peaks, sampling_rate=sampling_rate, interpolate=False)
    diff_rri = np.diff(rri)
    out = {}  
    out["RMSSD"] = np.sqrt(np.mean(diff_rri ** 2))
    out["MeanNN"] = np.nanmean(rri)
    out["SDNN"] = np.nanstd(rri, ddof=1)
    out["SDSD"] = np.nanstd(diff_rri, ddof=1)
    out["CVNN"] = out["SDNN"] / out["MeanNN"]
    out["CVSD"] = out["RMSSD"] / out["MeanNN"]
    out["MedianNN"] = np.nanmedian(rri)
    out["MadNN"] = mad(rri)
    out["MCVNN"] = out["MadNN"] / out["MedianNN"]  
    out["IQRNN"] = scipy.stats.iqr(rri)
    nn50 = np.sum(np.abs(diff_rri) > 50)
    nn20 = np.sum(np.abs(diff_rri) > 20)
    out["pNN50"] = nn50 / len(rri) * 100
    out["pNN20"] = nn20 / len(rri) * 100
    bar_y, bar_x = np.histogram(rri, bins="auto")
    out["TINN"] = np.max(bar_x) - np.min(bar_x)  
    out["HTI"] = len(rri) / np.max(bar_y)  
    if show:
        _hrv_time_show(rri, **kwargs)
    out = pd.DataFrame.from_dict(out, orient="index").T.add_prefix("HRV_")
    return out
def hrv_time ( peaks , sampling_rate = 1000 , show = False , ** kwargs ) : peaks = _hrv_sanitize_input ( peaks ) if isinstance ( peaks , tuple ) : peaks , sampling_rate = peaks [ 0 ] , peaks [ 1 ] rri = _hrv_get_rri ( peaks , sampling_rate = sampling_rate , interpolate = False ) diff_rri = np . diff ( rri ) out = { } out [ "RMSSD" ] = np . sqrt ( np . mean ( diff_rri ** 2 ) ) out [ "MeanNN" ] = np . nanmean ( rri ) out [ "SDNN" ] = np . nanstd ( rri , ddof = 1 ) out [ "SDSD" ] = np . nanstd ( diff_rri , ddof = 1 ) out [ "CVNN" ] = out [ "SDNN" ] / out [ "MeanNN" ] out [ "CVSD" ] = out [ "RMSSD" ] / out [ "MeanNN" ] out [ "MedianNN" ] = np . nanmedian ( rri ) out [ "MadNN" ] = mad ( rri ) out [ "MCVNN" ] = out [ "MadNN" ] / out [ "MedianNN" ] out [ "IQRNN" ] = scipy . stats . iqr ( rri ) nn50 = np . sum ( np . abs ( diff_rri ) > 50 ) nn20 = np . sum ( np . abs ( diff_rri ) > 20 ) out [ "pNN50" ] = nn50 / len ( rri ) * 100 out [ "pNN20" ] = nn20 / len ( rri ) * 100 bar_y , bar_x = np . histogram ( rri , bins = "auto" ) out [ "TINN" ] = np . max ( bar_x ) - np . min ( bar_x ) out [ "HTI" ] = len ( rri ) / np . max ( bar_y ) if show : _hrv_time_show ( rri , ** kwargs ) out = pd . DataFrame . from_dict ( out , orient = "index" ) . T . add_prefix ( "HRV_" ) return out
Computes time-domain indices of Heart Rate Variability (HRV).
Computes time - domain indices of Heart Rate Variability ( HRV ) .
"""Computes time-domain indices of Heart Rate Variability (HRV).

     See references for details.

    Parameters
    ----------
    peaks : dict
        Samples at which cardiac extrema (i.e., R-peaks, systolic peaks) occur.
        Can be a list of indices or the output(s) of other functions such as ecg_peaks,
        ppg_peaks, ecg_process or bio_process.
    sampling_rate : int, optional
        Sampling rate (Hz) of the continuous cardiac signal in which the peaks occur. Should be at
        least twice as high as the highest frequency in vhf. By default 1000.
    show : bool
        If True, will plot the distribution of R-R intervals.

    Returns
    -------
    DataFrame
        Contains time domain HRV metrics:
        - **RMSSD**: The square root of the mean of the sum of successive differences between
        adjacent RR intervals. It is equivalent (although on another scale) to SD1, and
        therefore it is redundant to report correlations with both (Ciccone, 2017).
        - **MeanNN**: The mean of the RR intervals.
        - **SDNN**: The standard deviation of the RR intervals.
        - **SDSD**: The standard deviation of the successive differences between RR intervals.
        - **CVNN**: The standard deviation of the RR intervals (SDNN) divided by the mean of the RR
        intervals (MeanNN).
        - **CVSD**: The root mean square of the sum of successive differences (RMSSD) divided by the
        mean of the RR intervals (MeanNN).
        - **MedianNN**: The median of the absolute values of the successive differences between RR intervals.
        - **MadNN**: The median absolute deviation of the RR intervals.
        - **HCVNN**: The median absolute deviation of the RR intervals (MadNN) divided by the median
        of the absolute differences of their successive differences (MedianNN).
        - **IQRNN**: The interquartile range (IQR) of the RR intervals.
        - **pNN50**: The proportion of RR intervals greater than 50ms, out of the total number of RR intervals.
        - **pNN20**: The proportion of RR intervals greater than 20ms, out of the total number of RR intervals.
        - **TINN**: A geometrical parameter of the HRV, or more specifically, the baseline width of
        the RR intervals distribution obtained by triangular interpolation, where the error of least
        squares determines the triangle. It is an approximation of the RR interval distribution.
        - **HTI**: The HRV triangular index, measuring the total number of RR intervals divded by the
        height of the RR intervals histogram.

    See Also
    --------
    ecg_peaks, ppg_peaks, hrv_frequency, hrv_summary, hrv_nonlinear

    Examples
    --------
    >>> import neurokit2 as nk
    >>>
    >>> # Download data
    >>> data = nk.data("bio_resting_5min_100hz")
    >>>
    >>> # Find peaks
    >>> peaks, info = nk.ecg_peaks(data["ECG"], sampling_rate=100)
    >>>
    >>> # Compute HRV indices
    >>> hrv = nk.hrv_time(peaks, sampling_rate=100, show=True)

    References
    ----------
    - Ciccone, A. B., Siedlik, J. A., Wecht, J. M., Deckert, J. A., Nguyen, N. D., & Weir, J. P.
    (2017). Reminder: RMSSD and SD1 are identical heart rate variability metrics. Muscle & nerve,
    56(4), 674-678.

    - Stein, P. K. (2002). Assessing heart rate variability from real-world Holter reports. Cardiac
    electrophysiology review, 6(3), 239-244.

    - Shaffer, F., & Ginsberg, J. P. (2017). An overview of heart rate variability metrics and norms.
    Frontiers in public health, 5, 258.

    """ # Sanitize input # Detect actual sampling rate # Compute R-R intervals (also referred to as NN) in milliseconds # Initialize empty container for results # Mean based # Normalized # Robust # Normalized # Extreme-based # Geometrical domain # Triangular Interpolation of the NN Interval Histogram # HRV Triangular Index
peaks
sampling_rate
show