Autoregressive model using statsmodels in Python

Chris picture Chris · Jan 22, 2015 · Viewed 11.6k times · Source

I am trying to start using the AR models in statsmodels. However, I seem to be doing something wrong. Consider the following example, which fails:

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)

I think this should just continue the (trivial) time series consisting of ones. However, in this case it seems to return not enough parameters. len(ar_res.params) equals 4, while it should be 5. In the following example it works:

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)

I have the feeling that this could be a bug but I am not sure as I have no experience using the package. Maybe someone with more experience can help me...

EDIT: I have reported the issue here.

Answer

Josef picture Josef · Jan 22, 2015

It works after adding a bit of noise, for example

signal = np.ones(20) + 1e-6 * np.random.randn(20)

My guess is that the constant is not added properly because of perfect collinearity with the signal.

You should open an issue to handle this corner case better. https://github.com/statsmodels/statsmodels/issues My guess is also that the parameters are not identified in this case, so there might not be any good solution.

(Parameters not identified means that several parameter combinations can produce exactly the same fit, but I think they should all produce the same predictions in this case.)