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
相关产品推荐
相关产品推荐

