Class IcaLingD
Lacerda, G., Spirtes, P. L., Ramsey, J., & Hoyer, P. O. (2012). Discovering cyclic causal models by independent components analysis. arXiv preprint arXiv:1206.3273.
ICA-LING-D is a method for estimating a possible cyclic linear models graph from a dataset. It is based on the assumption that the data are generated by a linear model with non-Gaussian noise. The method is based on the following assumptions: (1) The data are generated by a linear model with non-Gaussian noise. (2) The noise is independent across variables. (3) The noises for all but possibly one variable are non-Gaussian. (4) There is no unobserved confounding.
Under these assumptions, the method estimates matrices W such that WX = e, where X is the data matrix, e is a matrix of noise, and W is a matrix of coefficients. The matrix W is then used to estimate a matrix B Hat, where B Hat is the matrix of coefficients in the linear model that generated the data. The graph is then estimated by finding edges in B Hat.
We use the N Rooks algorithm to find alternative diagonals for permutations of the W matrix. The parameter that N Rooks requires is a threshold for entries in W to be sent to zero; the implied permutations is the permutations that permutes rows so that these combinations lie along their respective diagonals in W, which are then scaled, and the separate satisfactory B Hat matrices reported. These B Hat matrices are then thresholded as well, using a separate threshold for B matrices. Unlike ICA-LiNGAM, an acyclic model is not assumed.
If the verbose flag is set to true ('Yes'), all stable and unstable models are printed to the console with both their B Hat matrices and graphs. If a stable model is found, it is returned; otherwise, an empty graph is returned.
This class does not use knowledge of forbidden and required edges.
- Version:
- $Id: $Id
- Author:
- peterspirtes, gustavolacerda, patrickhoyer, josephramsey
- See Also:
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic MatrixEstimates the W matrix using FastICA.static MatrixestimateW(DataSet data, int fastIcaMaxIter, double fastIcaTolerance, double fastIcaA, boolean verbose) Estimates the W matrix using FastICA.Fits a LiNG-D model to the given dataset using a default method for estimating W.static MatrixReturns the BHat matrix, permuted to the variable order of the original data and scaled so that the diagonal consists only of 1's.Performs the LiNG-D algorithm given a W matrix, which needs to be discovered elsewhere.static booleanWhether the BHat matrix represents a stable model.static @NotNull GraphReturns a graph given a coefficient matrix and a list of variables.static PermutationMatrixPairFinds a column permutation of the W matrix that maximizes the sum of 1 / |Wii| for diagonal elements Wii in W.static MatrixScales the given matrix M by diving each entry (i, j) by M(j, j)voidsetBThreshold(double bThreshold) Sets the threshold value for the B matrix.voidsetWThreshold(double wThreshold) Sets the threshold value for the W matrix.static MatrixThresholds the given matrix, sending any small entries in absolute value to zero.
- 
Constructor Details- 
IcaLingDpublic IcaLingD()Constructor.
 
- 
- 
Method Details- 
estimateWpublic static Matrix estimateW(DataSet data, int fastIcaMaxIter, double fastIcaTolerance, double fastIcaA) Estimates the W matrix using FastICA. Assumes the "parallel" option, using the "exp" function.- Parameters:
- data- The dataset to estimate W for.
- fastIcaMaxIter- Maximum number of iterations of ICA.
- fastIcaTolerance- Tolerance for ICA.
- fastIcaA- Alpha for ICA.
- Returns:
- The estimated W matrix.
 
- 
estimateWpublic static Matrix estimateW(DataSet data, int fastIcaMaxIter, double fastIcaTolerance, double fastIcaA, boolean verbose) Estimates the W matrix using FastICA. Assumes the "parallel" option, using the "exp" function.- Parameters:
- data- The dataset to estimate W for.
- fastIcaMaxIter- Maximum number of iterations of ICA.
- fastIcaTolerance- Tolerance for ICA.
- fastIcaA- Alpha for ICA.
- verbose- Whether to print the Anderson-Darling test results.
- Returns:
- The estimated W matrix.
 
- 
makeGraphReturns a graph given a coefficient matrix and a list of variables. It is assumed that any non-zero entry in B corresponds to a directed edges, so that Bij != 0 implies that j->i in the graph.- Parameters:
- B- The coefficient matrix.
- variables- The list of variables.
- Returns:
- The built graph.
 
- 
maximizeDiagonalFinds a column permutation of the W matrix that maximizes the sum of 1 / |Wii| for diagonal elements Wii in W.- Parameters:
- W- The W matrix, WX = e.
- Returns:
- The model with the strongest diagonal, as a permutation matrix pair.
- See Also:
 
- 
isStableWhether the BHat matrix represents a stable model. The eigenvalues are checked to make sure they are all less than 1 in modulus.- Parameters:
- bHat- The bHat matrix.
- Returns:
- True iff the model is stable.
 
- 
scaleScales the given matrix M by diving each entry (i, j) by M(j, j)- Parameters:
- M- The matrix to scale.
- Returns:
- The scaled matrix.
 
- 
thresholdThresholds the given matrix, sending any small entries in absolute value to zero.- Parameters:
- M- The matrix to threshold.
- threshold- The value such that M(i, j) is set to zero if |M(i, j)| < threshold. Should be non-negative.
- Returns:
- The thresholded matrix.
 
- 
getScaledBHatReturns the BHat matrix, permuted to the variable order of the original data and scaled so that the diagonal consists only of 1's.- Parameters:
- pair- The (column permutation, thresholded, column permuted W matrix) pair.
- Returns:
- The estimated B Hat matrix for this pair.
- See Also:
 
- 
fitFits a LiNG-D model to the given dataset using a default method for estimating W.- Parameters:
- D- A continuous dataset.
- Returns:
- The BHat matrix, where B[i][j] gives the coefficient of j->i if nonzero.
 
- 
getScaledBHatsPerforms the LiNG-D algorithm given a W matrix, which needs to be discovered elsewhere. The 'local algorithm' is assumed--in fact, the W matrix is simply thresholded without bootstrapping.- Parameters:
- W- The W matrix to be used.
- Returns:
- A list of estimated B Hat matrices generated by LiNG-D.
 
- 
setBThresholdpublic void setBThreshold(double bThreshold) Sets the threshold value for the B matrix.- Parameters:
- bThreshold- The threshold value for the bThreshold field. Must be non-negative.
- Throws:
- IllegalArgumentException- If bThreshold is a negative number.
 
- 
setWThresholdpublic void setWThreshold(double wThreshold) Sets the threshold value for the W matrix.- Parameters:
- wThreshold- The threshold value for the wThreshold field. Must be non-negative.
- Throws:
- IllegalArgumentException- If wThreshold is a negative number.
 
 
-