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

R语言中ARIMA模型残差与拟合值图异常的解决咨询

解决ARIMA残差与拟合值绘图问题

首先咱们先确认核心前提:一定要用forecast包的Arima()函数拟合模型,而不是基础R的stats::arima()——前者返回的对象和forecast生态的工具兼容性更好,能避免很多绘图时的异常问题。

假设你的时间序列对象是ts_data,先按正确方式拟合模型(替换成你实际的p,d,q参数):

library(forecast)
# 拟合ARIMA模型
fit <- Arima(ts_data, order = c(p, d, q))

接下来分两种场景给出绘图方案,完全匹配你想要的参考样式:

场景1:绘制「原始序列+拟合值」时间序列对比图

这是参考链接里最常见的组合样式,用forecast结合ggplot2的autoplot能快速生成美观的结果:

library(ggplot2)
# 自动绘制原始序列,叠加拟合值曲线
autoplot(ts_data) +
  autolayer(fitted(fit), series = "拟合值") +
  labs(title = "原始序列与ARIMA拟合值对比", x = "时间", y = "数值") +
  theme_minimal()

如果偏好基础R绘图系统,也可以这么写:

# 设置2行1列的绘图布局
par(mfrow = c(2, 1))
# 第一幅:原始值+拟合值的时间序列
ts.plot(ts_data, fitted(fit), col = c("black", "steelblue"), lty = c(1, 2))
legend("topright", legend = c("原始值", "拟合值"), col = c("black", "steelblue"), lty = c(1, 2), bty = "n")
title("原始序列与ARIMA拟合值")
# 第二幅:残差时间序列(参考链接常搭配这个)
plot(residuals(fit), type = "l", col = "darkred")
abline(h = 0, lty = 2, col = "gray50")
title("ARIMA残差序列")
# 恢复默认绘图布局
par(mfrow = c(1, 1))

场景2:绘制「残差vs拟合值」散点图

如果你的需求是看残差随拟合值的分布(用于诊断模型假设),可以用以下代码:

ggplot2版本(更美观易调整)

# 把拟合值和残差转成数据框,方便ggplot处理
resid_fit_df <- data.frame(
  拟合值 = as.numeric(fitted(fit)),
  残差 = as.numeric(residuals(fit))
)

ggplot(resid_fit_df, aes(x = 拟合值, y = 残差)) +
  geom_point(alpha = 0.6, color = "darkgreen") +
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  labs(title = "残差 vs 拟合值", x = "拟合值", y = "残差") +
  theme_minimal()

基础R版本

plot(fitted(fit), residuals(fit), 
     xlab = "拟合值", ylab = "残差", 
     main = "残差 vs 拟合值",
     pch = 16, col = "darkgreen")
abline(h = 0, lty = 2, col = "red")

关键注意事项

  • 如果你之前用的是stats::arima()拟合的模型,只需用fit <- as.Arima(fit)转换对象,就能兼容上述所有绘图代码。
  • 之前用ts.plot出问题,大概率是因为输入的序列时间索引不匹配——forecast::Arima()生成的fitted(fit)和原始序列是同索引的,不会出现这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:13:00