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

statsmodels中X13-ARIMA外生变量exog报错的解决求助

解决X13 ARIMA外生变量传入报错问题

问题场景

我使用statsmodels的sm.tsa.x13_arima_analysis对M0序列进行季节性调整,尝试将单列exog作为外生变量传入时,触发如下报错:

statsmodels.tools.sm_exceptions.X13Error: ERROR: Number of user-defined X elements= 166
        not equal to a multiple of the number of columns=  4.

仅传入endog时代码可正常运行,尝试传入exog.values又触发新报错:

ValueError: exog is not a Series or DataFrame or is unnamed.

测试数据包含M0和exog两列,核心测试代码如下:

import statsmodels.api as sm
import pandas as pd
import os

X13PATH = r'D:\data\X13'
os.chdir(X13PATH)
os.environ['X13PATH'] = X13PATH

df = pd.read_excel('../test_data/X13_test_data.xlsx', sheet_name='Sheet1', index_col='date')
df.index = pd.to_datetime(df.index)

# 触发报错的代码
res = sm.tsa.x13_arima_analysis(endog=df['M0'], exog=df['exog'], x12path=X13PATH, print_stdout=True)

报错原因

X13 ARIMA对单列外生变量的处理存在格式识别问题:当传入一维Series时,statsmodels内部会错误地将其解析为多列格式,导致元素数量与列数不匹配;而直接传入numpy数组则不符合函数对exog必须为Series或DataFrame的格式要求。

解决方案

将单列的exog转换为二维DataFrame格式,确保statsmodels能正确识别外生变量的列数:

修改后的核心代码:

# 将单列Series转为DataFrame
exog_df = df[['exog']]
# 传入格式正确的外生变量
res = sm.tsa.x13_arima_analysis(endog=df['M0'], exog=exog_df, x12path=X13PATH, print_stdout=True)

# 输出季节性调整结果并绘图
print(res.seasadj)
res.plot()

此处理方式既满足了函数对exog的格式要求,又能让X13 ARIMA正确识别外生变量的列数,解决报错问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:23:16