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();
}
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);
}
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));
}
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);
}
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));
}
Aggregations