Search in sources :

Example 6 with PatternToDag

use of edu.cmu.tetrad.search.PatternToDag in project tetrad by cmu-phil.

the class PcGesSearchEditor method calcStats.

private void calcStats() {
    Graph resultGraph = getAlgorithmRunner().getGraph();
    if (getAlgorithmRunner().getDataModel() instanceof DataSet) {
        // resultGraph may be the output of a PC search.
        // Such graphs sometimes contain doubly directed edges.
        // We convert such edges to directed edges here.
        // For the time being an orientation is arbitrarily selected.
        Set<Edge> allEdges = resultGraph.getEdges();
        for (Edge edge : allEdges) {
            if (edge.getEndpoint1() == Endpoint.ARROW && edge.getEndpoint2() == Endpoint.ARROW) {
                // Option 1 orient it from node1 to node2
                resultGraph.setEndpoint(edge.getNode1(), edge.getNode2(), Endpoint.ARROW);
                // Option 2 remove such edges:
                resultGraph.removeEdge(edge);
            }
        }
        Graph dag = SearchGraphUtils.dagFromPattern(resultGraph);
        DataSet dataSet = (DataSet) getAlgorithmRunner().getDataModel();
        String report;
        if (dataSet.isContinuous()) {
            report = reportIfContinuous(dag, dataSet);
        } else if (dataSet.isDiscrete()) {
            report = reportIfDiscrete(dag, dataSet);
        } else {
            throw new IllegalArgumentException("");
        }
        JScrollPane dagWorkbenchScroll = dagWorkbenchScroll(dag);
        modelStatsText.setLineWrap(true);
        modelStatsText.setWrapStyleWord(true);
        modelStatsText.setText(report);
        removeStatsTabs();
        tabbedPane.addTab("DAG in pattern", dagWorkbenchScroll);
        tabbedPane.addTab("DAG Model Statistics", modelStatsText);
    } else if (getAlgorithmRunner().getDataModel() instanceof ICovarianceMatrix) {
        // resultGraph may be the output of a PC search.
        // Such graphs sometimes contain doubly directed edges.
        // We converte such edges to directed edges here.
        // For the time being an orientation is arbitrarily selected.
        Set<Edge> allEdges = resultGraph.getEdges();
        for (Edge edge : allEdges) {
            if (edge.getEndpoint1() == Endpoint.ARROW && edge.getEndpoint2() == Endpoint.ARROW) {
                // Option 1 orient it from node1 to node2
                resultGraph.setEndpoint(edge.getNode1(), edge.getNode2(), Endpoint.ARROW);
                // Option 2 remove such edges:
                resultGraph.removeEdge(edge);
            }
        }
        Graph pattern = new EdgeListGraphSingleConnections(resultGraph);
        PatternToDag ptd = new PatternToDag(pattern);
        Graph dag = ptd.patternToDagMeek();
        ICovarianceMatrix dataSet = (ICovarianceMatrix) getAlgorithmRunner().getDataModel();
        String report = reportIfCovMatrix(dag, dataSet);
        JScrollPane dagWorkbenchScroll = dagWorkbenchScroll(dag);
        modelStatsText.setLineWrap(true);
        modelStatsText.setWrapStyleWord(true);
        modelStatsText.setText(report);
        removeStatsTabs();
        tabbedPane.addTab("DAG in pattern", dagWorkbenchScroll);
        tabbedPane.addTab("DAG Model Statistics", modelStatsText);
    }
}
Also used : PatternToDag(edu.cmu.tetrad.search.PatternToDag)

Example 7 with PatternToDag

use of edu.cmu.tetrad.search.PatternToDag in project tetrad by cmu-phil.

the class PcStableLocalSearchEditor method addSpecialMenus.

