def test_calculate_mean(): """Test if mean over CMI estimates is calculated correctly.""" data = Data() data.generate_mute_data(100, 5) res_0 = pickle.load( open(os.path.join(os.path.dirname(__file__), 'data/mute_results_0.p'), 'rb')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) cmi = comp._calculate_cmi_all_links(data) cmi_mean = comp._calculate_mean([cmi, cmi]) for t in comp.union.targets_analysed: assert (cmi_mean[t] == cmi[t]).all(), ('Error in mean of CMI for ' 'target {0}'.format(t)) if len(cmi[t]) == 0: # skip if no links in results continue assert (cmi_mean[t] == cmi[t][0]).all(), ( 'Error in mean of CMI for target {0} - actual: ({1}), expected: ' '({2})'.format(t, cmi_mean[t], cmi[t][0]))
def test_calculate_cmi_all_links(): """Test if the CMI is estimated correctly.""" expected_mi, source, source_uncorr, target = _get_gauss_data() source = source[1:] source_uncorr = source_uncorr[1:] target = target[:-1] data = Data(np.hstack((source, target)), dim_order='sp', normalise=False) res_0 = pickle.load( open(os.path.join(os.path.dirname(__file__), 'data/mute_results_0.p'), 'rb')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) # Set selected variable to the source, one sample in the past of the # current_value (1, 5). comp.union._single_target[1]['selected_vars_sources'] = [(0, 4)] cmi = comp._calculate_cmi_all_links(data) print('correlated Gaussians: TE result {0:.4f} bits; expected to be ' '{1:0.4f} bit for the copy'.format(cmi[1][0], expected_mi)) assert np.isclose(cmi[1][0], expected_mi, atol=0.05), ( 'Estimated TE {0:0.6f} differs from expected TE {1:0.6f}.'.format( cmi[1][0], expected_mi))
def test_calculate_mean(): """Test if mean over CMI estimates is calculated correctly.""" dat = Data() dat.generate_mute_data(100, 5) res_0 = np.load(os.path.join(os.path.dirname(__file__), 'data/mute_res_0.pkl')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) cmi = comp._calculate_cmi_all_links(dat) cmi_mean = comp._calculate_mean([cmi, cmi]) for t in comp.union['targets']: assert (cmi_mean[t] == cmi[t]).all(), ('Error in mean of CMI for ' 'target {0}'.format(t))
def test_calculate_cmi_all_links(): """Test if the CMI is estimated correctly.""" dat = Data() n = 1000 cov = 0.4 source = [rn.normalvariate(0, 1) for r in range(n)] # correlated src target = [0] + [sum(pair) for pair in zip( [cov * y for y in source[0:n - 1]], [(1 - cov) * y for y in [rn.normalvariate(0, 1) for r in range(n - 1)]])] dat.set_data(np.vstack((source, target)), 'ps') res_0 = np.load(os.path.join(os.path.dirname(__file__), 'data/mute_res_0.pkl')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) comp.union[1]['selected_vars_sources'] = [(0, 4)] cmi = comp._calculate_cmi_all_links(dat) cmi_expected = np.log(1 / (1 - cov ** 2)) print('correlated Gaussians: TE result {0:.4f} bits; expected to be ' '{1:0.4f} bit for the copy'.format(cmi[1][0], cmi_expected)) np.testing.assert_almost_equal( cmi[1][0], cmi_expected, decimal=1, err_msg='when calculating cmi for correlated Gaussians.')
def test_calculate_mean(): """Test if mean over CMI estimates is calculated correctly.""" data = Data() data.generate_mute_data(100, 5) res_0 = np.load(os.path.join(os.path.dirname(__file__), 'data/mute_results_0.p')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) cmi = comp._calculate_cmi_all_links(data) cmi_mean = comp._calculate_mean([cmi, cmi]) for t in comp.union.targets_analysed: assert (cmi_mean[t] == cmi[t]).all(), ('Error in mean of CMI for ' 'target {0}'.format(t))
def test_calculate_cmi_all_links(): """Test if the CMI is estimated correctly.""" data = Data() n = 1000 cov = 0.4 source = [rn.normalvariate(0, 1) for r in range(n)] # correlated src target = [0] + [sum(pair) for pair in zip( [cov * y for y in source[0:n - 1]], [(1 - cov) * y for y in [rn.normalvariate(0, 1) for r in range(n - 1)]])] data.set_data(np.vstack((source, target)), 'ps') res_0 = np.load(os.path.join(os.path.dirname(__file__), 'data/mute_results_0.p')) comp_settings = { 'cmi_estimator': 'JidtKraskovCMI', 'n_perm_max_stat': 50, 'n_perm_min_stat': 50, 'n_perm_omnibus': 200, 'n_perm_max_seq': 50, 'tail': 'two', 'n_perm_comp': 6, 'alpha_comp': 0.2, 'stats_type': 'dependent' } comp = NetworkComparison() comp._initialise(comp_settings) comp._create_union(res_0) comp.union._single_target[1]['selected_vars_sources'] = [(0, 4)] cmi = comp._calculate_cmi_all_links(data) corr_expected = cov / (1 * np.sqrt(cov**2 + (1-cov)**2)) expected_cmi = calculate_mi(corr_expected) print('correlated Gaussians: TE result {0:.4f} bits; expected to be ' '{1:0.4f} bit for the copy'.format(cmi[1][0], expected_cmi)) np.testing.assert_almost_equal( cmi[1][0], expected_cmi, decimal=1, err_msg='when calculating cmi for correlated Gaussians.')