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

如何基于df_z为分国家的行式线性回归模型添加预测值

基于分组LM模型生成未来预测值的实现方案

问题背景

我有三个通过以下代码生成的数据集:

library(dplyr)
library(tidyr)

# 模拟数据
countries = LETTERS[1:3]

mat_x     = matrix(runif(27, 0, 100), nrow = 3)
colnames(mat_x) = 2012:2020
df_x      = bind_cols(country = countries, mat_x)

mat_y     = matrix(runif(27, 0, 100), nrow = 3)
colnames(mat_y) <- paste0("Y", 2012:2020)
df_y      = bind_cols(country = countries, mat_y)

mat_z     = matrix(runif(27, 0, 100), nrow = 3)
colnames(mat_z) <- paste0("Y", 2021:2029)
df_z      = bind_cols(country = countries, mat_z)

其中df_x是响应变量,df_y是回归变量,df_z是回归变量的未来值。

我已经完成了数据格式转换、合并,以及按country分组嵌套并构建每个国家的lm(y ~ x)模型,代码如下:

# 转换df_x为长格式
df_x_long <- 
   df_x %>% 
   pivot_longer(-country, names_to = "year", values_to = "x") %>% 
   mutate(across(year, as.numeric))

# 转换df_y为长格式
df_y_long <- 
   df_y %>% 
   select(country, starts_with("Y")) %>% 
   pivot_longer(-country, names_to = "year", values_to = "y") %>% 
   mutate(year = as.numeric(gsub("^Y", "", year)))

# 合并数据
df_xy_long <- inner_join(df_x_long, df_y_long, by = c("country", "year"))

# 嵌套并建模
df_xy_nested <- 
   df_xy_long %>% 
   group_by(country) %>% 
   nest() %>% 
   rowwise() %>% 
   mutate(model = list(lm(y ~ x, data = data))) %>% 
   ungroup()

现在需要基于每个国家的LM模型,使用df_z中的数据生成2021-2029年的预测值。


实现步骤

1. 转换df_z为长格式

将宽格式的df_z转换为长格式,确保变量名与模型输入匹配:

df_z_long <- df_z %>%
  pivot_longer(-country, names_to = "year", values_to = "x") %>%
  mutate(year = as.numeric(gsub("^Y", "", year)))

2. 嵌套未来数据并与模型数据集合并

按country分组嵌套未来数据,再和已有的模型数据合并,保证每个国家的模型对应其未来数据:

df_z_nested <- df_z_long %>%
  group_by(country) %>%
  nest(future_data = everything())

# 合并模型与未来数据
df_model_future <- df_xy_nested %>%
  left_join(df_z_nested, by = "country")

3. 逐行生成预测值

使用rowwise()逐行处理每个国家的模型和未来数据,调用predict()生成预测结果,并将预测值与原始未来数据绑定:

df_predictions <- df_model_future %>%
  rowwise() %>%
  mutate(
    # 生成预测值
    predictions = list(predict(model, newdata = future_data)),
    # 合并预测值与未来数据
    predicted_data = list(
      future_data %>%
        mutate(predicted_y = predictions)
    )
  ) %>%
  ungroup()

4. 展开嵌套结果(可选)

如果需要扁平格式的预测结果,使用unnest()展开嵌套的predicted_data列:

df_predictions_flat <- df_predictions %>%
  select(country, predicted_data) %>%
  unnest(predicted_data)

最终的df_predictions_flat包含每个国家2021-2029年的year、x(未来回归变量值)和predicted_y(预测的响应变量值)。


内容的提问来源于stack exchange,提问作者Saïd Maanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:18:16