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

