我使用cpt.mean
计算了变化点检测,此语法的输出给出了constant mean
以及跨时间序列的相应位置。所以我在这里尝试为下面可重复的示例创建相同的数据集。
s <- data.frame(Tag = c(1,1,1,2,2,2,2),row = c(1,12,22,1,7,9,16),constant_mean=c(-0.12,1.55,0,0.35,1.6,0.86,0))
所以在这里可以看到有三列Tag
,row
&amp; constant_mean
因此,我们仅为此Tag=1
的{{1}}举例说明,Maximum rows would be 22
常量均值为-0.12。然后row 1 to row 12
常数均值为1.55。 row13 to row22
。与图片类似,如下所示。
答案 0 :(得分:3)
以下是使用data.table
的建议library(data.table)
res <-
setDT(s)[,
.SD[c(1L, rep(1L : (.N - 1L), diff(row)))],
by = Tag
][, row := .I] # don't think this is needed
res
# Tag row constant_mean
# 1: 1 1 -0.12
# 2: 1 2 -0.12
# 3: 1 3 -0.12
# 4: 1 4 -0.12
# 5: 1 5 -0.12
# 6: 1 6 -0.12
# 7: 1 7 -0.12
# 8: 1 8 -0.12
# 9: 1 9 -0.12
# 10: 1 10 -0.12
# 11: 1 11 -0.12
# 12: 1 12 -0.12
# 13: 1 13 1.55
# 14: 1 14 1.55
# 15: 1 15 1.55
# 16: 1 16 1.55
# 17: 1 17 1.55
# 18: 1 18 1.55
# 19: 1 19 1.55
# 20: 1 20 1.55
# 21: 1 21 1.55
# 22: 1 22 1.55
# 23: 2 23 0.35
# 24: 2 24 0.35
# 25: 2 25 0.35
# 26: 2 26 0.35
# 27: 2 27 0.35
# 28: 2 28 0.35
# 29: 2 29 0.35
# 30: 2 30 1.60
# 31: 2 31 1.60
# 32: 2 32 0.86
# 33: 2 33 0.86
# 34: 2 34 0.86
# 35: 2 35 0.86
# 36: 2 36 0.86
# 37: 2 37 0.86
# 38: 2 38 0.86
这基本上用row
中的差异消耗每个标记的行数。我在开头添加了1
,因为每个组中的row
都是从1
开始的,因此差异总是短一个。
关于row
,我不确定您是否只需要整个行号(这是多余的IMO),或者您想要Tag
。如果是后一种情况,那么这就像[, row := as.numeric(seq_len(.N)), by = Tag]
答案 1 :(得分:0)
更通用的解决方案是使用mcp
包来模拟变更点数据。时间序列通常涉及自相关,因此我们将其包括在内。
library(mcp)
empty = mcp(model, sample = FALSE, par_x = "x")
df = data.frame(x = 1:200)
df$y = empty$simulate(
df$x,
cp_1 = 90, # where the change point occurs
int_1 = -0.12, # intercept of segment 1
int_2 = 1.66, # intercept of segment 2
ar1_1 = 0.6, # autoregressive strength
sigma_1 = 0.5) # standard deviations of the residuals (innovations)
让我们继续使用mcp
来看看我们是否可以恢复这些参数,还可以获取显示数据的默认图:
fit = mcp(model, df, par_x = "x")
plot(fit)
请参阅参数估算值:
summary(fit)
Family: gaussian(link = 'identity')
Iterations: 9000 from 3 chains.
Segments:
1: y ~ 1 + ar(1)
2: y ~ 1 ~ 1
Population-level parameters:
name match sim mean lower upper Rhat n.eff
ar1_1 OK 0.60 0.61 0.49 0.75 1 164
cp_1 90.00 90.04 89.01 89.99 1 15
int_1 -0.12 -0.45 -0.75 -0.18 1 391
int_2 OK 1.66 1.48 1.22 1.73 1 1178
sigma_1 OK 0.50 0.50 0.45 0.55 1 681
This site包含有关使用mcp
建模时间序列数据的更多信息。披露:我是mcp
的开发人员。