5

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.

Chris
  • 899
  • 2
  • 17
  • 25

1 Answers1

4

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.)

Josef
  • 21,998
  • 3
  • 54
  • 67
  • Thanks for your answer... I will open an issue. Interestingly, this does not only happen if the signal contains only ones. I started to change the ones at the beginning of the vector to zeros. Turns out that the fit starts working as soon as the number of zeros exceeds three. Weird behavior... let's see what the experts say. – Chris Jan 22 '15 at 22:13