Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Autoregressive model using statsmodels in Python

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.

like image 633
Chris Avatar asked Sep 29 '22 22:09

Chris


1 Answers

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

like image 178
Josef Avatar answered Oct 05 '22 08:10

Josef