You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为1000组模拟数据实现变点检测后的分段均值计算?

解决变点检测的批量分段均值计算问题

1. 修复单组分段均值计算逻辑

你原来的循环代码存在索引错误,这里提供一个更可靠的单组计算函数:

calculate_segment_means <- function(data_vec, cps) {
  # 生成分段的起始与结束索引
  segment_starts <- c(1, cps + 1)
  segment_ends <- c(cps, length(data_vec))
  
  # 计算每个分段的均值
  sapply(seq_along(segment_starts), function(idx) {
    mean(data_vec[segment_starts[idx]:segment_ends[idx]])
  })
}

用你的示例数据测试验证:

set.seed(111)
f <- rep(c(0, 5, 2, 8, 1, -2), c(100, 200, 200, 50, 200, 250))
x <- f + arima.sim(list(ar = c(.75, -.5), ma = c(.8, .7, .6, .5, .4, .3)), n = length(f), sd = 1)
wc <- wcm.gsa(x)
CP <- wc$cp

# 输出分段均值
calculate_segment_means(x, CP)

2. 批量处理1000组数据

你已经通过sapply得到了1000组数据的变点列表m,现在用mapply配对每组数据和对应的变点,批量计算:

# 将数据框转为列表(每列对应一组数据)
data_list <- as.list(y)

# 批量计算所有组的分段均值,保留列表格式适配不同分段数
all_segment_means <- mapply(calculate_segment_means, data_vec = data_list, cps = m, SIMPLIFY = FALSE)

结果说明

  • all_segment_means是长度为1000的列表,每个元素对应一组数据的分段均值向量
  • 如果所有组的分段数一致,可通过do.call(rbind, all_segment_means)将结果转为数据框;若分段数有差异,建议保留列表格式方便后续处理

内容的提问来源于stack exchange,提问作者Tare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:52:50