Search in sources :

Example 1 with BayesPm

use of edu.cmu.tetrad.bayes.BayesPm in project tetrad by cmu-phil.

the class PcStableLocalSearchEditor method reportIfDiscrete.

private String reportIfDiscrete(Graph dag, DataSet dataSet) {
    List vars = dataSet.getVariables();
    Map<String, DiscreteVariable> nodesToVars = new HashMap<>();
    for (int i = 0; i < dataSet.getNumColumns(); i++) {
        DiscreteVariable var = (DiscreteVariable) vars.get(i);
        String name = var.getName();
        Node node = new GraphNode(name);
        nodesToVars.put(node.getName(), var);
    }
    BayesPm bayesPm = new BayesPm(new Dag(dag));
    List<Node> nodes = bayesPm.getDag().getNodes();
    for (Node node : nodes) {
        Node var = nodesToVars.get(node.getName());
        if (var instanceof DiscreteVariable) {
            DiscreteVariable var2 = nodesToVars.get(node.getName());
            int numCategories = var2.getNumCategories();
            List<String> categories = new ArrayList<>();
            for (int j = 0; j < numCategories; j++) {
                categories.add(var2.getCategory(j));
            }
            bayesPm.setCategories(node, categories);
        }
    }
    BayesProperties properties = new BayesProperties(dataSet);
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(4);
    StringBuilder buf = new StringBuilder();
    buf.append("\nP-value = ").append(properties.getLikelihoodRatioP(dag));
    buf.append("\nDf = ").append(properties.getDof());
    buf.append("\nChi square = ").append(nf.format(properties.getChisq()));
    buf.append("\nBIC score = ").append(nf.format(properties.getBic()));
    buf.append("\n\nH0: Completely disconnected graph.");
    return buf.toString();
}
Also used : BayesProperties(edu.cmu.tetrad.bayes.BayesProperties) PatternToDag(edu.cmu.tetrad.search.PatternToDag) List(java.util.List) BayesPm(edu.cmu.tetrad.bayes.BayesPm) NumberFormat(java.text.NumberFormat)

Example 2 with BayesPm

use of edu.cmu.tetrad.bayes.BayesPm in project tetrad by cmu-phil.

the class TestBayesIm method testCopyConstructor.

@Test
public void testCopyConstructor() {
    Graph graph = GraphConverter.convert("X1-->X2,X1-->X3,X2-->X4,X3-->X4");
    Dag dag = new Dag(graph);
    BayesPm bayesPm = new BayesPm(dag);
    BayesIm bayesIm = new MlBayesIm(bayesPm, MlBayesIm.RANDOM);
    BayesIm bayesIm2 = new MlBayesIm(bayesIm);
    assertEquals(bayesIm, bayesIm2);
}
Also used : MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesIm(edu.cmu.tetrad.bayes.BayesIm) MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesPm(edu.cmu.tetrad.bayes.BayesPm) Test(org.junit.Test)

Example 3 with BayesPm

use of edu.cmu.tetrad.bayes.BayesPm in project tetrad by cmu-phil.

the class TestBayesIm method testAddRemoveParent.

/**
 * Tests whether the BayesIm does the right thing in a very simple case
 * where nodes are added or removed from the graph. Start with graph a -> b,
 * parameterizing with two values for each node. Construct and fill in
 * probability tables in BayesIm. Then add edge c -> b "manually." This
 * should create a table of values for c that is unspecified, and it should
 * double up the rows from b. Then remove the node c. Now the table for b
 * should be completely unspecified.
 */
