예제 #1
0
 def test_flatTrendTest(self):
     """ generated source for method flatTrendTest """
     seed = 1234567
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 1.0, 0.0, 0.1, seed)
     builder = SeasonalTrendLoess.Builder().setFlatTrend().setPeriodLength(12).setSeasonalWidth(1000000).setRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     trend = stl.getTrend()
     for i in range(1,len(trend)):
         self.assertAlmostEqual(0.0, trend[i] - trend[i - 1], delta=1.0e-13)
예제 #2
0
 def test_flatTrendBuilderCanBeReused(self):
     """ generated source for method flatTrendBuilderCanBeReused """
     data = TestSimulatedWeeklyMetric.getFourWeekValues()
     periodicity = 1008
     builder = SeasonalTrendLoess.Builder()
     builder.setPeriodLength(periodicity).setRobust().setFlatTrend().setSeasonalWidth(101)
     stlSmoother = builder.buildSmoother(data)
     stl = stlSmoother.decompose()
     self.assertIsNotNone(stl)
     builder.setRobustnessIterations(17)
     stlSmoother = builder.buildSmoother(data)
     stl = stlSmoother.decompose()
     self.assertIsNotNone(stl)
예제 #3
0
    def test___str__Test(self):
        """ generated source for method toStringTest """
        data = self.testDataGenerator.createNoisySeasonalDataWithTimeSeed(144, 12, 10.0, 1.0, 2.0)
        builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7).setNonRobust()
        stl = builder.buildSmoother(data)
        self.assertAlmostEqual("SeasonalTrendLoess: [\n" + 
							   "inner iterations     = 2\n" +
							   "outer iterations     = 0\n" + 
							   "periodicity          = 12\n" + 
							   "seasonality settings = [width = 7, degree = 1, jump = 1]\n" + 
							   "trend settings       = [width = 23, degree = 1, jump = 3]\n" + 
							   "lowpass settings     = [width = 13, degree = 1, jump = 2]\n]", 
				    stl.__str__())
예제 #4
0
 def test_linearTrendTest(self):
     """ generated source for method linearTrendTest """
     seed = 1234567
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 1.0, 0.2, 0.1, seed)
     builder = SeasonalTrendLoess.Builder().setLinearTrend().setPeriodLength(12).setSeasonalWidth(1000000).setRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     trend = stl.getTrend()
     dt = trend[1] - trend[0]
     for i in range(1,len(trend)):
         self.assertAlmostEqual(dt, trend[i] - trend[i - 1], delta=1.0e-14)
     dx = 2 * math.pi / 12
     self.assertAlmostEqual(dt, 0.2 * dx, delta=1.0e-4)
예제 #5
0
 def test_pureSineTest(self):
     """ generated source for method pureSineTest """
     seed = 1234567
     #  System.nanoTime() // change this to do random stress test
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 1.0, 0.0, 0.0, seed)
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7).setNonRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     trend = stl.getTrend()
     seasonal = stl.getSeasonal()
     residuals = stl.getResidual()
     for i in range(len(data)):
         self.assertAlmostEqual(data[i], seasonal[i], delta=1.0e-14)
         self.assertAlmostEqual(0.0, trend[i], delta=1.0e-14)
         self.assertAlmostEqual(0.0, residuals[i], delta=1.0e-14)
예제 #6
0
 def test_squareWaveTest(self):
     """ generated source for method squareWaveTest """
     data = self.testDataGenerator.createSquareWaveData()
     builder = SeasonalTrendLoess.Builder().setPeriodLength(288).setSeasonalWidth(13).setNonRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     trend = stl.getTrend()
     seasonal = stl.getSeasonal()
     residuals = stl.getResidual()
     weights = stl.getWeights()
     for i in range(len(data)):
         self.assertAlmostEqual(42.5, trend[i], delta=1.0e-12)
         self.assertAlmostEqual(data[i], seasonal[i] + stl.getTrend()[i], delta=1.0e-12)
         self.assertAlmostEqual(0.0, residuals[i], delta=1.0e-12)
         self.assertAlmostEqual(1.0, weights[i], delta=1.0e-13)
예제 #7
0
    def test_pureNoiseTest(self):
        """ generated source for method pureNoiseTest """
        data = self.testDataGenerator.createNoisySeasonalDataWithTimeSeed(144, 12, 0.0, 0.0, 1.0)
        builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7).setRobust()
        smoother = builder.buildSmoother(data)
        stl = smoother.decompose()
        trend = stl.getTrend()
        seasonal = stl.getSeasonal()
        residuals = stl.getResidual()
        rsum = 0.0
        r2sum = 0.0
        dsum = 0.0
        d2sum = 0.0
        tsum = 0.0
        t2sum = 0.0
        ssum = 0.0
        s2sum = 0.0
        for i in range(len(data)):
        	r = residuals[i]
        	rsum += r
        	r2sum += r * r
        	d = data[i]
        	dsum += d
        	d2sum += d * d
        	t = trend[i]
        	tsum += t
        	t2sum += t * t
        	s = seasonal[i]
        	ssum += s
        	s2sum += s * s

        trendMean = tsum / len(data)
        trendVar = (t2sum - trendMean * trendMean) / (len(data) - 1)
        resMean = rsum / len(data)
        resVar = (r2sum - resMean * resMean) / (len(data) - 1)
        dataMean = dsum / len(data)
        dataVar = (d2sum - dataMean * dataMean) / (len(data) - 1)
        seasonalMean = ssum / len(data)
        seasonalVar = (s2sum - seasonalMean * seasonalMean) / (len(data) - 1)
        stlMean = seasonalMean + trendMean + resMean
        self.assertAlmostEqual(dataMean, stlMean, delta=1.0e-8)
        stlVar = seasonalVar + trendVar + resVar
        print("     \t\tmean\tvariance")
        print("data     \t{}\t{}".format(dataMean, dataVar))
        print("seasonal \t{}\t{}".format(seasonalMean, seasonalVar))
        print("trend    \t{}\t{}".format(trendMean, trendVar))
        print("residual \t{}\t{}".format(resMean, resVar))
        print("stl sum  \t{}\t{}".format(stlMean, stlVar))
예제 #8
0
 def test_pureTrendTest(self):
     """ generated source for method pureTrendTest """
     seed = 1234567
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 0.0, 1.0, 0.0, seed)
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7).setNonRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     trend = stl.getTrend()
     seasonal = stl.getSeasonal()
     residuals = stl.getResidual()
     weights = stl.getWeights()
     for i in range(len(data)):
         self.assertAlmostEqual(data[i], trend[i], delta=1.0e-12)
         self.assertAlmostEqual(0.0, seasonal[i], delta=1.0e-12)
         self.assertAlmostEqual(0.0, residuals[i], delta=1.0e-12)
         self.assertAlmostEqual(1.0, weights[i], delta=1.0e-13)
예제 #9
0
 def test_stlDataFactory(self):
     """ generated source for method stlDataFactory """
     data = self.testDataGenerator.createNoisySeasonalDataWithTimeSeed(144, 12, 10.0, 1.0, 2.0)
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7).setNonRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     residuals = stl.getResidual()
     rsum = 0.0
     r2sum = 0.0
     for i in range(len(data)):
     	r = residuals[i]
     	rsum += r
     	r2sum += r * r
     mean = rsum / len(data)
     variance = (r2sum - rsum * rsum) / (len(data) - 1)
     print("Residual has mean {} and variance {}".format(mean, variance))
예제 #10
0
 def test_robustRegressionTest(self):
     """ generated source for method robustRegressionTest """
     data = np.zeros(144)
     for i in range(len(data)):
         data[i] = self.fRobustNoisySinusoidResults[i,0]
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(7)
     builder.setInnerIterations(1).setRobustnessIterations(1)
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     epsilon = 2.0e-07
     trend = stl.getTrend()
     seasonal = stl.getSeasonal()
     residuals = stl.getResidual()
     for i in range(len(data)):
         self.assertAlmostEqual(self.fRobustNoisySinusoidResults[i][1], trend[i], msg="seasonal[{}]".format(i), delta=epsilon)
         self.assertAlmostEqual(self.fRobustNoisySinusoidResults[i][2], seasonal[i], msg="trend[{}]".format(i), delta=epsilon)
         self.assertAlmostEqual(self.fRobustNoisySinusoidResults[i][3], residuals[i], msg="residuals[{}]".format(i), delta=epsilon)
