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

在R中为时间序列实现扩展窗口历史平均的技术问询

扩展窗口历史平均计算与样本内SSE差异改造

问题核心

你当前代码计算的是log_eqpt1列的全局平均,需改为递归/扩展窗口计算:每个时间点的历史平均仅使用从起始到该点的所有观测值,而非整体数据集的平均。以下是改造后的完整代码及关键说明:


改造后代码

# 1) 扩展窗口历史平均(HA Model)
# 提取目标时间序列并限定样本内窗口
log_eqpt1_IS <- window(ts_monthly, start = c(1871,01), end = c(2021,12))[, "log_eqpt1"]

# 方法1:基础R实现累积平均(无需额外包)
# 计算累积和与有效观测的累积计数(自动跳过NA)
cum_sum <- cumsum(log_eqpt1_IS, na.rm = TRUE)
cum_valid <- cumsum(!is.na(log_eqpt1_IS))
# 仅在有有效观测时计算平均,避免0除错误
avg_recursive <- ifelse(cum_valid == 0, NA, cum_sum / cum_valid)

# 方法2:dplyr简洁实现(推荐,代码更直观)
# install.packages("dplyr") # 首次使用需安装
library(dplyr)
avg_recursive <- cummean(log_eqpt1_IS)

# 计算历史平均模型的样本内误差
IS_error_N <- log_eqpt1_IS - avg_recursive

# 2) OLS模型残差(保持原逻辑,确保窗口匹配)
IS_error_A <- window(model$residuals, start = c(1871,01), end = c(2021,12))

# 3) 计算累积SSE差异
# 同步处理NA,保证两序列长度一致
valid_idx <- complete.cases(IS_error_N, IS_error_A)
IS <- cumsum(IS_error_N[valid_idx]^2) - cumsum(IS_error_A[valid_idx]^2)

关键说明

  1. 扩展窗口逻辑:cummean(或cumsum/累积计数)会逐行计算从起始行到当前行的平均值,完美实现递归/扩展窗口的要求,效率远高于循环遍历。
  2. NA值处理:
    • 基础R方法中用cum_valid统计有效观测数,避免0除错误;
    • 最终计算累积SSE时,用complete.cases同步过滤两序列的NA,保证长度一致。
  3. 窗口匹配:必须确保log_eqpt1_IS和IS_error_A的时间窗口完全对齐,否则累积计算会出现维度不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:24:58