如何让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)
代码说明:
- 数据准备:按比例拆分训练集和测试集,转换为时间序列对象并绘制训练集趋势。
- 动态模型构建:通过字符串拼接生成模型和预测的代码,用
eval(parse(...))执行,支持forecast包中的大部分模型(比如arima、ets、holtwinters等)。 - 可视化与评估:绘制预测结果和实际值的对比图,并计算预测准确率(MAE、RMSE等指标)。
- 返回值:将所有关键数据打包成列表返回,方便后续分析。
注意:如果某些模型需要额外参数(比如arima的order参数),你可以修改函数,增加参数来传递这些自定义设置,或者在str1中拼接额外参数。
内容的提问来源于stack exchange,提问作者Georgios Kourogiorgas
相关产品推荐
相关产品推荐

