Estimate a PAG with the FCI+ Algorithm
Estimate a Partial Ancestral Graph (PAG) from observational data, using the FCI+ (Fast Causal Inference) algorithm, or from a combination of data from different (e.g., observational and interventional) contexts, using the FCI+-JCI (Joint Causal Inference) extension.
fciPlus(suffStat, indepTest, alpha, labels, p, verbose=TRUE, selectionBias = TRUE, jci = c("0","1","12","123"), contextVars = NULL)
suffStat |
sufficient statistics: A named |
indepTest |
a |
alpha |
numeric significance level (in (0, 1)) for the individual conditional independence tests. |
labels |
(optional) |
p |
(optional) number of variables (or nodes). May be specified
if |
selectionBias |
If |
jci |
String specifying the JCI assumptions that are used. It can be one of:
For more information, see Mooij et al. (2020). |
contextVars |
Subset of variable indices {1,...,p} that will be treated as context variables in the JCI extension of FCI+. |
verbose |
logical indicating if progress of the algorithm should be printed. The default is true, which used to be hard coded previously. |
A (possibly much faster) variation of FCI (Fast Causal Inference).
For details, please see the references, and also fci
.
Emilija Perkovic, Markus Kalisch (kalisch@stat.math.ethz.ch) and Joris Mooij.
T. Claassen, J. Mooij, and T. Heskes (2013). Learning Sparse Causal Models is not NP-hard. In UAI 2013, Proceedings of the 29th Conference on Uncertainty in Artificial Intelligence
fci
for estimating a PAG using the FCI algorithm.
################################################## ## Example without latent variables ################################################## ## generate a random DAG ( p = 7 ) set.seed(42) p <- 7 myDAG <- randomDAG(p, prob = 0.4) ## find PAG using the FCI+ algorithm on "Oracle" suffStat <- list(C = cov2cor(trueCov(myDAG)), n = 10^9) m.fci <- fciPlus(suffStat, indepTest=gaussCItest, alpha = 0.9999, p=p) summary(m.fci) ## require("Rgraphviz") sfsmisc::mult.fig(2, main="True DAG // fciPlus(.) \"oracle\" estimate") plot(myDAG) plot(m.fci) ################################################## ## Joint Causal Inference Example ## Mooij et al. (2020), Fig. 43(a), p. 97 ################################################## # Encode MAG as adjacency matrix p <- 8 # total number of variables V <- c("Ca","Cb","Cc","X0","X1","X2","X3","X4") # 3 context variables, 5 system variables # amat[i,j] = 0 iff no edge btw i,j # amat[i,j] = 1 iff i *-o j # amat[i,j] = 2 iff i *-> j # amat[i,j] = 3 iff i *-- j amat <- rbind(c(0,2,2,2,0,0,0,0), c(2,0,2,0,2,0,0,0), c(2,2,0,0,2,2,0,0), c(3,0,0,0,0,0,2,0), c(0,3,3,0,0,3,0,2), c(0,0,3,0,2,0,0,0), c(0,0,0,3,0,0,0,2), c(0,0,0,0,2,0,3,0)) rownames(amat)<-V colnames(amat)<-V # Make use of d-separation oracle as "independence test" indepTest <- dsepAMTest suffStat<-list(g=amat,verbose=FALSE) # Derive PAG that represents the Markov equivalence class of the MAG with the FCI+ algorithm # (assuming no selection bias) # fci.pag <- fciPlus(suffStat, indepTest, alpha = 0.5, labels = V, # selectionBias=FALSE,verbose=TRUE) # Derive PAG with FCI+-JCI, the Joint Causal Inference extension of FCI # (assuming no selection bias, and all three JCI assumptions) # fcijci.pag <- fciPlus(suffStat, indepTest, alpha = 0.5, labels = V, # selectionBias=FALSE, contextVars=c(1,2,3), jci="123", verbose=TRUE) # Report results # cat('True MAG:\n') # print(amat) # cat('PAG output by FCI+:\n') # print(fci.pag@amat) # cat('PAG output by FCI+-JCI:\n') # print(fcijci.pag@amat) # Read off causal features from the FCI PAG #cat('Identified absence (-1) and presence (+1) of ancestral causal relations from FCI+ PAG:\n') #print(pag2anc(fci.pag@amat)) #cat('Identified absence (-1) and presence (+1) of direct causal relations from FCI+ PAG:\n') #print(pag2edge(fci.pag@amat)) #cat('Identified absence (-1) and presence (+1) of pairwise latent confounding from FCI+ PAG:\n') #print(pag2conf(fci.pag@amat)) # Read off causal features from the FCI-JCI PAG #cat('Identified absence (-1) and presence (+1) of ancestral causal relations from FCI+-JCI PAG:\n') #print(pag2anc(fcijci.pag@amat)) #cat('Identified absence (-1) and presence (+1) of direct causal relations from FCI+-JCI PAG:\n') #print(pag2edge(fcijci.pag@amat)) #cat('Ident. absence (-1) and presence (+1) of pairwise latent confounding from FCI+-JCI PAG:\n') #print(pag2conf(fcijci.pag@amat))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.