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

为何使用R seas包对该时间序列执行X-13季节调整失败?

问题排查与解决:seas()函数因ARMA协方差矩阵奇异失败

问题背景

处理时间序列季节调整时,多数序列可正常调用seas(),但特定序列运行失败;移除最后一个值,或修改为小于20/大于27时,程序恢复正常。

复现代码

library(seasonal)
data = c(10, 8, 7, 16, 11, 20, 14, 14, 17, 13, 10, 9,
         10, 9, 10, 18, 20, 13, 17, 15, 20, 18, 13, 5,
         13, 14, 14, 14, 12, 10, 32, 23, 7, 11, 8, 8,
         15, 14, 12, 11, 13, 18, 18, 13, 9, 15, 9, 10,
         13, 8, 15, 11, 15, 17, 13, 11, 14, 20, 11, 7,
         11, 8, 10, 18, 19, 19, 23, 7, 16, 11, 14, 4,
         14, 16, 14, 14, 24, 15, 17, 21, 14, 24)
series = ts(data, frequency = 12, start = c(2017, 1))
seas(series)

错误信息

Error: X-13 run failed

Errors:
- The covariance matrix of the ARMA parameters is singular; cannot compute
  t-statistics for the ARMA parameters. Program error(s) halt execution for
  C:\Users\THOMAS~1\AppData\Local\Temp\RtmpQHZhsm\x13391c5b19350e/iofile.spc

Notes:
- IEEE_INVALID_FLAG IEEE_DIVIDE_BY_ZERO IEEE_UNDERFLOW_FLAG IEEE_DENORMAL

原因分析

错误源于seas()底层依赖的X-13ARIMA-SEATS引擎:

  • 自动选择的ARMA模型在拟合当前序列时,出现参数冗余或数值共线性,导致协方差矩阵奇异(行列式为0),无法计算参数的t统计量。
  • 最后一个值24恰好触发了这种数值不稳定:当该值偏离20-27范围时,数据分布变化让自动选择的ARMA模型不再出现共线性,因此可正常运行。

可行解决办法

1. 手动指定ARMA模型

绕过自动选择的不稳定模型,强制使用更稳健的ARMA结构:

# 指定非季节性AR(1)模型
seas(series, arima.model = "(1 0 0)")

# 指定季节性AR(1)+非季节性MA(1)模型
seas(series, arima.model = "(0 0 1)(1 0 0)12")

2. 强制忽略统计量计算错误

若仅需季节调整结果、不关注ARMA参数的统计显著性,开启force参数强制程序继续:

seas(series, force = TRUE)

3. 微调触发异常的数值

在不影响业务逻辑的前提下,修改最后一个值到安全范围:

data[length(data)] <- 28  # 改为大于27的数值
series = ts(data, frequency = 12, start = c(2017, 1))
seas(series)

4. 直接调用X-13自定义配置

使用x13()函数绕过seas()的默认自动配置,关闭t统计量计算:

x13(series, spec = list(arima = list(model = "(2 0 1)"), estimate = list(tstat = FALSE)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:21:02