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

在R中使用auto.arima预测值为负且绘图X轴值异常,求解决

问题描述

预测绘图
用R跑auto.arima做每日入院人数预测时碰到两个异常:

  • 输出的所有预测值全为负数
  • 绘图的X轴显示负数,实际应该是正数

用到的代码:

M1 = auto.arima(`Number of Daily Admissions`, stepwise = FALSE,approximation = FALSE,trace = TRUE)

forecast_values <- forecast(M1, h = 90, level = c(80))

print(forecast_values)
解决思路

1. X轴负值:时间序列索引未正确设置

如果你的入院人数数据只是普通向量,没有转换成带正确时间索引的时间序列对象,forecast绘图时会默认使用序列的位置索引,很可能出现负数轴。

解决办法:
将数据转为ts对象,指定起始时间和频率(按日数据的话频率设为365):

# 假设数据从2023年1月1日开始,每日一条
ts_data <- ts(`Number of Daily Admissions`, start = c(2023, 1), frequency = 365)
M1 <- auto.arima(ts_data, stepwise = FALSE, approximation = FALSE, trace = TRUE)
forecast_values <- forecast(M1, h = 90, level = c(80))
plot(forecast_values)

如果已经是时间序列对象,检查起始参数是否误设为负数,改回正常年份/周期即可。

2. 预测值为负:模型适配性问题

入院人数是计数型数据(不可能为负),但auto.arima默认使用高斯模型,这类模型允许输出负值。

解决办法:
改用适合计数数据的分布模型,比如泊松或负二项分布:

# 泊松分布ARIMA(适配常规离散计数数据)
M1 <- auto.arima(`Number of Daily Admissions`, stepwise = FALSE, approximation = FALSE, trace = TRUE,
                 family = "poisson")

# 负二项分布(适配数据过度离散的情况)
M1 <- auto.arima(`Number of Daily Admissions`, stepwise = FALSE, approximation = FALSE, trace = TRUE,
                 family = "negbin")

如果临时应急,也可以强制将预测值中的负数替换为0(但不如更换模型严谨):

forecast_values$mean <- pmax(forecast_values$mean, 0)
forecast_values$lower <- pmax(forecast_values$lower, 0)
forecast_values$upper <- pmax(forecast_values$upper, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:34:51