2015-06-17 4 views
7

Sto provando a scrivere un codice per generare una serie di modelli arima e confrontare modelli diversi. Il codice è il seguente.non invertibile di un modello 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) 

Dove 'df' è la serie temporale data.And l'uscita è come seguono,

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

cioè per cassa (1,1,1) il modello è non invertibile. così il processo si interrompe there.How posso saltare tale combinazione non invertibile di p, d, q e proseguire con altra combinazione

risposta

4

Usa try: ... except: ... per catturare l'eccezione e continuare

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

lavoro perfettamente. grazie. –

+1

Ma vuoi la previsione. Non puoi semplicemente passare .. –