+ def evaluate_var(self, X, lag):
+ # prepare training dataset
+ train_size = int(len(X) * 0.75)
+ train, test = X[0:train_size], X[train_size:]
+ # make predictions
+ model = VAR(train)
+ model_fit = model.fit(lag)
+ predictions = model_fit.forecast(y=train.values, steps=len(test))
+ # calculate out of sample error
+ rmse = sqrt(mean_squared_error(test, predictions))
+ return rmse
+
+ def optimize_lag(self, df):
+ lag = range(1, 20, 1)
+ df = df.astype('float32')
+ best_score, best_lag = float("inf"), None
+ for l in lag:
+ try:
+ rmse = self.evaluate_var(df, l)
+ if rmse < best_score:
+ best_score, best_lag = rmse, l
+ except ValueError as v:
+ print(v)
+ # print('Best VAR%s RMSE=%.3f' % (best_lag, best_score))
+ return best_lag
+