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

R语言建模报错:object 'Delays' not found 求助排查

R建模报错:object 'Delays' not found 排查与解决

问题场景

执行时间序列建模代码时触发找不到Delays的错误,已将Delays从integer转为numeric,且能通过train_set_tsibble$delays获取数值,但报错仍存在;使用内置AirPassengers数据运行同类代码正常。

原代码

train_set_tsibble <- as_tsibble(train_set, index = date, key = Delays)

train_set_tsibble <- train_set_tsibble %>%
    arrange(date)

train_set$Delays <- as.numeric(train_set$Delays)

fit2 <- train_set_tsibble %>%
    model(
        ets = ETS(box_cox(Delays, 0.3)),
        arima = ARIMA(Delays ~ PDQ(0,1,1) + pdq(0,1,1)),
        snaive = SNAIVE(Delays)
  )
fit2

报错信息

Error in eval(y, envir = model$data, enclos = model$specials) : 
  object 'Delays' not found

问题原因

核心错误是将响应变量Delays设为了tsibble的key:

  • tsibble的key是用于区分不同时间序列分组的变量(比如多个地区的销量序列,地区是key),而非要建模的观测变量。
  • AirPassengers是单时间序列,无需指定key,因此同类代码能正常运行;但你的代码把观测变量设为key后,建模函数无法识别其为响应变量。
  • 代码顺序错误:先将train_set转为tsibble,再修改原train_set的Delays类型,导致train_set_tsibble中的Delays类型未同步更新。

修正方案

1. 调整代码顺序,先统一数据类型

先将train_set中的Delays转为numeric,再创建tsibble,避免数据不一致。

2. 正确设置tsibble的索引与key

如果是单时间序列(仅一组以date为时间索引、Delays为观测值的序列),不需要指定key;如果是多序列,需将分组变量设为key,而非观测变量。

修正后的代码

# 先转换数据类型
train_set$Delays <- as.numeric(train_set$Delays)

# 创建tsibble:单序列无需指定key,仅设置时间索引
train_set_tsibble <- as_tsibble(train_set, index = date) %>%
    arrange(date)

# 建模
fit2 <- train_set_tsibble %>%
    model(
        ets = ETS(box_cox(Delays, 0.3)),
        arima = ARIMA(Delays ~ PDQ(0,1,1) + pdq(0,1,1)),
        snaive = SNAIVE(Delays)
  )
fit2

验证逻辑

修正后,train_set_tsibble的结构为:date作为时间索引列,Delays作为观测值列,建模函数能正确识别Delays为响应变量,即可正常运行。

内容的提问来源于stack exchange,提问作者Reynaldo Arias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:03:37