## Create a weighted DAG
p <- 6
V<-as.character(1:p)
edL <- vector("list",length=6)
names(edL)<-V
edL[[1]] <- list(edges=c(3,4),weights=c(1.1,0.3))
edL[[2]] <- list(edges=c(6),weights=c(0.4))
edL[[3]] <- list(edges=c(2,4,6),weights=c(0.6,0.8,0.9))
edL[[4]] <- list(edges=c(2),weights=c(0.5))
edL[[5]] <- list(edges=c(1,4),weights=c(0.2,0.7))
myDAG <- new("graphNEL",nodes=V,edgeL=edL,edgemode="directed") ## true DAG
myCPDAG <- dag2cpdag(myDAG) ## true CPDAG
covTrue <- trueCov(myDAG) ## true covariance matrix
## simulate Gaussian data from the true DAG
set.seed(123)
if (require(mvtnorm)) {
n <- 1000
dat <- rmvnorm(n,mean=rep(0,p),sigma=covTrue)
}
## estimate CPDAG -- see help(pc)
suffStat <- list(C = cor(dat), n = n)
pc.fit <- pc(suffStat, indepTest = gaussCItest, p = p, alpha = 0.01 ,u2pd="relaxed")
if (require(Rgraphviz)) {
## plot the true and estimated graphs
par(mfrow = c(1,2))
plot(myDAG, main = "True DAG")
plot(pc.fit, main = "Estimated CPDAG")
}
## Suppose that we know the true CPDAG and covariance matrix
jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myCPDAG,technique="RRC")
jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myCPDAG,technique="MCD")
## Instead of knowing the true CPDAG, it is enough to know only
## the jointly valid parent sets of the intervention variables
## to use RRC or MCD
all.jointly.valid.pasets <- list(list(5,c(3,4)),list(integer(0),c(3,4)),list(3,c(3,4)))
jointIda(x.pos=c(1,2),y.pos=6,covTrue,all.pasets=all.jointly.valid.pasets,technique="RRC")
jointIda(x.pos=c(1,2),y.pos=6,covTrue,all.pasets=all.jointly.valid.pasets,technique="MCD")
## From the true DAG, we can compute the true total joint effects
## using RRC or MCD
jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myDAG,technique="RRC")
cat("Dim covTrue: ", dim(covTrue),"")
jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myDAG,technique="MCD")
## When working with data, we have to use the estimated CPDAG
## and the sample covariance matrix
jointIda(x.pos=c(1,2),y.pos=6,cov(dat),graphEst=pc.fit@graph,technique="RRC")
jointIda(x.pos=c(1,2),y.pos=6,cov(dat),graphEst=pc.fit@graph,technique="MCD")
## RRC and MCD can produce different results when working with data
## jointIda also works when x.pos has length 1 and in the following example
## it gives the same result as ida() (see Note)
##
## When the CPDAG is known
jointIda(x.pos=1,y.pos=6,covTrue,graphEst=myCPDAG,technique="RRC")
ida(x.pos=1,y.pos=6,covTrue,graphEst=myCPDAG,method="global")
##
## When the DAG is known
jointIda(x.pos=1,y.pos=6,covTrue,graphEst=myDAG,technique="RRC")
ida(x.pos=1,y.pos=6,covTrue,graphEst=myDAG,method="global")
## Note that, causalEffect(myDAG,y=6,x=1) does not give the correct value in this case,
## since this function requires that the variables are in a causal order.
Run the code above in your browser using DataLab