具有外生变量矩阵的 statsmodels SARIMAX 大小不同
Posted
技术标签:
【中文标题】具有外生变量矩阵的 statsmodels SARIMAX 大小不同【英文标题】:statsmodels SARIMAX with exogenous variables matrices are different sizes 【发布时间】:2018-06-25 15:30:03 【问题描述】:我正在运行 SARIMAX 模型,但在指定外生变量时遇到了问题。在第一个代码块(如下)中,我指定了一个外生变量 lesdata['LESpost'] 并且模型运行没有问题。但是,当我添加另一个外生变量时,我会收到一条错误消息(请参阅堆栈跟踪)。
ar = (1,0,1) # AR(1 3)
ma = (0) # No MA terms
mod1 = sm.tsa.statespace.SARIMAX(lesdata['emadm'], exog= (lesdata['LESpost'],lesdata['QOF']), trend='c', order=(ar,0,ma), mle_regression=True)
Traceback (most recent call last):
File "<ipython-input-129-d1300aeaeffc>", line 4, in <module>
mle_regression=True)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\tsa\statespace\sarimax.py", line 510, in __init__
endog, exog=exog, k_states=k_states, k_posdef=k_posdef, **kwargs
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\tsa\statespace\mlemodel.py", line 84, in __init__
missing='none')
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\tsa\base\tsa_model.py", line 43, in __init__
super(TimeSeriesModel, self).__init__(endog, exog, missing=missing)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\model.py", line 212, in __init__
super(LikelihoodModel, self).__init__(endog, exog, **kwargs)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\model.py", line 63, in __init__
**kwargs)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\model.py", line 88, in _handle_data
data = handle_data(endog, exog, missing, hasconst, **kwargs)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\data.py", line 630, in handle_data
**kwargs)
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\data.py", line 80, in __init__
self._check_integrity()
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\data.py", line 496, in _check_integrity
super(PandasData, self)._check_integrity()
File "C:\Users\danie\Anaconda2\lib\site-packages\statsmodels\base\data.py", line 403, in _check_integrity
raise ValueError("endog and exog matrices are different sizes")
ValueError: endog and exog matrices are different sizes
我在这里有什么明显的遗漏吗?变量长度相同,没有缺失数据。
感谢您的阅读,希望对您有所帮助!
【问题讨论】:
【参考方案1】:二维数据在应用numpy.asarray后需要行有观测,列有变量。
exog = (lesdata['LESpost'],lesdata['QOF'])
将 asarray 应用于此元组会将变量放在行中,这是来自 C 源的 numpy 默认值,这不是 statsmodels 想要的。
DataFrames 已经以适当的方式成形,因此一种选择是使用具有所需列的 DataFrame
exog = lesdata[['LESpost', 'QOF']]
array_likes 的列表或元组的另一个选项是使用numpy.column_stack
,例如
exog = np.column_stack((lesdata['LESpost'].values,lesdata['QOF'].values))
【讨论】:
以上是关于具有外生变量矩阵的 statsmodels SARIMAX 大小不同的主要内容,如果未能解决你的问题,请参考以下文章
Statsmodels VARMAX:具有多个内生变量的置信/预测区间
解析具有未知列数的 Pandas 数据框以在 statsmodels.api 中使用