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

R中如何还原ARIMA建模所用的季节性与非季节性差分数据

两次差分还原原始序列方案

差分的逆操作核心是基于初始值的累加,你先后做了「4阶季节性差分、1阶普通差分」两次操作,还原时逆序执行即可:先还原1阶普通差分得到第一次差分后的序列,再还原4阶季节性差分得到原始值。

完整实现代码

1. 补全原代码逻辑

你的原代码存在差分顺序的小问题,先修正后执行差分:

library(dplyr)
# 定义季节周期为4(对应季度数据)
season <- 4
raw <- read.csv("https://raw.githubusercontent.com/thistleknot/Python-Stock/master/data/combined_set.csv",row.names=1,header=TRUE)
temp <- raw$CSUSHPINSA

# 执行第一次4阶季节性差分
temp_1 <- temp - lag(temp, season)
# 校验普通差分阶数
print(ndiffs(na.omit(temp_1)))
# 执行第二次1阶普通差分
temp_2 <- temp_1 - lag(temp_1, 1)

2. 手动实现差分逆操作

# 第一步:还原1阶普通差分,得到temp_1序列
# 取temp_1的第一个非空值作为还原初始值
init_temp1 <- temp_1[!is.na(temp_1)][1]
# 累加temp_2的有效值,得到还原后的temp_1
restored_temp1 <- c(init_temp1, init_temp1 + cumsum(na.omit(temp_2)))

# 第二步:还原4阶季节性差分,得到原始序列
# 取原始序列前4个值作为还原初始值(4阶差分丢失前4个观测)
init_raw <- temp[1:season]
restored_temp <- init_raw
for (i in (season + 1):length(temp)) {
  restored_temp[i] <- restored_temp[i - season] + restored_temp1[i - season]
}

# 验证还原结果和原始序列完全一致
print(all.equal(restored_temp, temp))

3. 简化实现(调用封装函数)

可以直接调用forecast包的diffinv函数快速实现,无需手动写循环:

library(forecast)
restored_temp <- diffinv(
  x = na.omit(temp_2),
  lag = c(1, season), # 和两次差分的滞后长度、顺序一一对应
  xi = list(temp_1[!is.na(temp_1)][1], temp[1:season]) # 对应两次差分的初始值
)
# 验证一致性
print(all.equal(as.numeric(restored_temp), temp))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:05