edu.cmu.tetradapp.model.MarkovCheckIndTestModel Maven / Gradle / Ivy
///////////////////////////////////////////////////////////////////////////////
// For information as to what this class does, see the Javadoc, below. //
// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, //
// 2007, 2008, 2009, 2010, 2014, 2015, 2022 by Peter Spirtes, Richard //
// Scheines, Joseph Ramsey, and Clark Glymour. //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
///////////////////////////////////////////////////////////////////////////////
package edu.cmu.tetradapp.model;
import edu.cmu.tetrad.data.DataModel;
import edu.cmu.tetrad.data.Knowledge;
import edu.cmu.tetrad.data.KnowledgeBoxInput;
import edu.cmu.tetrad.graph.Graph;
import edu.cmu.tetrad.graph.Node;
import edu.cmu.tetrad.search.ConditioningSetType;
import edu.cmu.tetrad.search.IndependenceTest;
import edu.cmu.tetrad.search.MarkovCheck;
import edu.cmu.tetrad.search.test.IndependenceResult;
import edu.cmu.tetrad.session.SessionModel;
import edu.cmu.tetrad.util.Parameters;
import edu.cmu.tetrad.util.TetradSerializableUtils;
import java.io.Serial;
import java.util.LinkedList;
import java.util.List;
/**
* A model for the Markov check. The Markov check for a given graph and dataset checks whether the graph is Markov with
* respect to the dataset. The Markov check can be used to check whether a graph is Markov with respect to a dataset, or
* whether a graph is Markov with respect to a dataset and a set of variables. The Markov check can also be used to
* check whether a graph is Markov with respect to a dataset and a set of variables, given a set of knowledge. For facts
* of the form X _||_ Y | Z, X and Y should be in the last tier of the knowledge, and Z should be in previous tiers.
*
* @author josephramsey
*/
public class MarkovCheckIndTestModel implements SessionModel, GraphSource, KnowledgeBoxInput {
@Serial
private static final long serialVersionUID = 23L;
// The data model to check.
private final DataModel dataModel;
// The graph to check.
private final Graph graph;
// The parameters.
private final Parameters parameters;
// The name of this model.
private String name = "";
// The variables to check.
private List vars = new LinkedList<>();
// The Markov check object.
private transient MarkovCheck markovCheck = null;
// The knowledge to use. This will be passed to the underlying Markov check object. For facts odf the form
// X _||_ Y | Z, X and Y should be in the last tier, and Z should be in previous tiers.
private Knowledge knowledge;
/**
* Constructs a new Markov checer with the given data model, graph, and parameters.
*
* @param dataModel the data model.
* @param graphSource the graph source.
* @param parameters the parameters.
*/
public MarkovCheckIndTestModel(DataWrapper dataModel, GraphSource graphSource, Parameters parameters) {
this(dataModel, graphSource, null, parameters);
}
/**
* Constructs a new Markov checker with the given data model, graph, and parameters.
*
* @param dataModel the data model.
* @param graphSource the graph source.
* @param parameters the parameters.
*/
public MarkovCheckIndTestModel(DataWrapper dataModel, GraphSource graphSource, KnowledgeBoxModel knowlegeBox,
Parameters parameters) {
this.dataModel = dataModel.getSelectedDataModel();
this.graph = graphSource.getGraph();
this.parameters = parameters;
if (knowlegeBox != null) {
this.knowledge = knowlegeBox.getKnowledge();
}
}
/**
* Generates a simple exemplar of this class to test serialization.
*
* @see TetradSerializableUtils
*/
public static Knowledge serializableInstance() {
return new Knowledge();
}
/**
* Sets the independence test and constructs the underlying MarkovCheck object.
*
* @param test the independence test.
*/
public void setIndependenceTest(IndependenceTest test) {
this.markovCheck = new MarkovCheck(this.graph, test, this.markovCheck == null ? ConditioningSetType.LOCAL_MARKOV : this.markovCheck.getSetType());
if (this.knowledge != null) {
this.markovCheck.setKnowledge(this.knowledge);
}
}
/**
* Returns the underlying MarkovCheck object.
*
* @return the underlying MarkovCheck object.
*/
public MarkovCheck getMarkovCheck() {
return this.markovCheck;
}
/**
* Returns the graph.
*
* @return the graph.
*/
@Override
public Graph getGraph() {
return this.graph;
}
/**
* Returns the data model.
*
* @return the data model.
*/
public DataModel getDataModel() {
return dataModel;
}
/**
* Returns the parameters.
*
* @return the parameters.
*/
public Parameters getParameters() {
return parameters;
}
/**
* Returns the name of this model.
*
* @return the name of this model.
*/
@Override
public String getName() {
return this.name;
}
/**
* Sets the name of this model.
*
* @param name the name of this model.
*/
@Override
public void setName(String name) {
this.name = name;
}
/**
* Returns the variables to check.
*
* @return the variables to check.
*/
public List getVars() {
return this.vars;
}
/**
* Sets the variables to check.
*
* @param vars the variables to check.
*/
public void setVars(List vars) {
this.vars = vars;
}
/**
* Returns the results of the Markov check.
*
* @param indep whether to return the results for the independence test or the dependence test.
* @return the results of the Markov check.
*/
public List getResults(boolean indep) {
return markovCheck.getResults(indep);
}
/**
* Returns the knowledge to use. This will be passed to the underlying Markov check object. For facts of the form X
* _||_ Y | Z, X and Y should be in the last tier, and Z should be in previous tiers.
*
* @return the knowledge to use.
*/
public Knowledge getKnowledge() {
return this.knowledge;
}
/**
* Sets the knowledge to use. This will be passed to the underlying Markov check object. For facts of the form X
* _||_ Y | Z, X and Y should be in the last tier, and Z should be in previous tiers.
*
* @param knowledge a knowledge object.
*/
public void setKnowledge(Knowledge knowledge) {
this.knowledge = knowledge.copy();
if (this.markovCheck != null) {
this.markovCheck.setKnowledge(this.knowledge);
}
}
/**
* Returns the source graph.
*
* @return the source graph.
*/
@Override
public Graph getSourceGraph() {
return null;
}
/**
* Returns the result graph.
*
* @return the result graph.
*/
@Override
public Graph getResultGraph() {
return null;
}
/**
* Returns the variables.
*
* @return the variables.
*/
@Override
public List getVariables() {
return null;
}
/**
* Returns the variable names.
*
* @return the variable names.
*/
@Override
public List getVariableNames() {
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy