Пример #1
0
 def _run_alg(excluded):
     sample_dict_exclude = {
         k: v
         for k, v in sample_dict.items() if k != frozenset({excluded})
     }
     iv_estimated_folder = os.path.join(ESTIMATED_FOLDER,
                                        'exclude_%s' % excluded)
     filename = os.path.join(
         iv_estimated_folder,
         'igsp_effective_%s_alpha=%.2e,alpha_i=%.2e.txt' %
         (ci_test, alpha, alpha_invariance))
     if not os.path.exists(filename):
         if ci_test == 'gauss_ci':
             est_dag = igsp(sample_dict_exclude,
                            suffstat,
                            nnodes,
                            gauss_ci_test,
                            hsic_invariance_test,
                            alpha=alpha,
                            nruns=10,
                            alpha_invariance=alpha_invariance)
         elif ci_test == 'hsic':
             est_dag = igsp(sample_dict_exclude,
                            sample_dict_exclude[frozenset()],
                            nnodes,
                            hsic_test,
                            hsic_invariance_test,
                            alpha=alpha,
                            nruns=10,
                            alpha_invariance=alpha_invariance)
         else:
             raise ValueError
         np.savetxt(filename, est_dag.to_amat())
Пример #2
0
def run_igsp():
    for i in range(100):
        igsp(samples,
             suffstat,
             nnodes,
             gauss_ci_test,
             hsic_invariance_test,
             nruns=10)
Пример #3
0
def _run_alg(excluded):
    # === REMOVE EXCLUDED FROM SAMPLES
    setting_list_exclude = [
        setting for setting in setting_list
        if excluded not in setting['known_interventions']
    ]
    sample_dict_exclude = dict()
    for setting in setting_list_exclude:
        iv_nodes = frozenset(setting['known_interventions'])
        samples = setting['samples']
        if iv_nodes not in sample_dict_exclude:
            sample_dict_exclude[iv_nodes] = samples
        else:
            sample_dict_exclude[iv_nodes] = np.concatenate(
                (sample_dict_exclude[iv_nodes], samples), axis=0)

    # === CREATE FILENAME
    iv_estimated_folder = os.path.join(ESTIMATED_FOLDER,
                                       'exclude_%s' % excluded)
    filename = os.path.join(
        iv_estimated_folder, 'igsp_%s_alpha=%.2e,alpha_i=%.2e.txt' %
        (ci_test, alpha, alpha_invariance))
    if not os.path.exists(filename):
        if ci_test == 'gauss_ci':
            os.system('touch gauss_ci_igsp_%d.tst' % excluded)
            est_dag = igsp(sample_dict_exclude,
                           suffstat,
                           nnodes,
                           gauss_ci_test,
                           hsic_invariance_test,
                           alpha=alpha,
                           nruns=10,
                           alpha_invariance=alpha_invariance)
        else:
            os.system('touch hsic_igsp_%d.tst' % excluded)
            est_dag = igsp(sample_dict_exclude,
                           sample_dict_exclude[frozenset()],
                           nnodes,
                           hsic_test,
                           hsic_invariance_test,
                           alpha=alpha,
                           nruns=10,
                           alpha_invariance=alpha_invariance)
        np.savetxt(filename, est_dag.to_amat())
Пример #4
0
from causaldag.inference.structural import igsp
from causaldag.utils.ci_tests import gauss_ci_test, hsic_invariance_test
import causaldag as cd
import numpy as np
import random

np.random.seed(40)
random.seed(9879132)

nnodes = 10
nsamples = 100
dag = cd.rand.directed_erdos(nnodes, 1.5 / (nnodes - 1), 1)
gdag = cd.rand.rand_weights(dag)
obs_samples = gdag.sample(nsamples)
sample_dict = {}
sample_dict[frozenset()] = obs_samples
for i in range(10):
    sample_dict[frozenset({i})] = gdag.sample_interventional_perfect(
        {i: cd.GaussIntervention(1, .1)}, nsamples)
suffstat = dict(C=np.corrcoef(obs_samples, rowvar=False), n=nsamples)

est_dag = igsp(sample_dict,
               suffstat,
               nnodes,
               gauss_ci_test,
               hsic_invariance_test,
               1e-5,
               1e-5,
               nruns=5,
               verbose=True)
Пример #5
0
    sample_dict = {frozenset(): samples, frozenset({nnodes - 1}): iv_samples}
    suffstat = dict(C=np.corrcoef(samples, rowvar=False), n=nsamples)

    # === SAVE SAMPLES
    sample_folder = os.path.join(PROJECT_FOLDER, 'tmp')
    iv_sample_folder = os.path.join(sample_folder, 'interventional')
    os.makedirs(iv_sample_folder, exist_ok=True)
    np.savetxt(os.path.join(sample_folder, 'observational.txt'), samples)
    iv_str = 'known_ivs=%s;unknown_ivs=%s.txt' % (nnodes - 1, 0)
    np.savetxt(os.path.join(iv_sample_folder, iv_str), iv_samples)

    # === RUN ALGORITHMS
    dag_igsp = igsp(sample_dict,
                    suffstat,
                    nnodes,
                    gauss_ci_test,
                    hsic_invariance_test,
                    nruns=10,
                    alpha_invariance=1e-5)
    dag_utigsp = unknown_target_igsp(sample_dict,
                                     suffstat,
                                     nnodes,
                                     gauss_ci_test,
                                     hsic_invariance_test,
                                     nruns=10,
                                     alpha_invariance=1e-2)
    amat_gies = run_gies(sample_folder, lambda_=50)
    dag_gies = cd.DAG.from_amat(amat_gies)

    dags_igsp.append(dag_igsp)
    dags_utigsp.append(dag_utigsp)
Пример #6
0
setting_list = [{
    'known_interventions': iv_nodes,
    'samples': samples
} for iv_nodes, samples in sample_dict.items() if iv_nodes != frozenset()]

nnodes = obs_samples.shape[1]
np.random.seed(1729)
random.seed(1729)
# starting_permutations = [random.sample(list(range(nnodes)), nnodes) for i in range(10)]
starting_permutations = [true_dag.topological_sort()]
# === RUN IGSP
igsp_dag = igsp(sample_dict,
                suffstat,
                nnodes,
                gauss_ci_test,
                hsic_invariance_test,
                alpha=1e-5,
                alpha_invariance=1e-5,
                depth=6,
                verbose=True,
                starting_permutations=starting_permutations)

np.random.seed(1729)
random.seed(1729)
# === RUN UTIGSP
utigsp_dag = unknown_target_igsp(obs_samples,
                                 setting_list,
                                 suffstat,
                                 nnodes,
                                 gauss_ci_test,
                                 hsic_invariance_test,
                                 alpha=1e-5,