2015-06-17 12 views
7

Próbuję napisać kod, aby wygenerować serię modelu arima i porównać różne modele. Kod jest następujący.non Invertible z modelu ARIMA

p=0 
q=0 
d=0 
pdq=[] 
aic=[] 

for p in range(6): 
    for d in range(2): 
     for q in range(4): 
      arima_mod=sm.tsa.ARIMA(df,(p,d,q)).fit(transparams=True) 

      x=arima_mod.aic 


      x1= p,d,q 
      print (x1,x) 

      aic.append(x) 
      pdq.append(x1) 



keys = pdq 
values = aic 
d = dict(zip(keys, values)) 
print (d) 

minaic=min(d, key=d.get) 

for i in range(3): 
p=minaic[0] 
    d=minaic[1] 
    q=minaic[2] 
print (p,d,q) 

Gdzie 'DF' jest szereg czasowy data.And wyjście jest następujące,

(0, 0, 0) 1712.55522759 
(0, 0, 1) 1693.436483044094 
(0, 0, 2) 1695.2226857997066 
(0, 0, 3) 1690.9437925956158 
(0, 1, 0) 1712.74161799 
(0, 1, 1) 1693.0408994539348 
(0, 1, 2) 1677.2235087182808 
(0, 1, 3) 1679.209810237856 
(1, 0, 0) 1700.0762847127553 
(1, 0, 1) 1695.353190569905 
(1, 0, 2) 1694.7907607467605 
(1, 0, 3) 1692.235442716487 
(1, 1, 0) 1714.5088374907164 

ValueError: The computed initial MA coefficients are not invertible 
You should induce invertibility, choose a different model order, or you can 
pass your own start_params. 

tzn na zamówienie (1,1,1) model nie jest odwracalna. więc proces zatrzymuje there.How można pominąć tak non odwracalnej połączenia P, D, Q i dalej z drugim połączeniu

Odpowiedz

4

użytkowania try: ... except: ... złapać wyjątek i kontynuować

for p in range(6): 
    for d in range(2): 
     for q in range(4): 
      try: 
       arima_mod=sm.tsa.ARIMA(df,(p,d,q)).fit(transparams=True) 

       x=arima_mod.aic 

       x1= p,d,q 
       print (x1,x) 

       aic.append(x) 
       pdq.append(x1) 
      except: 
       pass 
       # ignore the error and go on 
+0

doskonałe działanie. Dziękuję Ci. –

+1

Ale chcesz prognozy. Nie możesz po prostu przekazać .. –