@Test
public void testAddRemoveParent() {
    Node a = new GraphNode("a");
    Node b = new GraphNode("b");
    Graph dag = new EdgeListGraph();
    dag.addNode(a);
    dag.addNode(b);
    dag.addDirectedEdge(a, b);
    BayesPm bayesPm = new BayesPm(dag);
    BayesIm bayesIm = new MlBayesIm(bayesPm, MlBayesIm.RANDOM);
    BayesIm bayesIm2 = new MlBayesIm(bayesPm, bayesIm, MlBayesIm.MANUAL);
    assertEquals(bayesIm, bayesIm2);
    Node c = new GraphNode("c");
    dag.addNode(c);
    dag.addDirectedEdge(c, b);
    BayesPm bayesPm3 = new BayesPm(dag, bayesPm);
    BayesIm bayesIm3 = new MlBayesIm(bayesPm3, bayesIm2, MlBayesIm.MANUAL);
    // Make sure the rows got repeated.
    // assertTrue(rowsEqual(bayesIm3, bayesIm3.getNodeIndex(b), 0, 1));
    // assertTrue(!rowsEqual(bayesIm3, bayesIm3.getNodeIndex(b), 1, 2));
    // assertTrue(rowsEqual(bayesIm3, bayesIm3.getNodeIndex(b), 2, 3));
    // Make sure the 'c' node got ?'s.
    assertTrue(rowUnspecified(bayesIm3, bayesIm3.getNodeIndex(c), 0));
    dag.removeNode(c);
    BayesPm bayesPm4 = new BayesPm(dag, bayesPm3);
    BayesIm bayesIm4 = new MlBayesIm(bayesPm4, bayesIm3, MlBayesIm.MANUAL);
    // Make sure the 'b' node has 2 rows of '?'s'.
    assertTrue(bayesIm4.getNumRows(bayesIm4.getNodeIndex(b)) == 2);
    assertTrue(rowUnspecified(bayesIm4, bayesIm4.getNodeIndex(b), 0));
    assertTrue(rowUnspecified(bayesIm4, bayesIm4.getNodeIndex(b), 1));
}
Also used : MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesIm(edu.cmu.tetrad.bayes.BayesIm) MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesPm(edu.cmu.tetrad.bayes.BayesPm) Test(org.junit.Test)

Example 4 with BayesPm

use of edu.cmu.tetrad.bayes.BayesPm in project tetrad by cmu-phil.

the class TestBayesIm method testConstructManual.

@Test
public void testConstructManual() {
    Graph graph = GraphConverter.convert("X1-->X2,X1-->X3,X2-->X4,X3-->X4");
    Graph dag = new Dag(graph);
    BayesPm bayesPm = new BayesPm(dag);
    BayesIm bayesIm = new MlBayesIm(bayesPm);
    Graph dag1 = bayesIm.getBayesPm().getDag();
    Graph dag2 = GraphUtils.replaceNodes(dag1, graph.getNodes());
    assertEquals(dag2, graph);
}
Also used : MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesIm(edu.cmu.tetrad.bayes.BayesIm) MlBayesIm(edu.cmu.tetrad.bayes.MlBayesIm) BayesPm(edu.cmu.tetrad.bayes.BayesPm) Test(org.junit.Test)

Example 5 with BayesPm

use of edu.cmu.tetrad.bayes.BayesPm in project tetrad by cmu-phil.

the class TestBayesPm method testChangeNumValues.

@Test
public void testChangeNumValues() {
    Graph graph = GraphConverter.convert("X1-->X2,X1-->X3,X2-->X4,X3-->X4");
    Dag dag = new Dag(graph);
    Node x1 = dag.getNode("X1");
    Node x2 = dag.getNode("X2");
    BayesPm bayesPm = new BayesPm(dag, 3, 3);
    bayesPm.setNumCategories(x1, 5);
    assertEquals(5, bayesPm.getNumCategories(x1));
    assertEquals(3, bayesPm.getNumCategories(x2));
}
Also used : BayesPm(edu.cmu.tetrad.bayes.BayesPm) Test(org.junit.Test)

Aggregations

BayesPm (edu.cmu.tetrad.bayes.BayesPm)38 MlBayesIm (edu.cmu.tetrad.bayes.MlBayesIm)23 BayesIm (edu.cmu.tetrad.bayes.BayesIm)18 Test (org.junit.Test)17 Node (edu.cmu.tetrad.graph.Node)14 Graph (edu.cmu.tetrad.graph.Graph)10 DataSet (edu.cmu.tetrad.data.DataSet)6 Dag (edu.cmu.tetrad.graph.Dag)6 DisplayNode (edu.cmu.tetradapp.workbench.DisplayNode)6 ArrayList (java.util.ArrayList)6 List (java.util.List)5 BayesProperties (edu.cmu.tetrad.bayes.BayesProperties)4 LargeScaleSimulation (edu.cmu.tetrad.sem.LargeScaleSimulation)4 Algorithm (edu.cmu.tetrad.algcomparison.algorithm.Algorithm)3 GraphNode (edu.cmu.tetrad.graph.GraphNode)3 Parameters (edu.cmu.tetrad.util.Parameters)3 GeneralBootstrapTest (edu.pitt.dbmi.algo.bootstrap.GeneralBootstrapTest)3 NumberFormat (java.text.NumberFormat)3 RandomGraph (edu.cmu.tetrad.algcomparison.graph.RandomGraph)2 ChiSquare (edu.cmu.tetrad.algcomparison.independence.ChiSquare)2