예제 #11
0
 def test_forcedPeriodicityTest(self):
     """ generated source for method forcedPeriodicityTest """
     data = np.zeros(144)
     for i in range(len(data)):
         data[i] = self.fNonRobustNoisySinusoidResults[i,0]
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12)
     builder.setSeasonalWidth(100000001).setSeasonalDegree(0).setSeasonalJump(100000001)
     builder.setTrendWidth(23)
     builder.setLowpassWidth(13)
     builder.setInnerIterations(2).setRobustnessIterations(0)
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     epsilon = 1.0e-10
     seasonal = stl.getSeasonal()
     for i in range(12):
         for p in range(12):
             self.assertAlmostEqual(seasonal[i], seasonal[i + p * 12], delta=epsilon)
예제 #12
0
 def test_sineWithOutlierTest(self):
     """ generated source for method sineWithOutlierTest """
     seed = 1234567
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 1.0, 0.0, 0.0, seed)
     data[100] = 1000
     builder = SeasonalTrendLoess.Builder().setPeriodLength(12).setSeasonalWidth(1000000).setRobust()
     smoother = builder.buildSmoother(data)
     stl = smoother.decompose()
     epsilon = 1.0e-4
     trend = stl.getTrend()
     seasonal = stl.getSeasonal()
     residuals = stl.getResidual()
     for i in range(len(data)):
         if i != 100:
             self.assertAlmostEqual(data[i], seasonal[i], msg="seasonal[{}]".format(i), delta=epsilon)
             self.assertAlmostEqual(0.0, trend[i], msg="trend[{}]".format(i), delta=epsilon)
             self.assertAlmostEqual(0.0, residuals[i], msg="residuals[{}]".format(i), delta=epsilon)
         else:
             self.assertAlmostEqual(data[i - 12], seasonal[i], msg="seasonal[{}]".format(i), delta=epsilon)
             self.assertAlmostEqual(0.0, trend[i], msg="trend[{}]".format(i), delta=epsilon)
             self.assertAlmostEqual(1.0, residuals[i] / 1000.0, msg="residuals[{}]".format(i), delta=1.0e-3)
예제 #13
0
 def test_nullDataThrows(self):
     """ generated source for method nullDataThrows """
     with self.assertRaises(ValueError):
     	SeasonalTrendLoess.Builder().setPeriodLength(120).setSeasonalWidth(999).buildSmoother(None)
예제 #14
0
 def test_periodicityMustBeAtLeastTwo(self):
     """ generated source for method periodicityMustBeAtLeastTwo """
     with self.assertRaises(ValueError):
     	SeasonalTrendLoess.Builder().setPeriodLength(1)
예제 #15
0
 def test_dataMustHaveAtLeastTwoPeriods(self):
     """ generated source for method dataMustHaveAtLeastTwoPeriods """
     data = self.testDataGenerator.createNoisySeasonalData(144, 12, 1.0, 0.0, 0.0, 123)
     with self.assertRaises(ValueError):
     	SeasonalTrendLoess.Builder().setPeriodLength(120).setSeasonalWidth(999).setNonRobust().buildSmoother(data)
예제 #16
0
 def test_periodLengthMustBeSet(self):
     """ generated source for method periodLengthMustBeSet """
     with self.assertRaises(NameError):
     	SeasonalTrendLoess.Builder().setSeasonalWidth(999).buildSmoother(np.zeros(2000))
예제 #17
0
 def test_getTestBuilder(self):
     """ generated source for method getTestBuilder """
     return SeasonalTrendLoess.Builder().setPeriodic().setPeriodLength(10)