Search in sources :

Example 6 with CovarianceMatrix

use of edu.cmu.tetrad.data.CovarianceMatrix in project tetrad by cmu-phil.

the class Mimbuild2 method search.

// =================================== PUBLIC METHODS =========================================//
public Graph search(List<List<Node>> clustering, List<String> latentNames, ICovarianceMatrix measuresCov) {
    List<String> _latentNames = new ArrayList<>(latentNames);
    List<String> allVarNames = new ArrayList<>();
    for (List<Node> cluster : clustering) {
        for (Node node : cluster) allVarNames.add(node.getName());
    }
    measuresCov = measuresCov.getSubmatrix(allVarNames);
    List<List<Node>> _clustering = new ArrayList<>();
    for (List<Node> cluster : clustering) {
        List<Node> _cluster = new ArrayList<>();
        for (Node node : cluster) {
            _cluster.add(measuresCov.getVariable(node.getName()));
        }
        _clustering.add(_cluster);
    }
    List<Node> latents = defineLatents(_latentNames);
    this.latents = latents;
    // This removes the small clusters and their names.
    removeSmallClusters(latents, _clustering, getMinClusterSize());
    this.clustering = _clustering;
    Node[][] indicators = new Node[latents.size()][];
    for (int i = 0; i < latents.size(); i++) {
        indicators[i] = new Node[_clustering.get(i).size()];
        for (int j = 0; j < _clustering.get(i).size(); j++) {
            indicators[i][j] = _clustering.get(i).get(j);
        }
    }
    TetradMatrix cov = getCov(measuresCov, latents, indicators);
    CovarianceMatrix latentscov = new CovarianceMatrix(latents, cov, measuresCov.getSampleSize());
    this.latentsCov = latentscov;
    Graph graph;
    Cpc search = new Cpc(new IndTestFisherZ(latentscov, alpha));
    search.setKnowledge(knowledge);
    graph = search.search();
    // try {
    // Ges search = new Ges(latentscov);
    // search.setDepErrorsAlpha(penaltyDiscount);
    // search.setKnowledge(knowledge);
    // graph = search.search();
    // } catch (Exception e) {
    // //            e.printStackTrace();
    // CPC search = new CPC(new IndTestFisherZ(latentscov, alpha));
    // search.setKnowledge(knowledge);
    // graph = search.search();
    // }
    this.structureGraph = new EdgeListGraph(graph);
    GraphUtils.fruchtermanReingoldLayout(this.structureGraph);
    return this.structureGraph;
}
Also used : ArrayList(java.util.ArrayList) TetradMatrix(edu.cmu.tetrad.util.TetradMatrix) CovarianceMatrix(edu.cmu.tetrad.data.CovarianceMatrix) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) ArrayList(java.util.ArrayList) List(java.util.List)

Example 7 with CovarianceMatrix

use of edu.cmu.tetrad.data.CovarianceMatrix in project tetrad by cmu-phil.

the class MimbuildTrek method search.

// =================================== PUBLIC METHODS =========================================//
public Graph search(List<List<Node>> clustering, List<String> latentNames, ICovarianceMatrix measuresCov) {
    List<String> _latentNames = new ArrayList<>(latentNames);
    List<String> allVarNames = new ArrayList<>();
    for (List<Node> cluster : clustering) {
        for (Node node : cluster) allVarNames.add(node.getName());
    }
    measuresCov = measuresCov.getSubmatrix(allVarNames);
    List<List<Node>> _clustering = new ArrayList<>();
    for (List<Node> cluster : clustering) {
        List<Node> _cluster = new ArrayList<>();
        for (Node node : cluster) {
            _cluster.add(measuresCov.getVariable(node.getName()));
        }
        _clustering.add(_cluster);
    }
    List<Node> latents = defineLatents(_latentNames);
    this.latents = latents;
    // This removes the small clusters and their names.
    removeSmallClusters(latents, _clustering, getMinClusterSize());
    this.clustering = _clustering;
    Node[][] indicators = new Node[latents.size()][];
    for (int i = 0; i < latents.size(); i++) {
        indicators[i] = new Node[_clustering.get(i).size()];
        for (int j = 0; j < _clustering.get(i).size(); j++) {
            indicators[i][j] = _clustering.get(i).get(j);
        }
    }
    TetradMatrix cov = getCov(measuresCov, latents, indicators);
    CovarianceMatrix latentscov = new CovarianceMatrix(latents, cov, measuresCov.getSampleSize());
    this.latentsCov = latentscov;
    Graph graph;
    Cpc search = new Cpc(new IndTestTrekSep(measuresCov, alpha, clustering, latents));
    search.setKnowledge(knowledge);
    graph = search.search();
    // try {
    // Ges search = new Ges(latentscov);
    // search.setCorrErrorsAlpha(penaltyDiscount);
    // search.setKnowledge(knowledge);
    // graph = search.search();
    // } catch (Exception e) {
    // //            e.printStackTrace();
    // CPC search = new CPC(new IndTestFisherZ(latentscov, alpha));
    // search.setKnowledge(knowledge);
    // graph = search.search();
    // }
    this.structureGraph = new EdgeListGraph(graph);
    GraphUtils.fruchtermanReingoldLayout(this.structureGraph);
    return this.structureGraph;
}
Also used : ArrayList(java.util.ArrayList) TetradMatrix(edu.cmu.tetrad.util.TetradMatrix) CovarianceMatrix(edu.cmu.tetrad.data.CovarianceMatrix) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) ArrayList(java.util.ArrayList) List(java.util.List)

