def get_fpr(self, measure, significance): fpr = numpy.zeros(self.samples) for sam in range(self.samples): # data, links = var_process(self.links_coeffs, T=self.T, # use='inno_cov', verbosity=verbosity) data = numpy.random.randn(self.T, 2) # .argsort(axis=0).argsort(axis=0) res = te._calculate_lag_function( measure=measure, data=data, var_x=0, var_y=1, conds_x=None, conds_y=None, measure_params=self.measure_params, tau_max=1, selected_lags=[1], significance=significance, sig_lev=self.sig_lev, sig_samples=self.sig_samples, verbosity=0) fpr[sam] = res['cmi_pval'][1] return (fpr <= (1. - self.sig_lev)).mean()
def get_fpr(self, measure, significance): fpr = numpy.zeros(self.samples) for sam in range(self.samples): # data, links = var_process(self.links_coeffs, T=self.T, # use='inno_cov', verbosity=verbosity) data = numpy.random.randn(self.T, 2) # .argsort(axis=0).argsort(axis=0) res = te._calculate_lag_function( measure=measure, data=data, var_x=0, var_y=1, conds_x=None, conds_y=None, measure_params=self.measure_params, tau_max=1, selected_lags=[1], significance=significance, sig_lev=self.sig_lev, sig_samples=self.sig_samples, verbosity=0) fpr[sam] = res['cmi_pval'][1] return (fpr <= (1. - self.sig_lev)).mean()
def test_measures(): print("\nTesting function '_calculate_lag_function' to check dependence " "measures are correctly estimated.") measure_params = {'knn': 10, } ax = 0.6 ay = 0.3 cxy = .7 links_coeffs = {0: [((0, -1), ax)], 1: [((1, -1), ay), ((0, -1), cxy)], } numpy.random.seed(42) data, links = pp.var_process(links_coeffs, T=5000, use='inno_cov', verbosity=verbosity) T, N = data.shape expected_cmi = 0.5 * numpy.log(1. + (cxy**2 * 1.**2) / (1.**2)) expected_parcorr = cmi2parcorr_trafo(expected_cmi) gamma_x = 1.**2 / (1. - ax**2) gamma_xy = (ax * cxy * gamma_x) / (1. - ax * ay) gamma_y = (cxy**2 * gamma_x + 1.**2 + 2. * ay * cxy * gamma_xy) / (1. - ay**2) expected_reg = cxy * numpy.sqrt(gamma_x / gamma_y) for measure in ['par_corr', 'reg', 'cmi_knn', 'cmi_gauss']: res = te._calculate_lag_function( measure=measure, data=data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] if measure == 'par_corr': print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_parcorr)) numpy.testing.assert_allclose(res[1], expected_parcorr, rtol=0.1) elif measure == 'reg': print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_reg)) numpy.testing.assert_allclose(res[1], expected_reg, rtol=0.1) elif (measure == 'cmi_knn' or measure == 'cmi_gauss'): print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.1) # binning estimator symb_data = pp.quantile_bin_array(data, bins=5) res = te._calculate_lag_function( measure='cmi_symb', data=symb_data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] print("%s = %.3f (expected = %.3f)" % ('symb', res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.3) # ordinal pattern estimator symb_data = pp.ordinal_patt_array(data, array_mask=numpy.ones(data.shape, dtype='int32'), dim=3, step=2)[0] res = te._calculate_lag_function( measure='cmi_symb', data=symb_data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] print("%s = %.3f (expected = %.3f)" % ('ordinal-symb', res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.4)
def test_measures(): print("\nTesting function '_calculate_lag_function' to check dependence " "measures are correctly estimated.") measure_params = { 'knn': 10, } ax = 0.6 ay = 0.3 cxy = .7 links_coeffs = { 0: [((0, -1), ax)], 1: [((1, -1), ay), ((0, -1), cxy)], } numpy.random.seed(42) data, links = pp.var_process(links_coeffs, T=10000, use='inno_cov', verbosity=verbosity) T, N = data.shape expected_cmi = 0.5 * numpy.log(1. + (cxy**2 * 1.**2) / (1.**2)) expected_parcorr = cmi2parcorr_trafo(expected_cmi) gamma_x = 1.**2 / (1. - ax**2) gamma_xy = (ax * cxy * gamma_x) / (1. - ax * ay) gamma_y = (cxy**2 * gamma_x + 1.**2 + 2. * ay * cxy * gamma_xy) / (1. - ay**2) expected_reg = cxy * numpy.sqrt(gamma_x / gamma_y) for measure in ['par_corr', 'reg', 'cmi_knn', 'cmi_gauss']: res = te._calculate_lag_function(measure=measure, data=data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] if measure == 'par_corr': print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_parcorr)) numpy.testing.assert_allclose(res[1], expected_parcorr, rtol=0.1) elif measure == 'reg': print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_reg)) numpy.testing.assert_allclose(res[1], expected_reg, rtol=0.1) elif (measure == 'cmi_knn' or measure == 'cmi_gauss'): print("%s = %.3f (expected = %.3f)" % (measure, res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.1) # binning estimator symb_data = pp.quantile_bin_array(data, bins=6) res = te._calculate_lag_function(measure='cmi_symb', data=symb_data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] print("%s = %.3f (expected = %.3f)" % ('symb', res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.3) # ordinal pattern estimator symb_data = pp.ordinal_patt_array(data, array_mask=numpy.ones(data.shape, dtype='int32'), dim=3, step=2)[0] res = te._calculate_lag_function(measure='cmi_symb', data=symb_data, var_x=0, var_y=1, conds_x=links[0], conds_y=links[1], measure_params=measure_params, tau_max=1, selected_lags=[1], verbosity=verbosity)['cmi'] print("%s = %.3f (expected = %.3f)" % ('ordinal-symb', res[1], expected_cmi)) numpy.testing.assert_allclose(res[1], expected_cmi, rtol=0.4)