如何在R中手动复现时间序列ARIMA模型的MAPE计算?
理解并复现ARIMA训练集MAPE计算
一、MAPE的核心计算逻辑
MAPE(平均绝对百分比误差)的计算逻辑是:对每个时间点,计算实际值与模型拟合值的绝对误差占实际值的比例,再取所有点的平均值并转换为百分比。公式如下:
MAPE = (1/n) × Σ(|(实际值 - 拟合值)/实际值|) × 100
需要明确的是:auto.arima返回的训练集MAPE并非通过滚动预测计算,而是基于模型对训练集的**内样本拟合值(in-sample fitted values)**计算的——也就是用整个训练集拟合的模型,直接对每个训练点生成拟合值,再计算误差均值。
二、R中手动复现步骤
以下是完整的验证与复现代码,假设你已经有模拟的时间序列数据:
1. 模拟数据并拟合ARIMA模型
library(forecast) # 模拟季节性时间序列(示例) set.seed(123) sim_ts <- ts(rnorm(100, mean = 50, sd = 5), frequency = 12) # 用auto.arima拟合季节性ARIMA模型 arima_model <- auto.arima(sim_ts)
2. 提取实际值与拟合值
actual_values <- sim_ts fitted_values <- fitted(arima_model) # 获取模型对训练集的拟合值
3. 手动计算MAPE
# 计算每个时间点的绝对百分比误差(APE) ape <- abs((actual_values - fitted_values) / actual_values) # 计算平均绝对百分比误差(MAPE) manual_mape <- mean(ape, na.rm = TRUE) * 100 cat("手动计算的训练集MAPE:", manual_mape, "\n")
4. 与auto.arima的结果对比
用accuracy()函数查看模型自带的评估指标,其中的MAPE值应与手动计算结果一致:
# 查看auto.arima输出的训练集指标 accuracy(arima_model)
三、滚动预测MAPE的计算(若需验证)
如果你想验证滚动预测的MAPE(常用于时间序列交叉验证),可以用tsCV函数实现,这与训练集拟合值的MAPE逻辑不同:
# 滚动一步预测,计算交叉验证误差 tscv_errors <- tsCV(sim_ts, function(x) auto.arima(x), h = 1) # 计算滚动预测的MAPE rolling_mape <- mean(abs(tscv_errors / sim_ts[-1]), na.rm = TRUE) * 100 cat("滚动预测的MAPE:", rolling_mape, "\n")
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

