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
相关产品推荐
相关产品推荐

