Example #1
0
    def test_gsp(self):
        ndags = 10
        nnodes = 8
        nsamples = 500
        nneighbors_list = list(range(1, 3))

        mean_shds = []
        percent_consistent = []
        for nneighbors in nneighbors_list:
            print('=== nneighbors = %s ===' % nneighbors)
            print("generating DAGs")
            dags = directed_erdos(nnodes, nneighbors/(nnodes-1), size=ndags)
            print("generating weights")
            gdags = [rand_weights(dag) for dag in dags]
            print("generating samples")
            samples_by_dag = [gdag.sample(nsamples) for gdag in gdags]

            print("computing sufficient statistics")
            suffstats = [partial_correlation_suffstat(samples) for samples in samples_by_dag]
            ci_testers = [MemoizedCI_Tester(partial_correlation_test, suffstat, alpha=0.1) for suffstat in suffstats]
            print("running GSP")
            est_dags = [
                gsp(set(range(nnodes)), ci_tester, depth=4, nruns=10)
                for ci_tester in ci_testers
            ]
            # print([str(d) for d in est_dags])
            shd_by_dag = np.array([est_dag.shd_skeleton(dag) for est_dag, dag in zip(est_dags, dags)])
            match_by_dag = np.sum(shd_by_dag == 0)
            mean_shds.append(shd_by_dag.mean())
            percent_consistent.append(match_by_dag/ndags)
        print("Mean SHDs:", mean_shds)
        print("Percent consistent:", percent_consistent)
Example #2
0
        'fraction_correct': correct_samples / total_samples
    }
    return stats


if __name__ == '__main__':
    from graphical_models import DAG
    from graphical_models.rand import rand_weights
    from conditional_independence import partial_correlation_suffstat, MemoizedCI_Tester
    from graphical_model_learning import partial_correlation_test, local_gaussian_bge_score

    d = DAG(arcs={(0, 1), (2, 1)})
    # d = DAG(arcs={(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)})
    g = rand_weights(d)
    samples = g.sample(1000)
    suffstat = partial_correlation_suffstat(samples)
    suffstat['samples'] = samples
    initial_perm = [1, 2, 0]
    ci_tester = MemoizedCI_Tester(partial_correlation_test,
                                  suffstat,
                                  alpha=.05)
    initial_dag = permutation2dag(initial_perm, ci_tester)
    # scorer = MemoizedDecomposableScore(local_gaussian_bge_score, suffstat)
    scorer_bge = MemoizedDecomposableScore(local_gaussian_bge_score, suffstat)
    num_meta_iterations = 30
    stats_bges = [
        collect_stats_mcmc(d,
                           initial_perm,
                           initial_dag,
                           ci_tester,
                           adjacent_transposition_proposer,
Example #3
0
def compute_gaussian_interventional_suffstat(intervention_info):
    return {
        intervened_nodes: partial_correlation_suffstat(samples)
        for intervened_nodes, samples in intervention_info.items()
    }
    samples = g.sample(100)
    node = 5
    iv_samples = g.sample_interventional({node: GaussIntervention(0, 1)}, 100)
    data = {frozenset(): samples, frozenset({node}): iv_samples}
    suffstat = compute_gaussian_interventional_suffstat(data)
    # scorer = MemoizedDecomposableScore(local_gaussian_interventional_bic_score, suffstat)
    # score = scorer.get_score(d)
    for node in d.nodes:
        score = local_gaussian_interventional_bic_score(
            node, d.parents_of(node), suffstat, 0)
        print(node, score)

    print()

    all_samples = np.vstack((samples, iv_samples))
    suffstat = partial_correlation_suffstat(all_samples)
    for node in d.nodes:
        score = local_gaussian_bic_score(node, d.parents_of(node), suffstat, 0)
        print(node, score)

    print("***** I-BGe *****")

    suffstat = compute_gaussian_interventional_suffstat(data)
    # scorer = MemoizedDecomposableScore(local_gaussian_interventional_bic_score, suffstat)
    # score = scorer.get_score(d)
    for node in d.nodes:
        score = local_gaussian_interventional_bge_score(
            node, d.parents_of(node), suffstat)
        print(node, score)

    print()