在 Python 中使用 statsmodels 的自回归模型
Autoregressive model using statsmodels in Python
我正在尝试开始使用 statsmodels 中的 AR 模型。但是,我似乎做错了什么。考虑以下失败的示例:
from statsmodels.tsa.ar_model import AR
import numpy as np
signal = np.ones(20)
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)
ar_res.predict(4, 60)
我认为这应该只是继续由 1 组成的(琐碎的)时间序列。但是,在本例中似乎 return 参数不够。 len(ar_res.params)
等于 4,而它应该是 5。在下面的示例中它有效:
signal = np.ones(20)
signal[range(0, 20, 2)] = -1
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)
ar_res.predict(4, 60)
我感觉这可能是一个错误,但我不确定,因为我没有使用该软件包的经验。也许有更多经验的人可以帮助我...
编辑: 我已报告问题 here。
添加一点噪音后就可以了,例如
signal = np.ones(20) + 1e-6 * np.random.randn(20)
我的猜测是由于与信号完全共线性,常数没有正确添加。
你应该打开一个问题来更好地处理这个极端情况。 https://github.com/statsmodels/statsmodels/issues
我的猜测也是在这种情况下没有确定参数,所以可能没有什么好的解决方案。
(未识别的参数意味着几个参数组合可以产生完全相同的拟合,但我认为在这种情况下它们应该都产生相同的预测。)
我正在尝试开始使用 statsmodels 中的 AR 模型。但是,我似乎做错了什么。考虑以下失败的示例:
from statsmodels.tsa.ar_model import AR
import numpy as np
signal = np.ones(20)
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)
ar_res.predict(4, 60)
我认为这应该只是继续由 1 组成的(琐碎的)时间序列。但是,在本例中似乎 return 参数不够。 len(ar_res.params)
等于 4,而它应该是 5。在下面的示例中它有效:
signal = np.ones(20)
signal[range(0, 20, 2)] = -1
ar_mod = AR(signal)
ar_res = ar_mod.fit(4)
ar_res.predict(4, 60)
我感觉这可能是一个错误,但我不确定,因为我没有使用该软件包的经验。也许有更多经验的人可以帮助我...
编辑: 我已报告问题 here。
添加一点噪音后就可以了,例如
signal = np.ones(20) + 1e-6 * np.random.randn(20)
我的猜测是由于与信号完全共线性,常数没有正确添加。
你应该打开一个问题来更好地处理这个极端情况。 https://github.com/statsmodels/statsmodels/issues 我的猜测也是在这种情况下没有确定参数,所以可能没有什么好的解决方案。
(未识别的参数意味着几个参数组合可以产生完全相同的拟合,但我认为在这种情况下它们应该都产生相同的预测。)