Example 8 with CovarianceMatrix

use of edu.cmu.tetrad.data.CovarianceMatrix in project tetrad by cmu-phil.

the class PerformanceTestsDan method testIdaOutputForDan.

private void testIdaOutputForDan() {
    int numRuns = 100;
    for (int run = 0; run < numRuns; run++) {
        double alphaGFci = 0.01;
        double alphaPc = 0.01;
        int penaltyDiscount = 1;
        int depth = 3;
        int maxPathLength = 3;
        final int numVars = 15;
        final double edgesPerNode = 1.0;
        final int numCases = 1000;
        // final int numLatents = RandomUtil.getInstance().nextInt(3) + 1;
        final int numLatents = 6;
        // writeToFile = false;
        PrintStream out1;
        PrintStream out2;
        PrintStream out3;
        PrintStream out4;
        PrintStream out5;
        PrintStream out6;
        PrintStream out7;
        PrintStream out8;
        PrintStream out9;
        PrintStream out10;
        PrintStream out11;
        PrintStream out12;
        File dir0 = new File("gfci.output");
        dir0.mkdirs();
        File dir = new File(dir0, "" + (run + 1));
        dir.mkdir();
        try {
            out1 = new PrintStream(new File(dir, "hyperparameters.txt"));
            out2 = new PrintStream(new File(dir, "variables.txt"));
            out3 = new PrintStream(new File(dir, "dag.long.txt"));
            out4 = new PrintStream(new File(dir, "dag.matrix.txt"));
            out5 = new PrintStream(new File(dir, "coef.matrix.txt"));
            out6 = new PrintStream(new File(dir, "pag.long.txt"));
            out7 = new PrintStream(new File(dir, "pag.matrix.txt"));
            out8 = new PrintStream(new File(dir, "pattern.long.txt"));
            out9 = new PrintStream(new File(dir, "pattern.matrix.txt"));
            out10 = new PrintStream(new File(dir, "data.txt"));
            out11 = new PrintStream(new File(dir, "true.pag.long.txt"));
            out12 = new PrintStream(new File(dir, "true.pag.matrix.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        out1.println("Num _vars = " + numVars);
        out1.println("Num edges = " + (int) (numVars * edgesPerNode));
        out1.println("Num cases = " + numCases);
        out1.println("Alpha for PC = " + alphaPc);
        out1.println("Alpha for FFCI = " + alphaGFci);
        out1.println("Penalty discount = " + penaltyDiscount);
        out1.println("Depth = " + depth);
        out1.println("Maximum reachable path length for dsep search and discriminating undirectedPaths = " + maxPathLength);
        List<Node> vars = new ArrayList<>();
        for (int i = 0; i < numVars; i++) vars.add(new GraphNode("X" + (i + 1)));
        // Graph dag = DataGraphUtils.randomDagQuick2(varsWithLatents, 0, (int) (varsWithLatents.size() * edgesPerNode));
        Graph dag = GraphUtils.randomGraph(vars, 0, (int) (vars.size() * edgesPerNode), 5, 5, 5, false);
        GraphUtils.fixLatents1(numLatents, dag);
        // List<Node> varsWithLatents = new ArrayList<Node>();
        // 
        // Graph dag = getLatentGraph(_vars, varsWithLatents, edgesPerNode, numLatents);
        out3.println(dag);
        printDanMatrix(vars, dag, out4);
        SemPm pm = new SemPm(dag);
        SemIm im = new SemIm(pm);
        NumberFormat nf = new DecimalFormat("0.0000");
        for (int i = 0; i < vars.size(); i++) {
            for (Node var : vars) {
                if (im.existsEdgeCoef(var, vars.get(i))) {
                    double coef = im.getEdgeCoef(var, vars.get(i));
                    out5.print(nf.format(coef) + "\t");
                } else {
                    out5.print(nf.format(0) + "\t");
                }
            }
            out5.println();
        }
        out5.println();
        String vars_temp = vars.toString();
        vars_temp = vars_temp.replace("[", "");
        vars_temp = vars_temp.replace("]", "");
        vars_temp = vars_temp.replace("X", "");
        out2.println(vars_temp);
        List<Node> _vars = new ArrayList<>();
        for (Node node : vars) {
            if (node.getNodeType() == NodeType.MEASURED) {
                _vars.add(node);
            }
        }
        String _vars_temp = _vars.toString();
        _vars_temp = _vars_temp.replace("[", "");
        _vars_temp = _vars_temp.replace("]", "");
        _vars_temp = _vars_temp.replace("X", "");
        out2.println(_vars_temp);
        DataSet fullData = im.simulateData(numCases, false);
        DataSet data = DataUtils.restrictToMeasured(fullData);
        ICovarianceMatrix cov = new CovarianceMatrix(data);
        final IndTestFisherZ independenceTestGFci = new IndTestFisherZ(cov, alphaGFci);
        final edu.cmu.tetrad.search.SemBicScore scoreGfci = new edu.cmu.tetrad.search.SemBicScore(cov);
        out6.println("GFCI.PAG_of_the_true_DAG");
        GFci gFci = new GFci(independenceTestGFci, scoreGfci);
        gFci.setVerbose(false);
        gFci.setMaxDegree(depth);
        gFci.setMaxPathLength(maxPathLength);
        // gFci.setPossibleDsepSearchDone(true);
        gFci.setCompleteRuleSetUsed(true);
        Graph pag = gFci.search();
        out6.println(pag);
        printDanMatrix(_vars, pag, out7);
        out8.println("Pattern_of_the_true_DAG OVER MEASURED VARIABLES");
        final IndTestFisherZ independencePc = new IndTestFisherZ(cov, alphaPc);
        Pc pc = new Pc(independencePc);
        pc.setVerbose(false);
        pc.setDepth(depth);
        Graph pattern = pc.search();
        out8.println(pattern);
        printDanMatrix(_vars, pattern, out9);
        out10.println(data);
        out11.println("True PAG_of_the_true_DAG");
        final Graph truePag = new DagToPag(dag).convert();
        out11.println(truePag);
        printDanMatrix(_vars, truePag, out12);
        out1.close();
        out2.close();
        out3.close();
        out4.close();
        out5.close();
        out6.close();
        out7.close();
        out8.close();
        out9.close();
        out10.close();
        out11.close();
        out12.close();
    }
}
Also used : DataSet(edu.cmu.tetrad.data.DataSet) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) DecimalFormat(java.text.DecimalFormat) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Pc(edu.cmu.tetrad.search.Pc) SemPm(edu.cmu.tetrad.sem.SemPm) PrintStream(java.io.PrintStream) IndTestFisherZ(edu.cmu.tetrad.search.IndTestFisherZ) GFci(edu.cmu.tetrad.search.GFci) CovarianceMatrix(edu.cmu.tetrad.data.CovarianceMatrix) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) DagToPag(edu.cmu.tetrad.search.DagToPag) File(java.io.File) SemIm(edu.cmu.tetrad.sem.SemIm) NumberFormat(java.text.NumberFormat)

Example 9 with CovarianceMatrix

use of edu.cmu.tetrad.data.CovarianceMatrix in project tetrad by cmu-phil.

the class FactorAnalysisAction method main.

public static void main(String[] args) {
    java.util.List<Node> nodes = new ArrayList<>();
    for (int i = 0; i < 9; i++) {
        nodes.add(new ContinuousVariable("X" + (i + 1)));
    }
    Graph graph = new Dag(GraphUtils.randomGraph(nodes, 0, 9, 30, 15, 15, false));
    SemPm pm = new SemPm(graph);
    SemIm im = new SemIm(pm);
    DataSet data = im.simulateData(500, false);
    ICovarianceMatrix cov = new CovarianceMatrix(data);
    FactorAnalysis factorAnalysis = new FactorAnalysis(cov);
    // factorAnalysis.centroidUnity();
    factorAnalysis.successiveResidual();
}
Also used : DataSet(edu.cmu.tetrad.data.DataSet) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) ArrayList(java.util.ArrayList) CovarianceMatrix(edu.cmu.tetrad.data.CovarianceMatrix) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) ContinuousVariable(edu.cmu.tetrad.data.ContinuousVariable) FactorAnalysis(edu.cmu.tetrad.search.FactorAnalysis) SemPm(edu.cmu.tetrad.sem.SemPm) SemIm(edu.cmu.tetrad.sem.SemIm)

