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

R语言ARIMA模型使用fortify导出时日期格式异常问题求助

ARIMA模型输出日期格式异常修复方案

问题原因

ts()函数生成的时间序列默认使用小数年份作为索引,且你设置的frequency=365不符合股票仅交易日开市的规则,会出现日期错位,最终导致导出数据的日期显示为2007.000这类数值格式。

修复代码

直接保留原始数据的真实日期,再拼接预测结果即可避免该问题:

library(ggplot2)
library(quantmod)
library(forecast)
library(lubridate) # 未安装可先运行 install.packages("lubridate")

# 拉取原始数据并保留标准日期列
getSymbols("GOOG")
raw_data <-  as.data.frame(GOOG) |> 
  tibble::rownames_to_column("Fecha") 
raw_data$Fecha <- as.Date(raw_data$Fecha)

# 拟合ARIMA模型
ts_data <- ts(raw_data$GOOG.Close, start = 2007, frequency = 365)
d.arima <- forecast::auto.arima(ts_data)
d.forecast <- forecast::forecast(d.arima, level = c(95), h = 50)

# 拼接历史数据与预测结果,使用真实日期
# 历史部分
history_df <- data.frame(
  Fecha = raw_data$Fecha,
  Data = raw_data$GOOG.Close,
  Fitted = d.arima$fitted,
  `Point Forecast` = NA_real_,
  `Lo 95` = NA_real_,
  `Hi 95` = NA_real_
)
# 预测部分:生成未来50个交易日日期(自动跳过周末)
forecast_dates <- seq.Date(from = max(raw_data$Fecha) + 1, by = "day", length.out = 100) |> 
  Filter(function(x) !wday(x) %in% c(1,7), x = _) |> 
  head(50)
forecast_df <- data.frame(
  Fecha = forecast_dates,
  Data = NA_real_,
  Fitted = NA_real_,
  `Point Forecast` = as.numeric(d.forecast$mean),
  `Lo 95` = as.numeric(d.forecast$lower),
  `Hi 95` = as.numeric(d.forecast$upper)
)
# 合并得到最终结果
final_data <- rbind(history_df, forecast_df)

验证效果

运行head(final_data)即可得到符合预期的yyyy-mm-dd格式日期输出:

Fecha     Data   Fitted Point Forecast Lo 95 Hi 95
1 2007-01-03 232.9220 232.8178             NA    NA    NA
2 2007-01-04 240.7277 241.0227             NA    NA    NA
3 2007-01-05 242.6853 247.0522             NA    NA    NA
4 2007-01-08 240.8871 247.0309             NA    NA    NA

注:2007-01-06为周末无交易,原始股票数据不存在该日期,因此输出的第四条对应实际交易日2007-01-08

内容的提问来源于stack exchange,提问作者Jorge Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:09:03