【问题标题】:How to calculate interdaily stability for signal in Python?如何在 Python 中计算信号的日间稳定性?
【发布时间】:2021-08-15 18:28:46
【问题描述】:

我正在尝试将每日稳定性计算为 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()重新采样,然后按小时、分钟和秒分组(我什至没有这样的分辨率)。

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

【问题讨论】:

  • 如果你想用python回答,请不要标记R
  • ...当您使用 pandas 和数据框时,相应地标记您的问题。

标签: python pandas dataframe time-series signal-processing


【解决方案1】:

看起来您的实现是正确的,因为我也在尝试量化休息活动节奏并使用计算出的分数,建模该时间序列是否可行。

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

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

文档字符串中提到的文章是简化等式 a but 的文章。

实际方程如下所示:

这是一项正在进行的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多