5

私は R の熱心なユーザーですが、最近いくつかの理由で Python に切り替えました。ただし、statsmodels から Python でベクトル AR モデルを実行するのに少し苦労しています。

Q#1. これを実行するとエラーが発生しますが、ベクターの型に関係があるのではないかと疑っています。

    import numpy as np
    import statsmodels.tsa.api
    from statsmodels import datasets
    import datetime as dt
    import pandas as pd
    from pandas import Series
    from pandas import DataFrame
    import os

    df = pd.read_csv('myfile.csv')
    speedonly = DataFrame(df['speed'])
    results = statsmodels.tsa.api.VAR(speedonly)

    Traceback (most recent call last):
    File "<pyshell#14>", line 1, in <module>
      results = statsmodels.tsa.api.VAR(speedonly)
    File "C:\Python27\lib\site-packages\statsmodels\tsa\vector_ar\var_model.py", line 336, in __init__
      super(VAR, self).__init__(endog, None, dates, freq)
    File "C:\Python27\lib\site-packages\statsmodels\tsa\base\tsa_model.py", line 40, in __init__
      self._init_dates(dates, freq)
    File "C:\Python27\lib\site-packages\statsmodels\tsa\base\tsa_model.py", line 54, in _init_dates
      raise ValueError("dates must be of type datetime")
    ValueError: dates must be of type datetime

興味深いことに、ここから VAR の例を実行するとhttps://github.com/statsmodels/statsmodels/blob/master/docs/source/vector_ar.rst#id5、正常に動作します。

Wes McKinney の「Python for Data Analysis」の 293 ページから、3 番目の短いベクトル ts を使用して VAR モデルを試してみましたが、うまくいきません。

さて、ベクトルが異なるタイプであるためだと今私は考えています:

    >>> speedonly.head()
         speed
    0  559.984
    1  559.984
    2  559.984
    3  559.984
    4  559.984
    >>> type(speedonly)
    <class 'pandas.core.frame.DataFrame'> #DOESN'T WORK

    >>> type(data)
    <type 'numpy.ndarray'> #WORKS

    >>> ts
    2011-01-02   -0.682317
    2011-01-05    1.121983
    2011-01-07    0.507047
    2011-01-08   -0.038240
    2011-01-10   -0.890730
    2011-01-12   -0.388685
    >>> type(ts)
    <class 'pandas.core.series.TimeSeries'> #DOESN'T WORK

だから私は ndarray に speedonly を変換します...それでも動作しません。しかし、今回は別のエラーが発生します:

   >>> nda_speedonly = np.array(speedonly)
   >>> results = statsmodels.tsa.api.VAR(nda_speedonly)

   Traceback (most recent call last):
   File "<pyshell#47>", line 1, in <module>
     results = statsmodels.tsa.api.VAR(nda_speedonly)
   File "C:\Python27\lib\site-packages\statsmodels\tsa\vector_ar\var_model.py", line 345, in __init__
     self.neqs = self.endog.shape[1]
   IndexError: tuple index out of range

助言がありますか?

Q#2. 私のデータセットには、予測に役立つと思われる外因性の特徴変数があります。上記の statsmodels のモデルは、使用するのに最適なものですか?

4

1 に答える 1

4

pandas オブジェクトを時系列モデルに与えると、インデックスが日付であることが想定されます。現在のソースではエラー メッセージが改善されています (近日リリース予定)。

ValueError: Given a pandas object and the index does not contain dates

2 番目のケースでは、単一の 1d シリーズを VAR に与えています。VAR は、複数のシリーズがある場合に使用されます。配列に 2 番目の次元があると予想されるため、形状エラーが発生するのはそのためです。ここでエラー メッセージを改善できる可能性があります。外因性変数を持つ単一系列の AR モデルの場合、おそらく sm.tsa.ARMA を使用する必要があります。外生変数を持つモデルの ARMA.predict には既知のバグがあり、すぐに修正されることに注意してください。このためのテストケースを提供できれば、役に立ちます。

于 2013-04-03T16:45:31.203 に答える