如何计算 Python 中信号的日间稳定性?

How to calculate interdaily stability for signal in Python?

我正在尝试计算日间稳定性作为 Python 中机器学习分类的一个特征。我的数据是多天的 - 我正在使用 this dataset (sample CSV)。此数据以分钟频率采样,即我们每小时进行 60 次测量。公式是:

所以我的做法是:

def interdaily_stability(df: pd.DataFrame) -> float:
    X_mean = df["activity"].mean()

    hourly_means = df.resample("H", on="timestamp").mean()["activity"].values
    p = len(hourly_means)

    numerator = (1/p) * np.sum(np.square((hourly_means - X_mean)))
    denominator = df["activity"].var()

    return numerator / denominator
  1. 这个公式对吗?特别是 p 对吗?
  2. 特别是,我是否计算了好几天的正确率?如果不是,我该如何更正?

我知道 pyActigraphy 存在,但那里的实施似乎不适合我的情况,例如那里的数据首先用 .resample("1H").sum() 重新采样,然后按小时、分钟和秒分组(我什至没有这样的分辨率)。

我也尝试从 nparACT 库中翻译 R 中的代码,但我对 R 的了解还不够好:nparACT implementation.

看起来你的实现是正确的,因为我也在尝试量化 rest-activity 节奏并使用计算的分数,建模该时间序列的可行性与否。

探索之后,可以简化日间稳定性 量化activity 模式在一段时间内的一致性。

def interdaily_stability(df: pd.DataFrame,activity_col) -> float:

'''
Interdaily stability was centered and normalized by 
subtracting the overall mean and dividing by the overall 
standard deviation.

ref: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4542004/
'''

# Calculating Mean of the OP Signal
X_mean = df[activity_col].mean()
# Converting to hourly format and computing mean per hour
hourly_means = df.resample("H", on="timestamp").mean()[activity_col].values
# Capturing number of hours we have in our dataset
p = len(hourly_means)
# Centering and normalizing by subtracting the overall mean
numerator = (1/p) * np.sum(np.square((hourly_means - X_mean)))
# Overall standard deviation
denominator = df[activity_col].var()

return numerator / denominator

docstring 中提到的那篇文章是简化方程 a but 的文章。

实际等式如下所示:

这项工作正在进行中。