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

如何使用R对日期序列数据进行线性外推补全

线性外推补全年度缺失数据的实现方法

方法一:基于dplyr+线性回归的优先实现

这种方法贴合dplyr的操作逻辑,通过拟合线性模型来外推缺失值:

步骤与代码

  1. 加载所需包并准备数据
library(dplyr)
library(lubridate)
library(tidyr)

df <- tibble(
  pop = c(18968, 18956, 18946, 18934, 18923, 18912, 18901, NA, NA, NA, NA, NA),
  date = c("2020-01-01", "2020-02-01", "2020-03-01", 
           "2020-04-01", "2020-05-01", "2020-06-01", 
           "2020-07-01", "2020-08-01", "2020-09-01", 
           "2020-10-01", "2020-11-01", "2020-12-01")
) %>% 
  mutate(date = as_date(date))
  1. 拟合线性模型并补全缺失值
# 用前7个月的有效数据拟合线性模型(将日期转为数值型作为自变量)
lm_model <- lm(pop ~ as.numeric(date), data = df %>% filter(!is.na(pop)))

# 对全量数据预测,替换缺失的pop值
df_complete <- df %>% 
  mutate(pop = ifelse(is.na(pop), predict(lm_model, newdata = .), pop))

说明

  • 日期转为数值型是因为线性回归模型要求自变量为数值类型;
  • predict()函数会自动对newdata中的每一行计算预测值,完美匹配原数据的行顺序。

方法二:使用Hmisc包的approxExtrap函数

针对你提到的approxExtrap,核心是理解xout参数:它指定需要生成外推值的所有x坐标点,具体实现如下:

步骤与代码

library(Hmisc)

# 提取已有数据的x(日期转数值)和y(pop)
x_observed <- df %>% filter(!is.na(pop)) %>% pull(date) %>% as.numeric()
y_observed <- df %>% filter(!is.na(pop)) %>% pull(pop)

# 生成全年所有日期对应的数值型x点(即xout参数需要的内容)
x_all <- df %>% pull(date) %>% as.numeric()

# 执行线性外推
extrap_results <- approxExtrap(x = x_observed, y = y_observed, xout = x_all)

# 将外推结果合并回原数据框
df_complete_approx <- df %>% 
  mutate(pop = extrap_results$y)

关键参数解释

  • x:已有数据的自变量(这里是前7个月的日期数值);
  • y:已有数据的因变量(前7个月的pop值);
  • xout:你需要获取预测值的所有x点(这里是全年12个月的日期数值),函数会基于x和y的线性趋势,计算出xout每个点对应的y值,直接补全缺失部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:10:33