protected void addSpecialMenus(JMenuBar menuBar) {
    if (!(getAlgorithmRunner() instanceof IGesRunner)) {
        JMenu test = new JMenu("Independence");
        menuBar.add(test);
        IndTestMenuItems.addIndependenceTestChoices(test, this);
    // test.addSeparator();
    // 
    // AlgorithmRunner algorithmRunner = getAlgorithmRunner();
    // if (algorithmRunner instanceof IndTestProducer) {
    // IndTestProducer p = (IndTestProducer) algorithmRunner;
    // IndependenceFactsAction action =
    // new IndependenceFactsAction(this, p, "Independence Facts...");
    // test.add(action);
    // }
    }
    JMenu graph = new JMenu("Graph");
    JMenuItem showDags = new JMenuItem("Show DAGs in forbid_latent_common_causes");
    // JMenuItem meekOrient = new JMenuItem("Meek Orientation");
    JMenuItem dagInPattern = new JMenuItem("Choose DAG in forbid_latent_common_causes");
    JMenuItem gesOrient = new JMenuItem("Global Score-based Reorientation");
    JMenuItem nextGraph = new JMenuItem("Next Graph");
    JMenuItem previousGraph = new JMenuItem("Previous Graph");
    // graph.add(new LayoutMenu(this));
    graph.add(new GraphPropertiesAction(getWorkbench()));
    graph.add(new PathsAction(getWorkbench()));
    // graph.add(new DirectedPathsAction(getWorkbench()));
    // graph.add(new TreksAction(getWorkbench()));
    // graph.add(new AllPathsAction(getWorkbench()));
    // graph.add(new NeighborhoodsAction(getWorkbench()));
    graph.add(new TriplesAction(getWorkbench().getGraph(), getAlgorithmRunner()));
    graph.addSeparator();
    // graph.add(meekOrient);
    graph.add(dagInPattern);
    graph.add(gesOrient);
    graph.addSeparator();
    graph.add(previousGraph);
    graph.add(nextGraph);
    graph.addSeparator();
    graph.add(showDags);
    graph.addSeparator();
    graph.add(new JMenuItem(new SelectBidirectedAction(getWorkbench())));
    graph.add(new JMenuItem(new SelectUndirectedAction(getWorkbench())));
    menuBar.add(graph);
    showDags.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            Window owner = (Window) getTopLevelAncestor();
            new WatchedProcess(owner) {

                public void watch() {
                    // Needs to be a pattern search; this isn't checked
                    // before running the algorithm because of allowable
                    // "slop"--e.g. bidirected edges.
                    AlgorithmRunner runner = getAlgorithmRunner();
                    Graph graph = runner.getGraph();
                    if (graph == null) {
                        JOptionPane.showMessageDialog(JOptionUtils.centeringComp(), "No result gaph.");
                        return;
                    }
                    // if (runner instanceof ImagesRunner) {
                    // GraphScorer scorer = ((ImagesRunner) runner).getGraphScorer();
                    // Graph _graph = ((ImagesRunner) runner).getTopGraphs().get(getIndex()).getGraph();
                    // 
                    // ScoredGraphsDisplay display = new ScoredGraphsDisplay(_graph, scorer);
                    // GraphWorkbench workbench = getWorkbench();
                    // 
                    // EditorWindow editorWindow =
                    // new EditorWindow(display, "Independence Facts",
                    // "Close", false, workbench);
                    // DesktopController.getInstance().addEditorWindow(editorWindow, JLayeredPane.PALETTE_LAYER);
                    // editorWindow.setVisible(true);
                    // }
                    // else {
                    PatternDisplay display = new PatternDisplay(graph);
                    GraphWorkbench workbench = getWorkbench();
                    EditorWindow editorWindow = new EditorWindow(display, "Independence Facts", "Close", false, workbench);
                    DesktopController.getInstance().addEditorWindow(editorWindow, JLayeredPane.PALETTE_LAYER);
                    editorWindow.setVisible(true);
                // }
                }
            };
        }
    });
    // meekOrient.addActionListener(new ActionListener() {
    // public void actionPerformed(ActionEvent e) {
    // ImpliedOrientation rules = getAlgorithmRunner().getMeekRules();
    // rules.setKnowledge((IKnowledge) getAlgorithmRunner().getParams().get("knowledge", new Knowledge2()));
    // rules.orientImplied(getGraph());
    // getGraphHistory().add(getGraph());
    // getWorkbench().setGraph(getGraph());
    // firePropertyChange("modelChanged", null, null);
    // }
    // });
    dagInPattern.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            Graph graph = new EdgeListGraph(getGraph());
            // Removing bidirected edges from the pattern before selecting a DAG.                                   4
            for (Edge edge : graph.getEdges()) {
                if (Edges.isBidirectedEdge(edge)) {
                    graph.removeEdge(edge);
                }
            }
            PatternToDag search = new PatternToDag(new EdgeListGraphSingleConnections(graph));
            Graph dag = search.patternToDagMeek();
            getGraphHistory().add(dag);
            getWorkbench().setGraph(dag);
            ((AbstractAlgorithmRunner) getAlgorithmRunner()).setResultGraph(dag);
            firePropertyChange("modelChanged", null, null);
        }
    });
    gesOrient.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            DataModel dataModel = getAlgorithmRunner().getDataModel();
            final Graph graph = SearchGraphUtils.reorient(getGraph(), dataModel, getKnowledge());
            getGraphHistory().add(graph);
            getWorkbench().setGraph(graph);
            firePropertyChange("modelChanged", null, null);
        }
    });
    nextGraph.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            Graph next = getGraphHistory().next();
            getWorkbench().setGraph(next);
            ((AbstractAlgorithmRunner) getAlgorithmRunner()).setResultGraph(next);
            firePropertyChange("modelChanged", null, null);
        }
    });
    previousGraph.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            Graph previous = getGraphHistory().previous();
            getWorkbench().setGraph(previous);
            ((AbstractAlgorithmRunner) getAlgorithmRunner()).setResultGraph(previous);
            firePropertyChange("modelChanged", null, null);
        }
    });
    // if (getAlgorithmRunner().supportsKnowledge()) {
    // menuBar.add(new Knowledge2Menu(this));
    // }
    menuBar.add(new LayoutMenu(this));
}
Also used : LayoutMenu(edu.cmu.tetradapp.workbench.LayoutMenu) PatternToDag(edu.cmu.tetrad.search.PatternToDag) ActionEvent(java.awt.event.ActionEvent) WatchedProcess(edu.cmu.tetradapp.util.WatchedProcess) ActionListener(java.awt.event.ActionListener) GraphWorkbench(edu.cmu.tetradapp.workbench.GraphWorkbench)

