java.lang.Object
edu.cmu.tetrad.search.work_in_progress.FasLofs
All Implemented Interfaces:
IGraphSearch

public final class FasLofs extends Object implements IGraphSearch

Runs Fast Adjacency Search (FAS) and then orients each edge using the robust skew orientation algorithm. Checks are done for adding two-cycles. The two-cycle checks do not require non-Gaussianity. The robust skew orientation of edges left or right does.

Moving this to the work_in_progress package because the functionality can be generalized. Instead of hard-coding FAS, an arbitrary algorithm can be used to obtain adjacencies. Instead of hard-coding robust skew, and arbitrary algorithm can be used to to pairwise orientation. Instead of orienting all edges, an option can be given to just orient the edges that are unoriented in the input graph (see, e.g., PC LiNGAM). This was an early attempt at this. For BOSS-LiNGAM, see this paper:

Hoyer, P. O., Hyvarinen, A., Scheines, R., Spirtes, P. L., Ramsey, J., Lacerda, G., & Shimizu, S. (2012). Causal discovery of linear acyclic models with arbitrary distributions. arXiv preprint arXiv:1206.3260.

Version:
$Id: $Id
Author:
josephramsey
See Also:
  • Constructor Details

    • FasLofs

      public FasLofs(DataSet dataSet, Lofs.Rule rule)

      Constructor for FasLofs.

      Parameters:
      dataSet - These datasets to analyze.
      rule - a Lofs.Rule object
  • Method Details

    • search

      public Graph search()
      Runs the search on the concatenated data, returning a graph, possibly cyclic, possibly with two-cycles. Runs the fast adjacency search (FAS, Spirtes et al., 2000) follows by a modification of the robust skew rule (Pairwise Likelihood Ratios for Estimation of Non-Gaussian Structural Equation Models, Smith and Hyvarinen), together with some heuristics for orienting two-cycles.
      Specified by:
      search in interface IGraphSearch
      Returns:
      the graph. Some of the edges may be undirected (though it shouldn't be many in most cases) and some of the adjacencies may be two-cycles.
    • getDepth

      public int getDepth()

      Getter for the field depth.

      Returns:
      The depth of search for the Fast Adjacency Search (FAS).
    • setDepth

      public void setDepth(int depth)

      Setter for the field depth.

      Parameters:
      depth - The depth of search for the Fast Adjacency Search (S). The default is -1. unlimited. Making this too high may results in statistical errors.
    • getElapsedTime

      public long getElapsedTime()

      getElapsedTime.

      Returns:
      The elapsed time in milliseconds.
    • getPenaltyDiscount

      public double getPenaltyDiscount()

      Getter for the field penaltyDiscount.

      Returns:
      Returns the penalty discount used for the adjacency search. The default is 1, though a higher value is recommended, say, 2, 3, or 4.
    • setPenaltyDiscount

      public void setPenaltyDiscount(double penaltyDiscount)

      Setter for the field penaltyDiscount.

      Parameters:
      penaltyDiscount - Sets the penalty discount used for the adjacency search. The default is 1, though a higher value is recommended, say, 2, 3, or 4.
    • getKnowledge

      public Knowledge getKnowledge()

      Getter for the field knowledge.

      Returns:
      the current knowledge.
    • setKnowledge

      public void setKnowledge(Knowledge knowledge)

      Setter for the field knowledge.

      Parameters:
      knowledge - Knowledge of forbidden and required edges.