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

R按LOCATION分组构建线性回归模型及多指标批量预测问题

报错原因说明

你第一段代码报错的核心原因是my_predict函数的参数和内部逻辑不匹配:

  • sapply(m, my_predict)会把列表m里的每个单个lm模型对象依次传给my_predict的第一个参数
  • 但你写的my_predict <- function(TIME) predict(m,new_df)里,调用predict时用了整个模型列表m,而不是传入的单个模型,同时参数名TIME也没有被用到,自然会报对象是list没有predict方法的错误。
    你后续可用的版本已经修正了这个问题:my_predict <- function(x) predict(x,new_df)里的x就是传入的单个模型,所以可以正常运行。
多因变量批量预测实现

你可以通过嵌套lapply循环实现多指标批量预测,最终合并为统一的dataframe,示例代码如下:

# 1. 定义待预测的所有因变量列名,按你实际数据集列名调整
dep_vars <- c("Education", "GDP", "Hoursworked", "PPI")
# 2. 定义待预测的年份
pred_years <- c(2020, 2021)
new_df <- data.frame(TIME = pred_years, row.names = paste0(pred_years, "."))

# 3. 对每个因变量批量执行分组建模+预测
pred_result <- lapply(dep_vars, function(var) {
  # 单个指标的建模函数,动态指定因变量
  linear_model <- function(x) lm(formula = reformulate("TIME", response = var), data = x)
  # 按LOCATION分组建模
  m <- lapply(split(tableLinR, tableLinR$LOCATION), linear_model)
  # 批量预测,每个指标的结果加指标名作为行名前缀
  res <- sapply(m, function(mod) predict(mod, new_df))
  rownames(res) <- paste0(rownames(new_df), var)
  return(res)
})

# 4. 把所有指标的预测结果按行合并为一个dataframe
final_result <- do.call(rbind, pred_result)

运行后final_result就是你需要的结果:行是「年份.指标名」,列是各个LOCATION,值为对应预测值。
如果需要用二次多项式拟合,只要把建模部分的formula改成reformulate("poly(TIME,2)", response = var)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:45:01