Example 10 with CovarianceMatrix

use of edu.cmu.tetrad.data.CovarianceMatrix in project tetrad by cmu-phil.

the class SemEstimatorWrapper method setParams.

private boolean setParams(SemPmWrapper semPmWrapper, DataModelList dataModel) {
    for (DataModel model : dataModel) {
        if (model instanceof DataSet) {
            DataSet dataSet = (DataSet) model;
            SemPm semPm = semPmWrapper.getSemPm();
            this.semPm = semPm;
            SemEstimator estimator = new SemEstimator(dataSet, semPm, getOptimizer());
            estimator.setNumRestarts(getParams().getInt("numRestarts", 1));
            estimator.setScoreType((ScoreType) getParams().get("scoreType", ScoreType.Fgls));
            if (!degreesOfFreedomCheck(semPm)) {
                return true;
            }
            estimator.estimate();
            getMultipleResultList().add(estimator);
        } else if (model instanceof ICovarianceMatrix) {
            ICovarianceMatrix covMatrix = new CovarianceMatrix((ICovarianceMatrix) model);
            SemPm semPm = semPmWrapper.getSemPm();
            this.semPm = semPm;
            SemEstimator estimator = new SemEstimator(covMatrix, semPm, getOptimizer());
            estimator.setNumRestarts(getParams().getInt("numRestarts", 1));
            estimator.setScoreType((ScoreType) getParams().get("scoreType", ScoreType.Fgls));
            if (!degreesOfFreedomCheck(semPm)) {
                return true;
            }
            estimator.estimate();
            getMultipleResultList().add(estimator);
        } else {
            throw new IllegalArgumentException("Data must consist of continuous data sets or covariance matrices.");
        }
    }
    return false;
}
Also used : ColtDataSet(edu.cmu.tetrad.data.ColtDataSet) DataSet(edu.cmu.tetrad.data.DataSet) DataModel(edu.cmu.tetrad.data.DataModel) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) SemPm(edu.cmu.tetrad.sem.SemPm) SemEstimator(edu.cmu.tetrad.sem.SemEstimator) ScoreType(edu.cmu.tetrad.sem.ScoreType) ICovarianceMatrix(edu.cmu.tetrad.data.ICovarianceMatrix) CovarianceMatrix(edu.cmu.tetrad.data.CovarianceMatrix)

