【问题标题】:Exog variable with not appropriated shape on Statsmodels SARIMAX get_predictionExog 变量在 Statsmodels SARIMAX get_prediction 上没有适当的形状
【发布时间】:2017-07-08 03:46:40
【问题描述】:

我有一个使用 statsmodels 的非常简单的 Sarimax 模型:

mdl = sm.tsa.statespace.SARIMAX(ts_monthly, exog=ts_exog, order=(3,1,0)).fit()

其中ts_monthlyts_exog 是按日期索引的熊猫系列:

df
date          vl_1    vl_2 
2016-01-01     10     12
2016-02-01     14      1
2016-03-01     98     33

ts_monthly = df.vl_1
ts_exog    = df.vl_2

模型拟合有效,但是当我尝试运行 get_prediction 时,出现以下错误:

ts = pd.Series([12,3,2], index=pd.date_range('2016-04-01', '2016-07-01', freq='M'))

mdl.get_prediction('2016-03-01', '2016-07-01', exog=ts, dynamic=False)

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-135-c89e9e005a31> in <module>()
      6 print(mdl.summary())
      7 _ = mdl.plot_diagnostics()
----> 8 pred = mdl.get_prediction(start=start_date, end=end_date, exog=ts_exog, dynamic=False)
      9 pred_ci = pred.conf_int()
     10 

C:\Users\myuer\bin\anaconda3\lib\site-packages\statsmodels\tsa\statespace\sarimax.py in get_prediction(self, start, end, dynamic, exog, **kwargs)
   1901                                      ' appropriate shape. Required %s, got %s.'
   1902                                      % (str(required_exog_shape),
-> 1903                                         str(exog.shape)))
   1904                 exog = np.c_[self.model.data.orig_exog.T, exog.T].T
   1905 

ValueError: Provided exogenous values are not of the appropriate shape. Required (3, 1), got (3,).

关于预测外生序列必须是哪种形状的任何想法?

【问题讨论】:

    标签: python pandas statsmodels


    【解决方案1】:

    This answer may be helpful.

    虽然您的预测系列是 pandas 系列(因此是一个 numpy ndarray),但形状 (3,) 表示它只有一个索引(即您使用单个索引访问它的值,如 ts[0] )。如果您使用ts.reshape(3, 1) 重塑数据,您将创建第二个索引(始终为0),以便可以以ts[0, 0] 的方式访问值。

    我还没有深入研究这种行为以理解其基本原理,但我在处理依赖/相关模块(如 scipy 和 scikit-learn)时也看到了它。

    【讨论】:

    • 谢谢。这与 statsmodels 中的 Sarimax 结构有什么关系?为什么熊猫系列需要 (n,1)?
    • 对于描述一行数据集的 numpy 数组强制执行两个定义明确的维度并不罕见,即使一维信息是冗余的。这是为了确保您确实有多个样本,每个样本都有一个值,而不是单个样本具有多个值。
    猜你喜欢
    • 2021-10-12
    • 2018-06-25
    • 2020-05-19
    • 2018-07-25
    • 2020-12-21
    • 2021-07-01
    • 2020-08-06
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多