use*_*685 5 python var pandas statsmodels
我是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
Run Code Online (Sandbox Code Playgroud)
现在,有趣的是,当我从这里运行VAR示例https://github.com/statsmodels/statsmodels/blob/master/docs/source/vector_ar.rst#id5时,它运行正常.
我尝试使用Wes McKinney的"用于数据分析的Python"第293页的第三个较短向量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
Run Code Online (Sandbox Code Playgroud)
所以我将speedonly转换为ndarray ......它仍然无效.但是这次我得到了另一个错误:
>>> 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
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Q | 2.我的数据集中有外生特征变量,似乎对预测很有用.上面的statsmodels模型是否是最好用的?
当您将 pandas 对象提供给时间序列模型时,它期望索引是日期。当前源代码中的错误消息已得到改进(即将发布)。
ValueError: Given a pandas object and the index does not contain dates
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您向 VAR 提供单个 1d 系列。当您有多个系列时,会使用 VAR。这就是为什么会出现形状错误,因为它期望数组中存在第二个维度。我们或许可以改进这里的错误消息。对于具有外生变量的单系列 AR 模型,您可能需要使用 sm.tsa.ARMA。请注意,对于具有外生变量的模型,ARMA.predict 中存在一个已知错误,很快就会修复。如果您可以为此提供一个测试用例,那将会很有帮助。
| 归档时间: |
|
| 查看次数: |
10568 次 |
| 最近记录: |