fpp3包TSLM建模是否支持.号指代全部自变量的简写语法
fpp3中TSLM模型全变量建模简写方案
TSLM()作为fpp3包提供的时间序列线性模型函数,本身没有内置基础lm()函数中y ~ .的全变量自动匹配语法,因为其公式需要同时支持普通数值自变量、trend()/season()这类特殊时间项,公式解析逻辑和基础回归有差异。你遇到的unused argument (alist())报错首先是因为代码中TSLM(Total_Employees ~ .,))末尾多写了一个多余的逗号,传入了空参数;但即便删掉多余逗号,直接写.也无法被TSLM正确解析。
可以通过以下两种方式实现无需手动列全变量的批量建模:
方法1:动态生成公式(最稳定,推荐)
提前提取数据集中除响应变量、时间索引外的所有自变量,拼接生成标准公式后传入模型,完全自定义纳入规则,不会误把索引列当自变量:
# 配置参数 response_col <- "Total_Employees" # 因变量列名 index_col <- "Month" # 时间索引列名 add_trend <- TRUE # 是否纳入趋势项 add_season <- TRUE # 是否纳入季节项 # 提取所有普通自变量 predictor_cols <- colnames(Monthly_labor_data_small) |> setdiff(c(response_col, index_col)) # 拼接公式 formula_parts <- c(predictor_cols) if(add_trend) formula_parts <- c(formula_parts, "trend()") if(add_season) formula_parts <- c(formula_parts, "season()") tslm_formula <- as.formula( paste(response_col, "~", paste(formula_parts, collapse = " + ")) ) # 建模 fit <- Monthly_labor_data_small |> model(linear = TSLM(tslm_formula)) report(fit)
后续数据集新增列时无需修改建模代码,会自动把新列纳入自变量。
方法2:用dplyr选择器快速匹配
如果不需要严格排除索引列,可以直接用tidyverse自带的everything()选择器匹配所有列,TSLM会自动识别时间索引列并处理为趋势项,不会重复计算:
fit <- Monthly_labor_data_small %>% model( linear = TSLM(Total_Employees ~ everything() + trend() + season()) )
*注意:如果你的tsibble中存在非数值、非自变量的其他列(比如文本标签列),不要用这个方法,优先用第一种动态生成公式的方案提前过滤掉不需要的列。
内容的提问来源于stack exchange,提问作者Russ Conte
相关产品推荐
相关产品推荐

