def arimaTest(l_eq): for i in range(1, 6): ar = ARIMA(l_eq, order=(i, d, 0)) arfit = ar.fit(disp=-1) arresults = ARIMAResults.bic(arfit) mktBIC["AR (" + str(i) + ")"] = arresults for i in range(1, 6): ma = ARIMA(l_eq, order=(0, d, i)) mafit = ma.fit(disp=-1) maresults = ARIMAResults.bic(mafit) mktBIC["MA (" + str(i) + ")"] = maresults
def model_select(self): self.aic = [] self.bic = [] ## If data is stock if self.is_stock: for i in range(3): for j in range(3): if i == 0: if j == 2: continue init = [.1 for j in range(i + j + 2)] model = ARIMA(self.train_set, order=(j + 1, 0, i)) self.model_fit = model.fit(start_params=init, disp=0) self.aic.append(ARIMAResults.aic(self.model_fit)) self.bic.append(ARIMAResults.bic(self.model_fit)) #print(ARIMAResults.summary(self.model_fit)) else: init = [.4 for j in range(i + j + 1)] model = ARIMA(self.train_set, order=(j, 0, i)) self.model_fit = model.fit(start_params=init, maxiter=150, disp=0) self.aic.append(ARIMAResults.aic(self.model_fit)) self.bic.append(ARIMAResults.bic(self.model_fit)) #print(ARIMAResults.summary(self.model_fit)) ## If data is forex else: for i in range(3): for j in range(3): if i == 0: if j == 2: continue init = [.1 for j in range(i + j + 2)] model = ARIMA(self.train_set, order=(j + 1, 0, i)) self.model_fit = model.fit(start_params=init, maxiter=150, disp=0) self.aic.append(ARIMAResults.aic(self.model_fit)) self.bic.append(ARIMAResults.bic(self.model_fit)) print(ARIMAResults.summary(self.model_fit)) else: init = [.28 for j in range(i + j + 1)] model = ARIMA(self.train_set, order=(j, 0, i)) self.model_fit = model.fit(start_params=init, maxiter=150, disp=0) self.aic.append(ARIMAResults.aic(self.model_fit)) self.bic.append(ARIMAResults.bic(self.model_fit)) print(ARIMAResults.summary(self.model_fit)) ## Compare AIC and BIC, select the best model min_aic = min(self.aic) min_bic = min(self.bic) x = PrettyTable(["Model", "AIC", "BIC"]) x.align["Model"] = "l" x.padding_width = 1 x.add_row(["ARIMA(1,1,0)", self.aic[0], self.bic[0]]) x.add_row(["ARIMA(2,1,0)", self.aic[1], self.bic[1]]) x.add_row(["ARIMA(0,1,1)", self.aic[2], self.bic[2]]) x.add_row(["ARIMA(1,1,1)", self.aic[3], self.bic[3]]) x.add_row(["ARIMA(2,1,1)", self.aic[4], self.bic[4]]) x.add_row(["ARIMA(0,1,2)", self.aic[5], self.bic[5]]) x.add_row(["ARIMA(1,1,2)", self.aic[6], self.bic[6]]) x.add_row(["ARIMA(2,1,2)", self.aic[7], self.bic[7]]) print(x)