dsepAMTest function

Test for d-separation in a MAG

Test for d-separation in a MAG

This function tests for d-separation (also known as m-separation) of node x and node y given nodes S in a MAG. dsepAMTest() is written to be easily used in skeleton, fci, fciPlus.

dsepAMTest(x, y, S = NULL, suffStat)

Arguments

  • x: Column number of node x in the adjacency matrix

  • y: Column number of node y in the adjacency matrix

  • S: Vector of column numbers of nodes S in the adjacency matrix, may be empty

  • suffStat: a list with two elements,

    • amat: The Maximal Ancestral Graph encoded as adjacency matrix of type amatType
    • verbose: If true, more detailed output is provided.

Returns

Returns 1 if x and y are d-separated by S in the MAG encoded by amat, otherwise 0.

This is analogous to the p-value of an ideal (without sampling error) conditional independence test on any distribution that is faithful to the MAG.

Details

The function is a wrapper for dsepAM, which checks separation in the moralized graph as explained in Richardson and Spirtes (2002).

References

T.S. Richardson and P. Spirtes (2002). Ancestral graph Markov models. Annals of Statistics 30 962-1030.

See Also

dsepTest for a similar function for DAGs. gaussCItest, disCItest and binCItest for similar functions for a conditional independence test for gaussian, discrete and binary variables, respectively.

Author(s)

Markus Kalisch (kalisch@stat.math.ethz.ch ), Joris Mooij

Examples

# Y-structure MAG # Encode as adjacency matrix p <- 4 # total number of variables V <- c("X1","X2","X3","X4") # variable labels # 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,0,2,0), c(0,0,2,0), c(3,3,0,2), c(0,0,3,0)) rownames(amat)<-V colnames(amat)<-V suffStat<-list(g=amat,verbose=FALSE) ## d-separated cat('X1 d-separated from X2? ', dsepAMTest(1,2,S=NULL,suffStat),'\n') ## not d-separated given node 3 cat('X1 d-separated from X2 given X4? ', dsepAMTest(1,2,S=4,suffStat),'\n') ## not d-separated by node 3 and 4 cat('X1 d-separated from X2 given X3 and X4? ', dsepAMTest(1,2,S=c(3,4), suffStat),'\n') # Derive PAG that represents the Markov equivalence class of the MAG with the FCI algorithm # Make use of d-separation oracle as "independence test" indepTest <- dsepAMTest fci.pag <- fci(suffStat,indepTest,alpha = 0.5,labels = V,verbose=FALSE) cat('True MAG:\n') print(amat) cat('PAG output by FCI:\n') print(fci.pag@amat)