use of edu.cmu.tetrad.graph.Dag in project tetrad by cmu-phil.
the class TestRowSummingUpdater method sampleBayesIm2.
private BayesIm sampleBayesIm2() {
Node a = new GraphNode("a");
Node b = new GraphNode("b");
Node c = new GraphNode("c");
Dag graph;
graph = new Dag();
graph.addNode(a);
graph.addNode(b);
graph.addNode(c);
graph.addDirectedEdge(a, b);
graph.addDirectedEdge(a, c);
graph.addDirectedEdge(b, c);
BayesPm bayesPm = new BayesPm(graph);
bayesPm.setNumCategories(b, 3);
BayesIm bayesIm1 = new MlBayesIm(bayesPm);
bayesIm1.setProbability(0, 0, 0, .3);
bayesIm1.setProbability(0, 0, 1, .7);
bayesIm1.setProbability(1, 0, 0, .3);
bayesIm1.setProbability(1, 0, 1, .4);
bayesIm1.setProbability(1, 0, 2, .3);
bayesIm1.setProbability(1, 1, 0, .6);
bayesIm1.setProbability(1, 1, 1, .1);
bayesIm1.setProbability(1, 1, 2, .3);
bayesIm1.setProbability(2, 0, 0, .9);
bayesIm1.setProbability(2, 0, 1, .1);
bayesIm1.setProbability(2, 1, 0, .1);
bayesIm1.setProbability(2, 1, 1, .9);
bayesIm1.setProbability(2, 2, 0, .5);
bayesIm1.setProbability(2, 2, 1, .5);
bayesIm1.setProbability(2, 3, 0, .2);
bayesIm1.setProbability(2, 3, 1, .8);
bayesIm1.setProbability(2, 4, 0, .6);
bayesIm1.setProbability(2, 4, 1, .4);
bayesIm1.setProbability(2, 5, 0, .7);
bayesIm1.setProbability(2, 5, 1, .3);
return bayesIm1;
}
use of edu.cmu.tetrad.graph.Dag in project tetrad by cmu-phil.
the class TestMatrixUtils method testImpiedCovar.
@Test
public void testImpiedCovar() {
List<Node> nodes = new ArrayList<>();
for (int i = 0; i < 10; i++) {
nodes.add(new ContinuousVariable("X" + (i + 1)));
}
Graph graph = new Dag(GraphUtils.randomGraph(nodes, 0, 10, 30, 15, 15, false));
SemPm pm = new SemPm(graph);
SemIm im = new SemIm(pm);
TetradMatrix err = im.getErrCovar();
TetradMatrix coef = im.getEdgeCoef();
TetradMatrix implied = MatrixUtils.impliedCovar(coef, err);
assertTrue(MatrixUtils.isPositiveDefinite(implied));
TetradMatrix corr = MatrixUtils.convertCovToCorr(new TetradMatrix(implied));
assertTrue(MatrixUtils.isPositiveDefinite(corr));
}
use of edu.cmu.tetrad.graph.Dag in project tetrad by cmu-phil.
the class EmBayesEstimator method findBayesNetObserved.
private void findBayesNetObserved() {
Dag dagObs = new Dag(graph);
for (Node node : nodes) {
if (node.getNodeType() == NodeType.LATENT) {
dagObs.removeNode(node);
}
}
bayesPmObs = new BayesPm(dagObs, bayesPm);
// System.out.println("bayesPm after deleting edges involving latents:");
// System.out.println(bayesPmObs);
// Graph g = bayesPmObs.getDag();
// System.out.println(g);
}
use of edu.cmu.tetrad.graph.Dag in project tetrad by cmu-phil.
the class FactoredBayesStructuralEM method scoreTest.
// public double returnScore() {
// return resultScore;
// }
//
// public Graph returnGraph() {
// return resultGraph;
// }
//
// public int returnIterations() {
// return totaliterations;
// }
public void scoreTest() {
TetradLogger.getInstance().log("details", "scoreTest");
// System.out.println(bayesPmM0.getGraph());
BdeMetricCache bdeMetricCache;
BayesPm bayesPmMn = bayesPmM0;
EmBayesEstimator emBayesEst = new EmBayesEstimator(bayesPmMn, dataSet);
emBayesEst.maximization(0.0001);
Dag dag0 = new Dag(bayesPmMn.getDag());
// double score = factorScoreMD(dag0, bdeMetricCache, bayesPmMn, bayesImMn);
// System.out.println("Score of dag0 = " + score);
Node L1 = dag0.getNode("L1");
Node X1 = dag0.getNode("X1");
Dag dag1 = new Dag(dag0);
dag1.addDirectedEdge(X1, L1);
// BayesPm bayesPmTest = new BayesPm(dag0);
// score = factorScoreMD(dag0, bdeMetricCache, bayesPmTest, bayesImMn);
// System.out.println("Score of dag1 = " + score);
BayesPm bayesPm0 = new BayesPm(dag0);
EmBayesEstimator emBayesEst0 = new EmBayesEstimator(bayesPm0, dataSet);
BayesIm bayesImMn0 = emBayesEst0.maximization(0.0001);
BayesPm bayesPmTest0 = new BayesPm(dag0);
TetradLogger.getInstance().log("details", "Observed conts for nodes of L1,X1,X2,X3 (no edges) " + "using the MAP parameters based on that same graph");
TetradLogger.getInstance().log("details", "Graph of PM: ");
TetradLogger.getInstance().log("details", "" + bayesPmTest0.getDag());
TetradLogger.getInstance().log("details", "Graph of IM: ");
TetradLogger.getInstance().log("details", "" + bayesImMn0.getBayesPm().getDag());
bdeMetricCache = new BdeMetricCache(dataSet, bayesPmTest0);
List<Node> nodes0 = dag0.getNodes();
for (Node aNodes0 : nodes0) {
double[][] counts0 = bdeMetricCache.getObservedCounts(aNodes0, bayesPmTest0, bayesImMn0);
for (double[] aCounts0 : counts0) {
for (int j = 0; j < counts0[0].length; j++) {
System.out.print(" " + aCounts0[j]);
}
TetradLogger.getInstance().log("details", "\n");
}
TetradLogger.getInstance().log("details", "\n");
}
double score0 = factorScoreMD(dag0, bdeMetricCache, bayesPmTest0, bayesImMn0);
TetradLogger.getInstance().log("details", "Score of L1,X1,X2,X3 (no edges) for itself = " + score0);
TetradLogger.getInstance().log("details", "===============\n\n");
TetradLogger.getInstance().log("details", "Score of X1-->L1 for L1,X1,X2,X3 (no edges) = " + score0);
BayesPm bayesPmTest1 = new BayesPm(dag1);
TetradLogger.getInstance().log("details", "Observed counts for nodes of X1-->L1 for L1,X1,X2,X3 (no edges)");
TetradLogger.getInstance().log("details", "Graph of PM : ");
TetradLogger.getInstance().log("details", "" + bayesPmTest1.getDag());
TetradLogger.getInstance().log("details", "Graph of IM: ");
TetradLogger.getInstance().log("details", "" + bayesImMn0.getBayesPm().getDag());
bdeMetricCache = new BdeMetricCache(dataSet, bayesPmTest1);
List<Node> nodes1 = dag0.getNodes();
for (Node aNodes1 : nodes1) {
double[][] counts1 = bdeMetricCache.getObservedCounts(aNodes1, bayesPmTest1, bayesImMn0);
for (double[] aCounts1 : counts1) {
for (int j = 0; j < counts1[0].length; j++) {
TetradLogger.getInstance().log("details", " " + aCounts1[j]);
}
TetradLogger.getInstance().log("details", "\n");
}
TetradLogger.getInstance().log("details", "\n");
}
double score1 = factorScoreMD(dag1, bdeMetricCache, bayesPmTest1, bayesImMn0);
TetradLogger.getInstance().log("details", "Score of X1-->L1 for L1,X1,X2,X3 (no edges) = " + score1);
}
use of edu.cmu.tetrad.graph.Dag in project tetrad by cmu-phil.
the class BayesXmlParser method makeBayesPm.
private BayesPm makeBayesPm(List<Node> variables, Element element1) {
if (!"parents".equals(element1.getQualifiedName())) {
throw new IllegalArgumentException("Expecting 'parents' element.");
}
Dag graph = new Dag();
for (Node variable : variables) {
graph.addNode(variable);
}
Elements elements = element1.getChildElements();
for (int i = 0; i < elements.size(); i++) {
Element e1 = elements.get(i);
if (!"parentsFor".equals(e1.getQualifiedName())) {
throw new IllegalArgumentException("Expecting 'parentsFor' element.");
}
String varName = e1.getAttributeValue("name");
Node var = namesToVars.get(varName);
Elements elements1 = e1.getChildElements();
for (int j = 0; j < elements1.size(); j++) {
Element e2 = elements1.get(j);
if (!"parent".equals(e2.getQualifiedName())) {
throw new IllegalArgumentException("Expecting 'parent' element.");
}
String parentName = e2.getAttributeValue("name");
Node parent = namesToVars.get(parentName);
graph.addDirectedEdge(parent, var);
}
}
BayesPm bayesPm = new BayesPm(graph);
for (Node variable1 : variables) {
DiscreteVariable graphVariable = (DiscreteVariable) variable1;
List<String> categories = graphVariable.getCategories();
bayesPm.setCategories(graphVariable, categories);
}
return bayesPm;
}
Aggregations