All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.cmu.tetrad.algcomparison.algorithm.oracle.pag.GraspFci Maven / Gradle / Ivy

There is a newer version: 7.6.4
Show newest version
package edu.cmu.tetrad.algcomparison.algorithm.oracle.pag;

import edu.cmu.tetrad.algcomparison.algorithm.Algorithm;
import edu.cmu.tetrad.algcomparison.algorithm.ReturnsBootstrapGraphs;
import edu.cmu.tetrad.algcomparison.independence.IndependenceWrapper;
import edu.cmu.tetrad.algcomparison.score.ScoreWrapper;
import edu.cmu.tetrad.algcomparison.utils.HasKnowledge;
import edu.cmu.tetrad.algcomparison.utils.TakesIndependenceWrapper;
import edu.cmu.tetrad.algcomparison.utils.UsesScoreWrapper;
import edu.cmu.tetrad.annotation.AlgType;
import edu.cmu.tetrad.annotation.Bootstrapping;
import edu.cmu.tetrad.data.DataModel;
import edu.cmu.tetrad.data.DataSet;
import edu.cmu.tetrad.data.DataType;
import edu.cmu.tetrad.data.Knowledge;
import edu.cmu.tetrad.graph.Graph;
import edu.cmu.tetrad.graph.GraphTransforms;
import edu.cmu.tetrad.search.IndependenceTest;
import edu.cmu.tetrad.search.score.Score;
import edu.cmu.tetrad.search.utils.TsUtils;
import edu.cmu.tetrad.util.Parameters;
import edu.cmu.tetrad.util.Params;
import edu.pitt.dbmi.algo.resampling.GeneralResamplingTest;

import java.util.ArrayList;
import java.util.List;


/**
 * Adjusts GFCI to use a permutation algorithm (such as BOSS-Tuck) to do the initial steps of finding adjacencies and
 * unshielded colliders.
 * 

* GFCI reference is this: *

* J.M. Ogarrio and P. Spirtes and J. Ramsey, "A Hybrid Causal Search Algorithm for Latent Variable Models," JMLR 2016. * * @author josephramsey */ @edu.cmu.tetrad.annotation.Algorithm( name = "GRASP-FCI", command = "grasp-fci", algoType = AlgType.allow_latent_common_causes ) @Bootstrapping public class GraspFci implements Algorithm, UsesScoreWrapper, TakesIndependenceWrapper, HasKnowledge, ReturnsBootstrapGraphs { private static final long serialVersionUID = 23L; private IndependenceWrapper test; private ScoreWrapper score; private Knowledge knowledge = new Knowledge(); private List bootstrapGraphs = new ArrayList<>(); public GraspFci() { // Used for reflection; do not delete. } public GraspFci(IndependenceWrapper test, ScoreWrapper score) { this.test = test; this.score = score; } @Override public Graph search(DataModel dataModel, Parameters parameters) { if (parameters.getInt(Params.NUMBER_RESAMPLING) < 1) { if (parameters.getInt(Params.TIME_LAG) > 0) { DataSet dataSet = (DataSet) dataModel; DataSet timeSeries = TsUtils.createLagData(dataSet, parameters.getInt(Params.TIME_LAG)); if (dataSet.getName() != null) { timeSeries.setName(dataSet.getName()); } dataModel = timeSeries; knowledge = timeSeries.getKnowledge(); } IndependenceTest test = this.test.getTest(dataModel, parameters); Score score = this.score.getScore(dataModel, parameters); test.setVerbose(parameters.getBoolean(Params.VERBOSE)); edu.cmu.tetrad.search.GraspFci search = new edu.cmu.tetrad.search.GraspFci(test, score); // GRaSP search.setDepth(parameters.getInt(Params.GRASP_DEPTH)); search.setSingularDepth(parameters.getInt(Params.GRASP_SINGULAR_DEPTH)); search.setNonSingularDepth(parameters.getInt(Params.GRASP_NONSINGULAR_DEPTH)); search.setOrdered(parameters.getBoolean(Params.GRASP_ORDERED_ALG)); search.setUseScore(parameters.getBoolean(Params.GRASP_USE_SCORE)); search.setUseRaskuttiUhler(parameters.getBoolean(Params.GRASP_USE_RASKUTTI_UHLER)); search.setUseDataOrder(parameters.getBoolean(Params.USE_DATA_ORDER)); search.setNumStarts(parameters.getInt(Params.NUM_STARTS)); // FCI search.setDepth(parameters.getInt(Params.DEPTH)); search.setMaxPathLength(parameters.getInt(Params.MAX_PATH_LENGTH)); search.setCompleteRuleSetUsed(parameters.getBoolean(Params.COMPLETE_RULE_SET_USED)); search.setDoDiscriminatingPathRule(parameters.getBoolean(Params.DO_DISCRIMINATING_PATH_RULE)); // General search.setVerbose(parameters.getBoolean(Params.VERBOSE)); search.setKnowledge(this.knowledge); return search.search(); } else { GraspFci algorithm = new GraspFci(this.test, this.score); DataSet data = (DataSet) dataModel; GeneralResamplingTest search = new GeneralResamplingTest(data, algorithm, parameters.getInt(Params.NUMBER_RESAMPLING), parameters.getDouble(Params.PERCENT_RESAMPLE_SIZE), parameters.getBoolean(Params.RESAMPLING_WITH_REPLACEMENT), parameters.getInt(Params.RESAMPLING_ENSEMBLE), parameters.getBoolean(Params.ADD_ORIGINAL_DATASET)); search.setKnowledge(this.knowledge); search.setParameters(parameters); search.setVerbose(parameters.getBoolean(Params.VERBOSE)); Graph graph = search.search(); if (parameters.getBoolean(Params.SAVE_BOOTSTRAP_GRAPHS)) this.bootstrapGraphs = search.getGraphs(); return graph; } } @Override public Graph getComparisonGraph(Graph graph) { return GraphTransforms.dagToPag(graph); } @Override public String getDescription() { return "GRASP-FCI (GRaSP FCI) using " + this.test.getDescription() + " and " + this.score.getDescription(); } @Override public DataType getDataType() { return this.test.getDataType(); } @Override public List getParameters() { List params = new ArrayList<>(); // GRaSP params.add(Params.GRASP_DEPTH); params.add(Params.GRASP_SINGULAR_DEPTH); params.add(Params.GRASP_NONSINGULAR_DEPTH); params.add(Params.GRASP_ORDERED_ALG); params.add(Params.GRASP_USE_RASKUTTI_UHLER); params.add(Params.USE_DATA_ORDER); params.add(Params.NUM_STARTS); // FCI params.add(Params.DEPTH); params.add(Params.MAX_PATH_LENGTH); params.add(Params.COMPLETE_RULE_SET_USED); params.add(Params.DO_DISCRIMINATING_PATH_RULE); params.add(Params.POSSIBLE_MSEP_DONE); // General params.add(Params.TIME_LAG); params.add(Params.VERBOSE); return params; } @Override public Knowledge getKnowledge() { return this.knowledge; } @Override public void setKnowledge(Knowledge knowledge) { this.knowledge = new Knowledge((Knowledge) knowledge); } @Override public IndependenceWrapper getIndependenceWrapper() { return this.test; } @Override public void setIndependenceWrapper(IndependenceWrapper test) { this.test = test; } @Override public ScoreWrapper getScoreWrapper() { return this.score; } @Override public void setScoreWrapper(ScoreWrapper score) { this.score = score; } @Override public List getBootstrapGraphs() { return this.bootstrapGraphs; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy