def test_corr_sanity(self): # GH 3155 df = DataFrame( np.array( [ [0.87024726, 0.18505595], [0.64355431, 0.3091617], [0.92372966, 0.50552513], [0.00203756, 0.04520709], [0.84780328, 0.33394331], [0.78369152, 0.63919667], ] ) ) res = mom.rolling_corr(df[0], df[1], 5, center=True) self.assertTrue(all([np.abs(np.nan_to_num(x)) <= 1 for x in res])) # and some fuzzing for i in range(10): df = DataFrame(np.random.rand(30, 2)) res = mom.rolling_corr(df[0], df[1], 5, center=True) try: self.assertTrue(all([np.abs(np.nan_to_num(x)) <= 1 for x in res])) except: print(res)
def test_rolling_functions_window_non_shrinkage(self): # GH 7764 s = Series(range(4)) s_expected = Series(np.nan, index=s.index) df = DataFrame([[1, 5], [3, 2], [3, 9], [-1, 0]], columns=['A', 'B']) df_expected = DataFrame(np.nan, index=df.index, columns=df.columns) df_expected_panel = Panel(items=df.index, major_axis=df.columns, minor_axis=df.columns) functions = [ lambda x: mom.rolling_cov( x, x, pairwise=False, window=10, min_periods=5), lambda x: mom.rolling_corr( x, x, pairwise=False, window=10, min_periods=5), lambda x: mom.rolling_max(x, window=10, min_periods=5), lambda x: mom.rolling_min(x, window=10, min_periods=5), lambda x: mom.rolling_sum(x, window=10, min_periods=5), lambda x: mom.rolling_mean(x, window=10, min_periods=5), lambda x: mom.rolling_std(x, window=10, min_periods=5), lambda x: mom.rolling_var(x, window=10, min_periods=5), lambda x: mom.rolling_skew(x, window=10, min_periods=5), lambda x: mom.rolling_kurt(x, window=10, min_periods=5), lambda x: mom.rolling_quantile( x, quantile=0.5, window=10, min_periods=5), lambda x: mom.rolling_median(x, window=10, min_periods=5), lambda x: mom.rolling_apply(x, func=sum, window=10, min_periods=5), lambda x: mom.rolling_window( x, win_type='boxcar', window=10, min_periods=5), ] for f in functions: try: s_result = f(s) assert_series_equal(s_result, s_expected) df_result = f(df) assert_frame_equal(df_result, df_expected) except (ImportError): # scipy needed for rolling_window continue functions = [ lambda x: mom.rolling_cov( x, x, pairwise=True, window=10, min_periods=5), lambda x: mom.rolling_corr( x, x, pairwise=True, window=10, min_periods=5), # rolling_corr_pairwise is depracated, so the following line should be deleted # when rolling_corr_pairwise is removed. lambda x: mom.rolling_corr_pairwise(x, x, window=10, min_periods=5 ), ] for f in functions: df_result_panel = f(df) assert_panel_equal(df_result_panel, df_expected_panel)
def test_rolling_corr_diff_length(self): # GH 7512 s1 = Series([1, 2, 3], index=[0, 1, 2]) s2 = Series([1, 3], index=[0, 2]) result = mom.rolling_corr(s1, s2, window=3, min_periods=2) expected = Series([None, None, 1.0]) assert_series_equal(result, expected) s2a = Series([1, None, 3], index=[0, 1, 2]) result = mom.rolling_corr(s1, s2a, window=3, min_periods=2) assert_series_equal(result, expected)
def test_rolling_corr(self): A = self.series B = A + randn(len(A)) result = moments.rolling_corr(A, B, 50, min_periods=25) assert_almost_equal(result[-1], np.corrcoef(A[-50:], B[-50:])[0, 1]) # test for correct bias correction a = tm.makeTimeSeries() b = tm.makeTimeSeries() a[:5] = np.nan b[:10] = np.nan result = moments.rolling_corr(a, b, len(a), min_periods=1) assert_almost_equal(result[-1], a.corr(b))
def test_rolling_corr(self): A = self.series B = A + randn(len(A)) result = mom.rolling_corr(A, B, 50, min_periods=25) assert_almost_equal(result[-1], np.corrcoef(A[-50:], B[-50:])[0, 1]) # test for correct bias correction a = tm.makeTimeSeries() b = tm.makeTimeSeries() a[:5] = np.nan b[:10] = np.nan result = mom.rolling_corr(a, b, len(a), min_periods=1) assert_almost_equal(result[-1], a.corr(b))
def test_rolling_corr_pairwise(self): panel = mom.rolling_corr_pairwise(self.frame, 10, min_periods=5) correl = panel.ix[:, 1, 5] exp = mom.rolling_corr(self.frame[1], self.frame[5], 10, min_periods=5) tm.assert_series_equal(correl, exp)
def test_corr_sanity(self): #GH 3155 df = DataFrame( np.array([[0.87024726, 0.18505595], [0.64355431, 0.3091617], [0.92372966, 0.50552513], [0.00203756, 0.04520709], [0.84780328, 0.33394331], [0.78369152, 0.63919667]])) res = mom.rolling_corr(df[0], df[1], 5, center=True) self.assertTrue(all([np.abs(np.nan_to_num(x)) <= 1 for x in res])) # and some fuzzing for i in range(10): df = DataFrame(np.random.rand(30, 2)) res = mom.rolling_corr(df[0], df[1], 5, center=True) print(res) self.assertTrue(all([np.abs(np.nan_to_num(x)) <= 1 for x in res]))
def test_expanding_corr_pairwise(self): result = mom.expanding_corr(self.frame) rolling_result = mom.rolling_corr(self.frame, len(self.frame), min_periods=1) for i in result.items: assert_almost_equal(result[i], rolling_result[i])
def test_expanding_corr(self): A = self.series.dropna() B = (A + randn(len(A)))[:-5] result = mom.expanding_corr(A, B) rolling_result = mom.rolling_corr(A, B, len(A), min_periods=1) assert_almost_equal(rolling_result, result)
def test_rolling_functions_window_non_shrinkage(self): # GH 7764 s = Series(range(4)) s_expected = Series(np.nan, index=s.index) df = DataFrame([[1,5], [3, 2], [3,9], [-1,0]], columns=['A','B']) df_expected = DataFrame(np.nan, index=df.index, columns=df.columns) df_expected_panel = Panel(items=df.index, major_axis=df.columns, minor_axis=df.columns) functions = [lambda x: mom.rolling_cov(x, x, pairwise=False, window=10, min_periods=5), lambda x: mom.rolling_corr(x, x, pairwise=False, window=10, min_periods=5), lambda x: mom.rolling_max(x, window=10, min_periods=5), lambda x: mom.rolling_min(x, window=10, min_periods=5), lambda x: mom.rolling_sum(x, window=10, min_periods=5), lambda x: mom.rolling_mean(x, window=10, min_periods=5), lambda x: mom.rolling_std(x, window=10, min_periods=5), lambda x: mom.rolling_var(x, window=10, min_periods=5), lambda x: mom.rolling_skew(x, window=10, min_periods=5), lambda x: mom.rolling_kurt(x, window=10, min_periods=5), lambda x: mom.rolling_quantile(x, quantile=0.5, window=10, min_periods=5), lambda x: mom.rolling_median(x, window=10, min_periods=5), lambda x: mom.rolling_apply(x, func=sum, window=10, min_periods=5), lambda x: mom.rolling_window(x, win_type='boxcar', window=10, min_periods=5), ] for f in functions: try: s_result = f(s) assert_series_equal(s_result, s_expected) df_result = f(df) assert_frame_equal(df_result, df_expected) except (ImportError): # scipy needed for rolling_window continue functions = [lambda x: mom.rolling_cov(x, x, pairwise=True, window=10, min_periods=5), lambda x: mom.rolling_corr(x, x, pairwise=True, window=10, min_periods=5), # rolling_corr_pairwise is depracated, so the following line should be deleted # when rolling_corr_pairwise is removed. lambda x: mom.rolling_corr_pairwise(x, x, window=10, min_periods=5), ] for f in functions: df_result_panel = f(df) assert_panel_equal(df_result_panel, df_expected_panel)
from pandas.core.common import isnull from pandas.core.config import option_context db = InfluxDB(db_name='Econ') series_1 = db.interpret('cpi_us_owners_equiv_yoy') series_2 = db.interpret('avg(zillow_median_sale_price_yoy,M)') series_1.rename(columns={'value':'value_1'}, inplace=True) series_2.rename(columns={'value':'value_2'}, inplace=True) periods = 60 analysis_type = 'snapshot' if(analysis_type=='snapshot'): for i in range(-36, 37): # go back i periods shifted_1 = series_1.shift(i) combined = concat([shifted_1['value_1'],series_2['value_2']],axis=1,join='outer') combined = combined.loc[isnull(combined['value_1']) != True] combined = combined.loc[isnull(combined['value_2']) != True] results = rolling_corr(combined['value_1'],combined['value_2'],window=periods) print '%d,%.4f' % (i, results[-1:].values) elif(analysis_type=='history'): shifted_1 = series_1.shift(0) combined = concat([shifted_1['value_1'],series_2['value_2']],axis=1,join='outer') combined = combined.loc[isnull(combined['value_1']) != True] combined = combined.loc[isnull(combined['value_2']) != True] results = rolling_corr(combined['value_1'],combined['value_2'],window=periods) with option_context('display.max_rows', 9999, 'display.max_columns', 3): print results else: print 'type %s not recognized' % analysis_type
def test_rolling_corr(self): A = self.series B = A + randn(len(A)) result = moments.rolling_corr(A, B, 50, min_periods=25) assert_almost_equal(result[-1], np.corrcoef(A[-50:], B[-50:])[0, 1])
def decide_by_history(self, x, last_b=None): self.record_history(x) window = self.window port = pd.DataFrame(self.history) n, m = port.shape weights = 1. / m * np.ones(port.shape) CORR, EX = rolling_corr(port, port.shift(window)) if self.c_version: try: from scipy import weave except ImportError: warnings.warn( 'scipy.weave is not available in python3, falling back to python version' ) self.c_version = False if self.c_version is False: for t in range(n - 1): M = CORR[t, :, :] mu = EX[t, :] # claim[i,j] is claim from stock i to j claim = np.zeros((m, m)) for i in range(m): for j in range(m): if i == j: continue if mu[i] > mu[j] and M[i, j] > 0: claim[i, j] += M[i, j] # autocorrelation if M[i, i] < 0: claim[i, j] += abs(M[i, i]) if M[j, j] < 0: claim[i, j] += abs(M[j, j]) # calculate transfer transfer = claim * 0. for i in range(m): total_claim = sum(claim[i, :]) if total_claim != 0: transfer[i, :] = weights[t, i] * claim[i, :] / total_claim # update weights weights[t + 1, :] = weights[t, :] + np.sum( transfer, axis=0) - np.sum(transfer, axis=1) else: def get_weights_c(c, mu, w): code = """ int t,i,j; float claim [Nc[1]] [Nc[1]]; float transfer [Nc[1]] [Nc[1]]; for (t=0; t<Nc[0]-1; t++) { for (i=0; i<Nc[1]; i++) { for (j=0; j<Nc[1]; j++) { claim[i][j] = 0.; transfer[i][j] = 0.; } } for (i=0; i<Nc[1]; i++) { for (j=0; j<Nc[1]; j++) { if(i != j){ if(MU2(t,i) > MU2(t,j) && C3(t,i,j) > 0){ claim[i][j] += C3(t,i,j); if(C3(t,i,i) < 0) claim[i][j] -= C3(t,i,i); if(C3(t,j,j) < 0) claim[i][j] -= C3(t,j,j); } } } } for (i=0; i<Nc[1]; i++) { float total_claim=0.; for (j=0; j<Nc[1]; j++) { total_claim += claim[i][j]; } if(total_claim != 0){ for (j=0; j<Nc[1]; j++) { transfer[i][j] = W2(t,i) * claim[i][j] / total_claim; } } } for (i=0; i<Nc[1]; i++) { W2(t+1,i) = W2(t,i); for (j=0; j<Nc[1]; j++) { W2(t+1,i) += transfer[j][i] - transfer[i][j]; } } } """ return weave.inline(code, ['c', 'mu', 'w']) get_weights_c(CORR, EX, weights) return weights[-1, :]