寻找时间序列中的事件模式

机器算法验证 r 时间序列 模式识别
2022-03-27 01:10:17

我有一个时间过程实验,跟踪 8 个治疗组,每组 12 条鱼,持续 24 小时,每隔 5 秒进行一次观察。在进行的测量中,每条鱼在观察之间移动了多远(以毫米为单位)。24 小时分为 1 个暗期和 1 个亮期。

这是治疗组 H 中 12 条个体鱼在黑暗期的第一个小时内的运动图:

对照组在黑暗的第一个小时

您可以看到在此特定窗口期间,一些鱼有很长一段时间不活动,一些很短,而另一些则没有我需要结合治疗组中所有 12 条鱼的数据,以确定整个黑暗期和整个光照期的休息期的长度和频率。我需要为每个治疗组执行此操作。然后我需要比较他们的休息时间长度和频率之间的差异。

我不是统计专家,而且我完全在海上。这个问题对我来说类似于序列比对(我的生物信息学背景),所以我在考虑隐马尔可夫模型,但这可能有点离谱。谁能提出一个解决这个问题的好方法,也许是 R 中的一个小例子?

谢谢!

1个回答

我认为基于 HMM 的分析可能对您有所帮助。由于您知道您正在寻找静止和运动之间的区别,因此您可以假设一个 2 状态模型。对于 HMM,您需要指定每个状态的发射概率。我的第一次尝试是对静止阶段使用指数(或伽玛?)(因为它从下方以零为界,而其他状态为正态分布(你应该将初始参数设置为某个合理的值)。你然后可以计算后验状态分布以及参数的最大似然估计。后验状态序列可以为您提供休息和活动期的估计长度(只需计算连续状态的数量)。您甚至可以将暗/亮时期作为模型的协变量。

这个http://cran.r-project.org/web/packages/depmixS4/index.html是一个很棒的 HMM 包。这个http://cran.r-project.org/web/packages/depmixS4/vignettes/depmixS4.pdf小插图有非常有用的信息,关于它的应用和约束的使用以及与 HMM 的协变量。

我看到的一个问题是你有多条鱼。您应该首先为每条鱼分别安装一个 HMM。如果你能以某种方式“标准化”活动,以便它们可以产生相同的发射概率参数,也许你可以组合鱼。或者您可以使用鱼数作为协变量。

一些示例代码:

require(depmixS4)
set.seed(1)
mod <- depmix( activity~1, data=yourdata, nstates=2,
               family=gaussian() );
fitted <- fit(mod)

但是有很多很多的可能性,请查看上面的链接!

祝你的项目好运!