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)