ARIMA模型传入CPI预测作为new_data还原变换时报错求助
问题描述
在将CPI预测结果作为new_data传入以还原CPI变换时出现错误,相关代码及报错信息如下:
相关代码
library(fpp3) aus_acc_fit <- aus_accommodation %>% model(ARIMA(resp(Takings)/CPI*100 ~ trend(knots = yearquarter("2008 Q1")) + season())) cpi_fc <- aus_accommodation %>% model(ARIMA(CPI)) %>% forecast(h =6) %>% as_tsibble() %>% select(-.model, -CPI) %>% rename(CPI = .mean) %>% relocate(Date, .before = State) aus_acc_fc <- aus_acc_fit %>% forecast(new_data = cpi_fc)
报错信息
Error in `mutate()`: ! Problem while computing `ARIMA(resp(Takings)/CPI * 100 ~ trend(knots = yearquarter("2008 Q1")) + season()) = (function (object, ...) ...`. Caused by error in `hessian.default()`: ! Richardson method for hessian assumes a scalar valued function. Run `rlang::last_error()` to see where the error occurred.
解决思路
核心原因:
resp()是针对单变量响应的变换函数,在ARIMA公式内将其与CPI变量做运算后,预测阶段函数输出非标量,触发hessian计算报错(hessian方法要求输入为标量函数)。调整方案:
提前完成变量变换:在原始数据中先计算经CPI调整后的营收变量,让
resp()直接作用于单变量建模:# 预处理:计算经CPI调整的实际营收 aus_accommodation <- aus_accommodation %>% mutate(Real_Takings = Takings / CPI * 100) # 基于新变量构建模型 aus_acc_fit <- aus_accommodation %>% model(ARIMA(resp(Real_Takings) ~ trend(knots = yearquarter("2008 Q1")) + season()))预测后还原名义营收:模型预测的是经调整的
Real_Takings,拿到结果后用CPI预测值反向计算名义营收:# 生成实际营收的预测结果 aus_acc_fc <- aus_acc_fit %>% forecast(new_data = cpi_fc) # 还原为名义Takings aus_acc_fc <- aus_acc_fc %>% mutate(Takings_fc = .mean * CPI / 100)验证数据结构一致性:确保
cpi_fc的分组(如State)、时间索引Date与原始数据完全匹配,避免因结构不兼容导致隐性错误。
内容的提问来源于stack exchange,提问作者Matt R
相关产品推荐
相关产品推荐

