使用tsibble拟合ARIMA模型时出现‘lambda未找到’错误求助
问题解决:
object 'lambda' not found 错误修复 错误原因
- 生成的
sum_tourism丢失了时间索引(Quarter),导致拆分后的子集不是有效的时间序列对象(tsibble),feasts::features无法正确提取Guerrero lambda值。 - 传递给
fit函数的col参数是数值向量(.x$sum_trips),而非列名引用,函数内部无法正确解析变量。
修正后的代码
library(tsibble) library(feasts) library(dplyr) library(purrr) # 生成带时间索引的分组汇总tsibble sum_tourism <- tourism %>% group_by(Region, Quarter) %>% summarise(sum_trips = sum(Trips), .groups = "drop_last") %>% as_tsibble(key = Region, index = Quarter) # 修正拟合函数:使用整洁语法引用列 fit <- function(ts, col) { lambda <- ts %>% features({{col}}, features = guerrero) %>% pull(lambda_guerrero) mod <- model(ts, arima = ARIMA(box_cox({{col}}, lambda = lambda))) return(mod) } # 按Region拆分并拟合模型 models <- sum_tourism %>% group_split(Region) %>% map(~fit(.x, sum_trips))
关键修正点
- 保留时间序列结构:
sum_tourism必须明确指定Region为键、Quarter为时间索引,确保每个拆分后的子集都是合法的tsibble。 - 整洁评估语法:用
{{col}}引用列名,替代直接传递数值向量,让函数能正确识别数据框中的目标列。 - 使用
group_split:替代基础split函数,保留子集的tsibble结构,避免转换为普通数据框导致的功能失效。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

