You need to enable JavaScript to run this app. 在R中参数化命名对象实现按INDEX分组运行forecast库时间序列模型
优惠活动
大模型
产品
解决方案
定价
更多

在R中参数化命名对象实现按INDEX分组运行forecast库时间序列模型

R语言分组运行时间序列模型的实现方案

方法1:for循环生成带INDEX后缀的独立对象(完全匹配你的命名需求)

直接通过assign()函数动态生成带对应序号后缀的对象,代码如下:

# 加载必要包
library(forecast)

# 遍历INDEX 1到10
for (i in 1:10) {
  # 筛选当前分组数据
  ts_obj <- dataset[dataset$INDEX == i, ]
  ts_obj <- ts(ts_obj$y, frequency = 12)
  
  n_obj <- length(ts_obj)
  
  # 拆分训练集测试集
  train_obj <- ts(ts_obj[1:(n_obj - 12)], frequency = 12)
  test_obj <- ts_obj[(n_obj - 11):n_obj]
  
  # 模型预测+计算准确率
  for_obj <- forecast(train_obj, model = arima, h = 12)
  acc_obj <- accuracy(for_obj, test_obj)
  
  # 动态生成带后缀的对象存入全局环境
  assign(paste0("ts_", i), ts_obj)
  assign(paste0("n_", i), n_obj)
  assign(paste0("train_", i), train_obj)
  assign(paste0("test_", i), test_obj)
  assign(paste0("for_", i), for_obj)
  assign(paste0("acc_", i), acc_obj)
}

运行完成后你就可以直接调用ts_1、for_5、acc_10这类对象使用。

方法2:列表存储方案(更推荐)

生成大量零散独立对象后续调用、批量处理时效率很低,更建议将结果统一存在列表中,代码如下:

library(forecast)

# 初始化空列表存储结果
ts_list <- list()
train_list <- list()
test_list <- list()
for_list <- list()
acc_list <- list()

for (i in 1:10) {
  ts_list[[i]] <- dataset[dataset$INDEX == i, ]
  ts_list[[i]] <- ts(ts_list[[i]]$y, frequency = 12)
  
  n <- length(ts_list[[i]])
  train_list[[i]] <- ts(ts_list[[i]][1:(n - 12)], frequency = 12)
  test_list[[i]] <- ts_list[[i]][(n - 11):n]
  
  for_list[[i]] <- forecast(train_list[[i]], model = arima, h = 12)
  acc_list[[i]] <- accuracy(for_list[[i]], test_list[[i]])
}

# 调用示例:取INDEX=3的准确率结果
acc_list[[3]]

注意事项

  • 如果你用的是自动选择最优阶数的ARIMA模型,将代码里的model = arima替换为model = auto.arima即可
  • 运行前请确保你的dataset中存在名为INDEX的列,且取值覆盖1到10的整数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:48:00