def adapt_filter(self, obs_mat): ''' Adaptive filter by using a fixed observation matrix and dynamic transition matrix Parameters: ---- obs_mat :np.array() the fixed observation matrix Return: ---- the filtered result in dataframe ''' from filterpy.kalman import KalmanFilter measure_dat = self.data['2017-05-01 01:00:00':].iloc[ self.train_size:, :] #seperating lists train_lst = DataImporter.sepDat2(self.train_window, self.predict_size, measure_dat) measure_lst = DataImporter.sepDat( self.predict_size, measure_dat.iloc[self.train_window:, :]) #estimating coefficients import warnings warnings.filterwarnings("ignore") param_lst = [ VAR(i).fit(1, trend='nc').params.values for i in train_lst ] #calculating the kf results res_lst = [] #initialize filter params kf = KalmanFilter(dim_x=self.dim, dim_z=self.dim) kf.x = self.init_val kf.P = self.init_prob kf.R = self.R kf.Q = self.Q kf.H = obs_mat #filtering for i in range(len(measure_lst)): #changing params of transition mat kf.F = param_lst[i].T #doing one batch x, p, _, _ = kf.batch_filter(measure_lst[i].values) res = pd.DataFrame(x) res.columns = self.data.columns res.index = measure_lst[i].index res_lst.append(res) return KFfilter.merge(pd.concat(res_lst), measure_dat)