Aggregations

CovarianceMatrix (edu.cmu.tetrad.data.CovarianceMatrix)20 ICovarianceMatrix (edu.cmu.tetrad.data.ICovarianceMatrix)11 TetradMatrix (edu.cmu.tetrad.util.TetradMatrix)10 ArrayList (java.util.ArrayList)10 Test (org.junit.Test)7 DataSet (edu.cmu.tetrad.data.DataSet)6 ContinuousVariable (edu.cmu.tetrad.data.ContinuousVariable)5 DeltaTetradTest (edu.cmu.tetrad.search.DeltaTetradTest)4 Tetrad (edu.cmu.tetrad.search.Tetrad)4 SemPm (edu.cmu.tetrad.sem.SemPm)4 SemIm (edu.cmu.tetrad.sem.SemIm)3 DataModel (edu.cmu.tetrad.data.DataModel)2 Node (edu.cmu.tetrad.graph.Node)2 List (java.util.List)2 DoubleArrayList (cern.colt.list.DoubleArrayList)1 ColtDataSet (edu.cmu.tetrad.data.ColtDataSet)1 EdgeListGraph (edu.cmu.tetrad.graph.EdgeListGraph)1 Graph (edu.cmu.tetrad.graph.Graph)1 SemGraph (edu.cmu.tetrad.graph.SemGraph)1 Regression (edu.cmu.tetrad.regression.Regression)1