这个问题可能太基础了。对于数据的时间趋势,我想找出发生“突变”变化的点。例如,在下面显示的第一个图中,我想使用某种统计方法找出更改点。我想在变化点不明显的其他一些数据中使用这种方法(例如第二张图)。
这个问题可能太基础了。对于数据的时间趋势,我想找出发生“突变”变化的点。例如,在下面显示的第一个图中,我想使用某种统计方法找出更改点。我想在变化点不明显的其他一些数据中使用这种方法(例如第二张图)。
Answers:
如果您的时间序列数据的观测值与之前的观测值相关,那么Chen和Liu(1993)可能会让您感兴趣。它描述了一种在自回归移动平均时间序列模型的框架中检测水平移动和临时变化的方法。
[1]:Chen。C.和Liu,LM。(1993),
“模型参数和时间序列中异常值的联合估计”,《
美国统计协会杂志》,88:421,284-297
Stats中的此问题称为(单变量)时间事件检测。最简单的想法是使用移动平均值和标准偏差。任何“超出” 3个标准偏差(经验法则)的读数均被视为“事件”。当然,还有使用HMM或回归的更高级的模型。这是该领域的介绍性概述。
将一个系列或序列分成理想值恒定的咒语存在一个相关的问题。请参阅如何将数值数据分组为自然形成的“括号”?(例如收入)
这不是一个完全相同的问题,因为该问题并不排除在任何或所有方向上缓慢漂移但没有突然变化的咒语。
一个更直接的答案是说我们正在寻找大的跳跃,所以唯一真正的问题是定义跳跃。那么第一个想法就是看相邻值之间的第一个差异。甚至不清楚您是否需要通过先消除噪声来完善它,就好像无法将跳跃与噪声差异区分开来一样,跳跃肯定也不会突然发生。另一方面,发问者显然希望突变包括渐变和阶跃变化,因此似乎需要某些标准,例如固定长度窗口内的方差或范围。
您要查找的统计信息区域是变更点分析。有一个网站,在这里,这将使你的区域的概况,也有一个网页的软件。
如果您是R
用户,则建议使用changepoint
均值strucchange
更改包和回归更改包。如果您想成为贝叶斯,那么该bcp
包也不错。
通常,您必须选择一个阈值,该阈值指示要查找的更改的强度。当然,在某些情况下,人们会倡导一些阈值选择,您也可以使用渐近的置信度或自举来获得信心。
这个推理问题有很多名称,包括更改点,切换点,断点,折线回归,折线回归,双线性回归,分段线性回归,局部线性回归,分段回归和不连续模型。
这是带有优点/缺点和工作示例的变更点软件包的概述。如果您事先知道更改点的数量,请签出mcp
包装。首先,让我们模拟数据:
df = data.frame(x = seq(1, 12, by = 0.1))
df$y = c(rnorm(21, 0, 5), rnorm(80, 180, 5), rnorm(10, 20, 5))
对于第一个问题,它是三个仅拦截部分:
model = list(
y ~ 1, # Intercept
~ 1, # etc...
~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")
我们可以绘制结果拟合:
plot(fit)
在这里,更改点定义得很好(狭窄)。让我们总结一下合适的位置以查看其推断的位置(cp_1
和cp_2
):
summary(fit)
Family: gaussian(link = 'identity')
Iterations: 9000 from 3 chains.
Segments:
1: y ~ 1
2: y ~ 1 ~ 1
3: y ~ 1 ~ 1
Population-level parameters:
name mean lower upper Rhat n.eff
cp_1 3.05 3.0 3.1 1 6445
cp_2 11.05 11.0 11.1 1 6401
int_1 0.14 -1.9 2.1 1 5979
int_2 179.86 178.8 180.9 1 6659
int_3 22.76 19.8 25.5 1 5906
sigma_1 4.68 4.1 5.3 1 5282
您可以使用进行更复杂的模型mcp
,包括对N阶自回归建模(对时间序列有用)等。免责声明:我是的开发者mcp
。