def test_bking1d(): # Test Baxter King band-pass filter. Results are taken from Stata bking_results = array([ 7.320813, 2.886914, -6.818976, -13.49436, -13.27936, -9.405913, -5.691091, -5.133076, -7.273468, -9.243364, -8.482916, -4.447764, 2.406559, 10.68433, 19.46414, 28.09749, 34.11066, 33.48468, 24.64598, 9.952399, -4.265528, -12.59471, -13.46714, -9.049501, -3.011248, .5655082, 2.897976, 7.406077, 14.67959, 18.651, 13.05891, -2.945415, -24.08659, -41.86147, -48.68383, -43.32689, -31.66654, -20.38356, -13.76411, -9.978693, -3.7704, 10.27108, 31.02847, 51.87613, 66.93117, 73.51951, 73.4053, 69.17468, 59.8543, 38.23899, -.2604809, -49.0107, -91.1128, -112.1574, -108.3227, -86.51453, -59.91258, -40.01185, -29.70265, -22.76396, -13.08037, 1.913622, 20.44045, 37.32873, 46.79802, 51.95937, 59.67393, 70.50803, 81.27311, 83.53191, 67.72536, 33.78039, -6.509092, -37.31579, -46.05207, -29.81496, 1.416417, 28.31503, 32.90134, 8.949259, -35.41895, -84.65775, -124.4288, -144.6036, -140.2204, -109.2624, -53.6901, 15.07415, 74.44268, 104.0403, 101.0725, 76.58291, 49.27925, 36.15751, 36.48799, 37.60897, 27.75998, 4.216643, -23.20579, -39.33292, -36.6134, -20.90161, -4.143123, 5.48432, 9.270075, 13.69573, 22.16675, 33.01987, 41.93186, 47.12222, 48.62164, 47.30701, 40.20537, 22.37898, -7.133002, -43.3339, -78.51229, -101.3684, -105.2179, -90.97147, -68.30824, -48.10113, -35.60709, -31.15775, -31.82346, -32.49278, -28.22499, -14.42852, 10.1827, 36.64189, 49.43468, 38.75517, 6.447761, -33.15883, -62.60446, -72.87829, -66.54629, -52.61205, -38.06676, -26.19963, -16.51492, -7.007577, .6125674, 7.866972, 14.8123, 22.52388, 30.65265, 39.47801, 49.05027, 59.02925, 72.88999, 95.08865, 125.8983, 154.4283, 160.7638, 130.6092, 67.84406, -7.070272, -68.08128, -99.39944, -104.911, -100.2372, -98.11596, -104.2051, -114.0125, -113.3475, -92.98669, -51.91707, -.7313812, 43.22938, 64.62762, 64.07226, 59.35707, 67.06026, 91.87247, 124.4591, 151.2402, 163.0648, 154.6432 ]) X = macrodata.load_pandas().data['realinv'].values Y = bkfilter(X, 6, 32, 12) assert_almost_equal(Y, bking_results, 4)
def test_bking_pandas(): # 1d dta = macrodata.load_pandas().data index = date_range(start='1959-01-01', end='2009-10-01', freq='Q') dta.index = index filtered = bkfilter(dta["infl"]) nd_filtered = bkfilter(dta['infl'].values) assert_equal(filtered.values, nd_filtered) assert_equal(filtered.index[0], datetime(1962, 3, 31)) assert_equal(filtered.index[-1], datetime(2006, 9, 30)) assert_equal(filtered.name, "infl_cycle") # 2d filtered = bkfilter(dta[["infl", "unemp"]]) nd_filtered = bkfilter(dta[['infl', 'unemp']].values) assert_equal(filtered.values, nd_filtered) assert_equal(filtered.index[0], datetime(1962, 3, 31)) assert_equal(filtered.index[-1], datetime(2006, 9, 30)) assert_equal(filtered.columns.values, ["infl_cycle", "unemp_cycle"])
def run(self, data): index, col, low, high, K = ( self.cfg.get(p) for p in ["index", "col", "low", "high", "K"] ) df = build_data(data, self.cfg) cycle = bkfilter(df, low, high, K) df = pd.concat([df, cycle], axis=1, keys=[col, "cycle"]) df = df.reset_index() return_data, _code = build_base_chart( df.fillna(0), index, [col, "cycle"], agg="raw" ) return return_data
def test_bking2d(): # Test Baxter-King band-pass filter with 2d input bking_results = array([ [7.320813, -.0374475], [2.886914, -.0430094], [-6.818976, -.053456], [-13.49436, -.0620739], [-13.27936, -.0626929], [-9.405913, -.0603022], [-5.691091, -.0630016], [-5.133076, -.0832268], [-7.273468, -.1186448], [-9.243364, -.1619868], [-8.482916, -.2116604], [-4.447764, -.2670747], [2.406559, -.3209931], [10.68433, -.3583075], [19.46414, -.3626742], [28.09749, -.3294618], [34.11066, -.2773388], [33.48468, -.2436127], [24.64598, -.2605531], [9.952399, -.3305166], [-4.265528, -.4275561], [-12.59471, -.5076068], [-13.46714, -.537573], [-9.049501, -.5205845], [-3.011248, -.481673], [.5655082, -.4403994], [2.897976, -.4039957], [7.406077, -.3537394], [14.67959, -.2687359], [18.651, -.1459743], [13.05891, .0014926], [-2.945415, .1424277], [-24.08659, .2451936], [-41.86147, .288541], [-48.68383, .2727282], [-43.32689, .1959127], [-31.66654, .0644874], [-20.38356, -.1158372], [-13.76411, -.3518627], [-9.978693, -.6557535], [-3.7704, -1.003754], [10.27108, -1.341632], [31.02847, -1.614486], [51.87613, -1.779089], [66.93117, -1.807459], [73.51951, -1.679688], [73.4053, -1.401012], [69.17468, -.9954996], [59.8543, -.511261], [38.23899, -.0146745], [-.2604809, .4261311], [-49.0107, .7452514], [-91.1128, .8879492], [-112.1574, .8282748], [-108.3227, .5851508], [-86.51453, .2351699], [-59.91258, -.1208998], [-40.01185, -.4297895], [-29.70265, -.6821963], [-22.76396, -.9234254], [-13.08037, -1.217539], [1.913622, -1.57367], [20.44045, -1.927008], [37.32873, -2.229565], [46.79802, -2.463154], [51.95937, -2.614697], [59.67393, -2.681357], [70.50803, -2.609654], [81.27311, -2.301618], [83.53191, -1.720974], [67.72536, -.9837123], [33.78039, -.2261613], [-6.509092, .4546985], [-37.31579, 1.005751], [-46.05207, 1.457224], [-29.81496, 1.870815], [1.416417, 2.263313], [28.31503, 2.599906], [32.90134, 2.812282], [8.949259, 2.83358], [-35.41895, 2.632667], [-84.65775, 2.201077], [-124.4288, 1.598951], [-144.6036, .9504762], [-140.2204, .4187932], [-109.2624, .1646726], [-53.6901, .2034265], [15.07415, .398165], [74.44268, .5427476], [104.0403, .5454975], [101.0725, .4723354], [76.58291, .4626823], [49.27925, .5840143], [36.15751, .7187981], [36.48799, .6058422], [37.60897, .1221227], [27.75998, -.5891272], [4.216643, -1.249841], [-23.20579, -1.594972], [-39.33292, -1.545968], [-36.6134, -1.275494], [-20.90161, -1.035783], [-4.143123, -.9971732], [5.48432, -1.154264], [9.270075, -1.29987], [13.69573, -1.240559], [22.16675, -.9662656], [33.01987, -.6420301], [41.93186, -.4698712], [47.12222, -.4527797], [48.62164, -.4407153], [47.30701, -.2416076], [40.20537, .2317583], [22.37898, .8710276], [-7.133002, 1.426177], [-43.3339, 1.652785], [-78.51229, 1.488021], [-101.3684, 1.072096], [-105.2179, .6496446], [-90.97147, .4193682], [-68.30824, .41847], [-48.10113, .5253419], [-35.60709, .595076], [-31.15775, .5509905], [-31.82346, .3755519], [-32.49278, .1297979], [-28.22499, -.0916165], [-14.42852, -.2531037], [10.1827, -.3220784], [36.64189, -.2660561], [49.43468, -.1358522], [38.75517, -.0279508], [6.447761, .0168735], [-33.15883, .0315687], [-62.60446, .0819507], [-72.87829, .2274033], [-66.54629, .4641401], [-52.61205, .7211093], [-38.06676, .907773], [-26.19963, .9387103], [-16.51492, .7940786], [-7.007577, .5026631], [.6125674, .1224996], [7.866972, -.2714422], [14.8123, -.6273921], [22.52388, -.9124271], [30.65265, -1.108861], [39.47801, -1.199206], [49.05027, -1.19908], [59.02925, -1.139046], [72.88999, -.9775021], [95.08865, -.6592603], [125.8983, -.1609712], [154.4283, .4796201], [160.7638, 1.100565], [130.6092, 1.447148], [67.84406, 1.359608], [-7.070272, .8931825], [-68.08128, .2619787], [-99.39944, -.252208], [-104.911, -.4703874], [-100.2372, -.4430657], [-98.11596, -.390683], [-104.2051, -.5647846], [-114.0125, -.9397582], [-113.3475, -1.341633], [-92.98669, -1.567337], [-51.91707, -1.504943], [-.7313812, -1.30576], [43.22938, -1.17151], [64.62762, -1.136151], [64.07226, -1.050555], [59.35707, -.7308369], [67.06026, -.1766731], [91.87247, .3898467], [124.4591, .8135461], [151.2402, .9644226], [163.0648, .6865934], [154.6432, .0115685]]) mdata = macrodata.load_pandas() X = mdata.data[['realinv', 'cpi']].values.astype(float) Y = bkfilter(X, 6, 32, 12) assert_almost_equal(Y, bking_results, 4)
def baxter_king(X, low=10, high=100, Lag=20): # filter : Centers around zero cycle = bkfilter(X, low=low, high=high, K=Lag) return pd.DataFrame(cycle)