コード例 #1
0
    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)
コード例 #2
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()
コード例 #3
0
    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)
コード例 #4
0
ファイル: testBuilder.py プロジェクト: wwrechard/PyDLM
 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()
コード例 #5
0
ファイル: _dlm.py プロジェクト: ericyewang/pydlm
    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
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
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)
コード例 #11
0
ファイル: _dlm.py プロジェクト: wangt1xiuyi/pydlm
    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)
コード例 #12
0
    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)
コード例 #13
0
ファイル: _dlm.py プロジェクト: wwrechard/PyDLM
    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
コード例 #14
0
    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)
コード例 #15
0
ファイル: testBuilder.py プロジェクト: ericyewang/pydlm
 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()