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

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方法要求输入为标量函数)。

  • 调整方案:

    1. 提前完成变量变换:在原始数据中先计算经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()))
      
    2. 预测后还原名义营收:模型预测的是经调整的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)
      
    3. 验证数据结构一致性:确保cpi_fc的分组(如State)、时间索引Date与原始数据完全匹配,避免因结构不兼容导致隐性错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:48:17