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

如何让lapply等待每一步执行完成?及R时序预测代码运行咨询

问题2:补全时间序列预测函数代码

根据你给出的截断代码,我帮你补全完整的gkuniforecast函数,它会根据指定的模型生成时间序列预测,并返回训练集、测试集、模型和预测结果:

library(readxl)
library(forecast)
library(dplyr)

data <- read_excel("Time Series/Items.xlsx", col_types = c("date", "numeric"))

gkuniforecast = function(data, Np, Ncolumn, tsfreq, model) { 
  ## Preparation 
  N = ceiling(Np * nrow(data)) # 计算训练集行数
  x = pull(data, Ncolumn) # 提取要预测的列
  train.x = ts(x[1:N], frequency = tsfreq) # 创建训练集时间序列
  test.x <- ts(x[(N+1):nrow(data)], frequency = tsfreq) # 创建测试集时间序列
  plot(train.x, main = "训练集时间序列") 
  
  ## Models 
  # 动态生成模型代码并执行
  str1 = paste0("m_", model, " = ", model, "(train.x)") 
  eval(parse(text = str1))
  
  # 计算预测步长(测试集长度)
  h_length = nrow(data) - N
  # 动态生成预测代码并执行
  str2 = paste0("f_", model, " = forecast(m_", model, ", h = ", h_length, ")")
  eval(parse(text = str2))
  
  # 获取预测结果
  forecast_result = get(paste0("f_", model))
  model_obj = get(paste0("m_", model))
  
  # 绘制预测 vs 实际值对比图
  plot(forecast_result, main = paste(model, "模型预测结果"))
  lines(test.x, col = "red", lty = 2)
  legend("topleft", legend = c("预测值", "实际值"), col = c("blue", "red"), lty = c(1,2))
  
  # 返回结果列表
  return(list(
    train_data = train.x,
    test_data = test.x,
    model = model_obj,
    forecast = forecast_result,
    accuracy = accuracy(forecast_result, test.x) # 计算预测准确率
  ))
}

# 示例调用:用ARIMA模型,80%数据训练,第2列,频率为12(月度数据)
# result <- gkuniforecast(data, Np = 0.8, Ncolumn = 2, tsfreq = 12, model = "arima")
# print(result$accuracy)

代码说明:

  1. 数据准备:按比例拆分训练集和测试集,转换为时间序列对象并绘制训练集趋势。
  2. 动态模型构建:通过字符串拼接生成模型和预测的代码,用eval(parse(...))执行,支持forecast包中的大部分模型(比如arima、ets、holtwinters等)。
  3. 可视化与评估:绘制预测结果和实际值的对比图,并计算预测准确率(MAE、RMSE等指标)。
  4. 返回值:将所有关键数据打包成列表返回,方便后续分析。

注意:如果某些模型需要额外参数(比如arima的order参数),你可以修改函数,增加参数来传递这些自定义设置,或者在str1中拼接额外参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:35