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

