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
相关产品推荐
相关产品推荐

