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