如何在R中批量运行auto.arima并配置非规则时间序列参数
不规则间隔时间序列处理解决方案
针对你提出的三个问题,以下是基于R语言的实操方案:
1. 小数日期转dd-mm-yyyy格式的时间序列对象
不规则间隔的时间序列不适合用传统的ts对象,推荐使用xts存储,先将小数日期转换为标准Date类型:
# 加载依赖包 library(lubridate) library(xts) # 假设数据集名为df,小数日期列名为decimal_date # 把小数日期转换为dd-mm-yyyy格式的Date类型 df$date <- date_decimal(df$decimal_date) # 转换为xts格式的时间序列对象(保留原始间隔) ts_obj <- xts(df[, !names(df) %in% c("decimal_date", "date")], order.by = df$date)
注:date_decimal()会直接将类似2023.123的小数日期转换为对应的公历日期,后续xts对象会以date列作为索引,完整保留数据的不规则间隔特性。
2. 批量执行auto.arima并设置frequency参数
由于是不规则间隔时间序列,无法设置固定的frequency(如月度数据的12),需将frequency设为NA,让auto.arima自动识别序列特性并选择最优模型:
library(forecast) library(purrr) # 提取所有需要建模的变量名 var_names <- colnames(ts_obj) # 批量拟合auto.arima模型 arima_models <- map(var_names, function(var) { auto.arima(ts_obj[, var], frequency = NA) }) # 为模型列表命名,方便后续调用 names(arima_models) <- var_names
注:如果你的数据存在大致的周期规律(比如平均间隔4天,年周期约91次),也可以手动设置frequency = 91,但不规则间隔下优先推荐frequency = NA。
3. 生成间隔4天的5个未来日期并完成预测
先基于最后一个观测日期生成目标预测日期,再批量执行预测:
# 获取序列的最后一个观测日期 last_obs_date <- index(last(ts_obj)) # 生成未来5个间隔4天的日期 future_dates <- seq(last_obs_date + 4, by = "4 days", length.out = 5) # 批量预测并绑定日期 forecast_outputs <- map(arima_models, function(model) { # 预测5步 fc <- forecast(model, h = 5) # 将预测结果与未来日期整合为数据框 data.frame( 日期 = format(future_dates, "%d-%m-%Y"), 点预测 = fc$mean, 80%置信下限 = fc$lower[, "80%"], 80%置信上限 = fc$upper[, "80%"], 95%置信下限 = fc$lower[, "95%"], 95%置信上限 = fc$upper[, "95%"] ) })
执行后,forecast_outputs是一个列表,每个元素对应一个变量的预测结果,包含指定格式的日期和置信区间。
内容的提问来源于stack exchange,提问作者psysky
相关产品推荐
相关产品推荐

