如何在R中对ets()预测的归一化时间序列数据进行反归一化?
解决ETS预测结果的反归一化问题
你用的是min-max归一化,反归一化的核心是利用原始训练集的最小值和最大值(必须是未归一化的训练集统计量,不能用归一化后的数据),通过逆运算还原数据。
步骤1:提前保存训练集的关键统计量
你的归一化函数仅返回了归一化后的数据,需要先保存原始训练集的min和max,这是反归一化的核心依据:
# 保存原始训练集的最小值和最大值 ibm_train_min <- min(ibm_train) ibm_train_max <- max(ibm_train) # 执行原有归一化操作 normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) } normalized_ibm <- normalize(ibm_train)
步骤2:建模并生成归一化后的预测结果
继续完成ETS建模和预测步骤:
library(forecast) library(fpp) ets_ibm <- ets(normalized_ibm) # 假设需要预测12个时间步长,可根据需求调整h值 forecast_normalized <- forecast(ets_ibm, h = 12)
步骤3:对预测结果执行反归一化
利用之前保存的ibm_train_min和ibm_train_max,对预测的均值、上下置信区间做逆变换:
# 反归一化公式:原始值 = 归一化值 × (max - min) + min forecast_original <- forecast_normalized forecast_original$mean <- forecast_normalized$mean * (ibm_train_max - ibm_train_min) + ibm_train_min forecast_original$lower <- forecast_normalized$lower * (ibm_train_max - ibm_train_min) + ibm_train_min forecast_original$upper <- forecast_normalized$upper * (ibm_train_max - ibm_train_min) + ibm_train_min
处理完成后,forecast_original就是还原到原始数据尺度的预测结果,可直接用于分析或可视化。
内容的提问来源于stack exchange,提问作者hummingbird
相关产品推荐
相关产品推荐