Example 8 with PatternToDag

use of edu.cmu.tetrad.search.PatternToDag in project tetrad by cmu-phil.

the class PcStableLocalSearchEditor method calcStats.

private void calcStats() {
    Graph resultGraph = getAlgorithmRunner().getGraph();
    if (getAlgorithmRunner().getDataModel() instanceof DataSet) {
        // resultGraph may be the output of a PC search.
        // Such graphs sometimes contain doubly directed edges.
        // We converte such edges to directed edges here.
        // For the time being an orientation is arbitrarily selected.
        Set<Edge> allEdges = resultGraph.getEdges();
        for (Edge edge : allEdges) {
            if (edge.getEndpoint1() == Endpoint.ARROW && edge.getEndpoint2() == Endpoint.ARROW) {
                // Option 1 orient it from node1 to node2
                resultGraph.setEndpoint(edge.getNode1(), edge.getNode2(), Endpoint.ARROW);
                // Option 2 remove such edges:
                resultGraph.removeEdge(edge);
            }
        }
        Graph pattern = new EdgeListGraphSingleConnections(resultGraph);
        PatternToDag ptd = new PatternToDag(pattern);
        Graph dag = ptd.patternToDagMeek();
        DataSet dataSet = (DataSet) getAlgorithmRunner().getDataModel();
        String report;
        if (dataSet.isContinuous()) {
            report = reportIfContinuous(dag, dataSet);
        } else if (dataSet.isDiscrete()) {
            report = reportIfDiscrete(dag, dataSet);
        } else {
            throw new IllegalArgumentException("");
        }
        JScrollPane dagWorkbenchScroll = dagWorkbenchScroll("Dag", dag);
        modelStatsText.setLineWrap(true);
        modelStatsText.setWrapStyleWord(true);
        modelStatsText.setText(report);
        removeStatsTabs();
        tabbedPane.addTab("DAG in pattern", dagWorkbenchScroll);
        tabbedPane.addTab("DAG Model Statistics", modelStatsText);
    }
}
Also used : PatternToDag(edu.cmu.tetrad.search.PatternToDag)

Aggregations

PatternToDag (edu.cmu.tetrad.search.PatternToDag)8 Fges (edu.cmu.tetrad.search.Fges)3 WatchedProcess (edu.cmu.tetradapp.util.WatchedProcess)3 GraphWorkbench (edu.cmu.tetradapp.workbench.GraphWorkbench)3 LayoutMenu (edu.cmu.tetradapp.workbench.LayoutMenu)3 ActionEvent (java.awt.event.ActionEvent)3 ActionListener (java.awt.event.ActionListener)3 DataModel (edu.cmu.tetrad.data.DataModel)2 DataSet (edu.cmu.tetrad.data.DataSet)2 BDeuScore (edu.cmu.tetrad.search.BDeuScore)2 ContinuousVariable (edu.cmu.tetrad.data.ContinuousVariable)1 CovarianceMatrixOnTheFly (edu.cmu.tetrad.data.CovarianceMatrixOnTheFly)1 ICovarianceMatrix (edu.cmu.tetrad.data.ICovarianceMatrix)1 Dag (edu.cmu.tetrad.graph.Dag)1 Graph (edu.cmu.tetrad.graph.Graph)1 SemBicScore (edu.cmu.tetrad.search.SemBicScore)1 SemEstimator (edu.cmu.tetrad.sem.SemEstimator)1 SemIm (edu.cmu.tetrad.sem.SemIm)1 SemPm (edu.cmu.tetrad.sem.SemPm)1 ContinuousTabularDataFileReader (edu.pitt.dbmi.data.reader.tabular.ContinuousTabularDataFileReader)1