评估细胞信号数据时间序列中的峰值

机器算法验证 时间序列 Python 信号检测
2022-03-26 23:48:28

我正在测量细胞信号测量中是否存在响应。我所做的是首先将平滑算法(汉宁)应用于数据的时间序列,然后检测峰值。我得到的是: 细胞信号反应时间序列

如果我想让响应的检测比“是的,你看到持续下降的上升”更客观,那么最好的方法是什么?是从线性回归确定的基线得到峰的距离吗?

(我是一个python coder,对统计几乎一无所知)

谢谢

2个回答

因此,从您 10 月 25 日的评论看来,您对通过算法查找和表征两个主要特征感兴趣:初始响应衰减,然后是响应增加和随后衰减的循环。我假设数据是在离散的时间间隔内观察到的。

这是我会尝试的:

  1. 使用numpy.ma.polyfit 之类的例程来拟合数据,例如 4 次多项式。这应该考虑到最初的下跌,然后是上涨/下跌,但会消除众多但很小的波动。希望这种多项式的次数足够灵活,可以很好地适应其他类似的系列。我认为的主要目标是获得一个能够解释您正在寻找的主要模式的功能。
  2. 使用 Python 例程计算拟合数据的多项式函数的导数。示例例程是 scipy.misc.derivative 和 numpy.diff。您正在寻找一阶导数为零的时间值,表示函数的可能局部最小值或最大值。可以使用二阶导数测试来确认哪个点对应于最小值或最大值。如果您显示的图表具有代表性,大概您将拥有三个这样的点。请注意,sage 项目在这里可能非常有价值。
  3. 此时,您将拥有与相关的时间值

    一种。初始衰减的开始

    湾。上升的开始

    C。第二次衰变的开始

然后,您可以通过分析执行您想要的操作来评估更改。

最好让数据自己说话:跨多个系列,当你应用这种方法时,上升时的典型规模变化是什么,通常什么时候进入衰退期,持续多长时间?这种上升的分布在哪里、有多大和持续了多久?了解这些统计数据后,您可以更好地将特定的上升描述为在公差范围内,关于它发生的时间地点以及它的大小和持续时间。据我了解,关键是要轻松确定这些变化发生在哪里。我所描述的其余部分可以直接计算。

这里有一些想法,但我不以为然,这可能会奏效......

导数:如果你把你的数组和元素相减,得到一个少一个点的数组,但这是一阶导数。如果你现在平滑它并寻找符号变化,那可能会检测到你的凹凸。

移动平均线:也许使用 2 个滞后(指数或窗口)移动平均线可能会显示大的凸起而忽略小的凸起。基本上,较小窗口移动平均线的宽度必须大于您要忽略的凹凸的宽度。更宽的 EMA 必须更宽但不能太宽以检测到凹凸。

您寻找它们何时交叉并减去滞后(窗口/ 2),这就是您的颠簸所在的估计值。 http://www.stockopedia.com/content/trading-the-golden-cross-does-it-really-work-69694/

线性模型:做一系列足够宽度的线性模型,有几个小凸点宽,比如说 100 个点。现在循环遍历数据集,在 X 变量上生成线性回归。只需查看 X 的系数,就可以看到符号大变化发生在哪里。那是一个很大的障碍。

以上只是我的猜测,可能有更好的方法。