def testForwardFilter(self): dlm = builder() dlm.add(trend(degree=1, discount=1, w=1.0)) dlm.initialize() self.kf1.predict(dlm.model) self.assertAlmostEqual(dlm.model.prediction.obs, 0) # the prior on the mean is zero, but observe 1, with # discount = 1, one should expect the filterd mean to be 0.5 self.kf1.forwardFilter(dlm.model, 1) self.assertAlmostEqual(dlm.model.obs, 0.5) self.assertAlmostEqual(dlm.model.prediction.obs, 0) self.assertAlmostEqual(dlm.model.sysVar, 0.375) self.kf1.predict(dlm.model) self.assertAlmostEqual(dlm.model.obs, 0.5) self.assertAlmostEqual(dlm.model.prediction.obs, 0.5) dlm.initialize() self.kf0.predict(dlm.model) self.assertAlmostEqual(dlm.model.prediction.obs, 0) # the prior on the mean is zero, but observe 1, with discount = 0 # one should expect the filtered mean close to 1 self.kf0.forwardFilter(dlm.model, 1) self.assertAlmostEqual(dlm.model.obs[0, 0], 1) self.assertAlmostEqual(dlm.model.prediction.obs[0, 0], 0) self.assertAlmostEqual(dlm.model.sysVar[0, 0], 0.5) self.kf0.predict(dlm.model) self.assertAlmostEqual(dlm.model.obs[0, 0], 1) self.assertAlmostEqual(dlm.model.prediction.obs[0, 0], 1)
def setUp(self): self.data = np.random.rand(10).tolist() self.features = np.random.rand(10, 2).tolist() self.trend = trend(degree=2, w=1.0) self.seasonality = seasonality(period=7, w=1.0) self.dynamic = dynamic(self.features, w=1.0) self.autoReg = autoReg(degree=3, w=1.0) self.builder1 = builder()
def testMissingEvaluation(self): dlm = builder() dlm.add(trend(degree=1, discount=1, w=1.0)) dlm.initialize() dlm.model.evaluation = np.matrix([[None]]) self.kf1.forwardFilter(dlm.model, 1.0, dealWithMissingEvaluation = True) self.assertAlmostEqual(dlm.model.obs, 0.0) self.assertAlmostEqual(dlm.model.transition, 1.0)
def setUp(self): self.data = np.random.rand(10).tolist() self.features = np.random.rand(10, 2).tolist() self.trend = trend(degree=2, w=1.0) self.seasonality = seasonality(period=7, w=1.0) self.dynamic = dynamic(self.features, w=1.0) self.autoReg = autoReg(degree=3, w=1.0) self.builder1 = builder()
def __init__(self, data): self.data = list(data) self.n = len(data) self.result = None self.builder = builder() self.Filter = None self.initialized = False self.options = self._defaultOptions() self.time = None
def __init__(self, data, **options): self.data = list(data) self.n = len(data) self.result = None self.builder = builder() self.Filter = None self.initialized = False self.options = self._defaultOptions(**options) self.time = None self._printInfo = options.get('printInfo', True)
def __init__(self, data, **options): self.data = { idx: value for idx, value in enumerate(data) } self.n = len(data) self.result = None self.builder = builder() self.Filter = None self.initialized = False self.options = self._defaultOptions(**options) self.time = None self._printInfo = options.get('printInfo', True)
def testForwardFilterMultiDim(self): dlm = builder() dlm.add(seasonality(period=2, discount=1, w=1.0)) dlm.initialize() self.kf11.forwardFilter(dlm.model, 1) self.assertAlmostEqual(dlm.model.state[0][0, 0], 0.33333333333) self.assertAlmostEqual(dlm.model.state[1][0, 0], -0.33333333333) self.kf11.forwardFilter(dlm.model, -1) self.assertAlmostEqual(dlm.model.state[0][0, 0], -0.5) self.assertAlmostEqual(dlm.model.state[1][0, 0], 0.5)
def testEvolveMode(self): dlm = builder() dlm.add(trend(degree=1, discount=0.9, w=1.0)) dlm.add(trend(degree=1, discount=0.98, name='a', w=1.0)) dlm.initialize() kf2 = kalmanFilter(discount=[0.9, 0.98], updateInnovation='component', index=dlm.componentIndex) kf2.forwardFilter(dlm.model, 1.0) self.assertAlmostEqual(dlm.model.innovation[0, 1], 0.0) self.assertAlmostEqual(dlm.model.innovation[1, 0], 0.0)
def testBackwardSmoother(self): dlm = builder() dlm.add(trend(degree=1, discount=1, w=1.0)) dlm.initialize() # with mean being 0 and observe 1 and 0 consectively, one shall # expect the smoothed mean at 1 will be 1/3, for discount = 1 self.kf1.forwardFilter(dlm.model, 1) self.kf1.forwardFilter(dlm.model, 0) self.kf1.backwardSmoother(dlm.model, \ np.matrix([[0.5]]), \ np.matrix([[0.375]])) self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0/3) self.assertAlmostEqual(dlm.model.sysVar[0, 0], 0.18518519)
def __init__(self, data, **options): self.data = list(data) # padded_data is used by auto regressor. It is the raw data with missing value # replaced by forward filter results. (Missing value include the out of scope # predictions. self.padded_data = self.data self.n = len(data) self.result = None self.builder = builder() self.Filter = None self.initialized = False self.options = self._defaultOptions(**options) self.time = None self._printInfo = options.get('printInfo', True)
def testBackwardSmootherMultiDim(self): dlm = builder() dlm.add(trend(degree=2, discount=1, w=1.0)) dlm.initialize() self.kf11.forwardFilter(dlm.model, 1) state1 = dlm.model.state cov1 = dlm.model.sysVar self.kf11.forwardFilter(dlm.model, -1) self.kf11.backwardSmoother(dlm.model, \ rawState = state1, \ rawSysVar = cov1) self.assertAlmostEqual(dlm.model.obs[0, 0], 0.0)
def __init__(self, data, **options): self.data = list(data) # padded_data is used by auto regressor. It is the raw data with missing value # replaced by forward filter results. (Missing value include the out of scope # predictions. self.padded_data = self.data self.n = len(data) self.result = None self.builder = builder() self.Filter = None self.initialized = False self.options = self._defaultOptions(**options) self.time = None self._printInfo = options.get('printInfo', True) self.builder._printInfo = self._printInfo
def testMissingData(self): dlm = builder() dlm.add(trend(degree=1, discount=1, w=1.0)) dlm.initialize() self.kf0.forwardFilter(dlm.model, 1) self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) self.assertAlmostEqual(dlm.model.obsVar[0, 0], 1.0) self.kf0.forwardFilter(dlm.model, None) self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) self.assertAlmostEqual(dlm.model.obsVar[0, 0]/1e10, 0.5) self.kf0.forwardFilter(dlm.model, None) self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) self.assertAlmostEqual(dlm.model.obsVar[0, 0]/1e10, 0.5) self.kf0.forwardFilter(dlm.model, 0) self.assertAlmostEqual(dlm.model.obs[0, 0], 0.0)
def setUp(self): self.features = np.random.rand(10, 2).tolist() self.trend = trend(degree = 3) self.seasonality = seasonality(period = 7) self.dynamic = dynamic(self.features) self.builder1 = builder()