Nothing
library(pcalg)
## Create a weighted DAG --- Example from ../man/jointIda.Rd (keep in sync !)
p <- 6
V <- as.character(1:p)
edL <- list(
"1" = list(edges=c(3,4), weights=c(1.1,0.3)),
"2" = list(edges=c(6), weights=c(0.4)),
"3" = list(edges=c(2,4,6),weights=c(0.6,0.8,0.9)),
"4" = list(edges=c(2),weights=c(0.5)),
"5" = list(edges=c(1,4),weights=c(0.2,0.7)),
"6" = NULL)
myDAG <- new("graphNEL", nodes=V, edgeL=edL, edgemode="directed") ## true DAG
myCPDAG <- dag2cpdag(myDAG) ## true CPDAG
covTrue <- trueCov(myDAG) ## true covariance matrix
n <- 1000
## simulate Gaussian data from the true DAG
dat <- if (require("mvtnorm")) {
set.seed(123)
rmvnorm(n, mean=rep(0,p), sigma=covTrue)
} else readRDS(system.file(package="pcalg", "external", "N_6_1000.rds"))
## 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")
## Suppose that we know the true CPDAG and covariance matrix
m1 <- jointIda(x.pos=c(1,2), y.pos=6, covTrue, graphEst=myCPDAG, technique="RRC")
m2 <- jointIda(x.pos=c(1,2), y.pos=6, covTrue, graphEst=myCPDAG, technique="MCD") ### MCD needed a bugfix
##sorting for comparison
order.m1 <- m1[,order(m1[1,])]
order.m2 <- m2[,order(m2[1,])]
tempres1 <- all( all.equal(order.m1, order.m2) )
if (!tempres1) stop("There is a mismatch with jointIda RRC and MCD!")
## Instead of knowing the true CPDAG, it is enough to know only
## all jointly valid parent sets of the intervention variables ## to use RRC or MCD
ajv.pasets <- list(list(5, c(3,4)),
list(integer(0), c(3,4)),
list(3, c(3,4)))
m3 <- jointIda(x.pos=c(1,2), y.pos=6, covTrue, all.pasets=ajv.pasets, technique="RRC")
m4 <- jointIda(x.pos=c(1,2), y.pos=6, covTrue, all.pasets=ajv.pasets, technique="MCD")
##sorting for comparison
order.m3 <- m3[,order(m3[1,])]
order.m4 <- m4[,order(m4[1,])]
tempres2 <- all( all.equal(order.m3, order.m4) )
if (!tempres2) stop("There is a mismatch with jointIda RRC and MCD!")
## From the true DAG, we can compute the true total joint effects
## using RRC or MCD
m5 <- jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myDAG,technique="RRC")
m6 <- jointIda(x.pos=c(1,2),y.pos=6,covTrue,graphEst=myDAG,technique="MCD")
##sorting for comparison
order.m5 <- m5[,order(m5[1,])]
order.m6 <- m6[,order(m6[1,])]
tempres3 <- all( all.equal(order.m5, order.m6))
if (!tempres3) stop("There is a mismatch with jointIda RRC and MCD!")
################################################################
mTrue <- rbind(c(0,0.99,0.99), c(0.4,0.4,0.4))
Rnd <- 7
res1 <- (all(round(order.m1,Rnd) == mTrue) &
all(round(order.m2,Rnd) == mTrue) &
all(round(order.m3,Rnd) == mTrue) &
all(round(order.m4,Rnd) == mTrue) )
if(!res1) stop("Test in jointIda: True causal effects were not recovered!")
#############################################################################
## 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
v1 <- sort(round(jointIda(x.pos=1,y.pos=6,covTrue,graphEst=myCPDAG,
technique="RRC"), Rnd))
v2 <- sort(round(jointIda(x.pos=1,y.pos=6,covTrue,graphEst=myCPDAG,
technique="MCD"), Rnd)) ###EMA MCD problem as above
v3 <- sort(round(ida(x.pos=1,y.pos=6,covTrue,graphEst=myCPDAG,
method="global"), Rnd)) ###EMA there is an issue in v3 with lm.cov ??? i get the error:
res2 <- (all(v1==v2) & all(v2==v3) & all(v3==v1))
if(!res2) stop("Test in jointIda: ida() and jointIda() don't produce the same result!")
#########################################
## test extract parent set
#########################################
# library(digest)
#
#
# ## compare outputs
# jidaCompare <- function(a,b) {
# digest(a) ## has "integer (0)"
# digest(b) ## has "named integer(0)"
# for (i in 1:length(b)) {
# for (j in 1:length(b[[i]])) {
# if (length(b[[i]][[j]]) == 0) b[[i]][[j]] <- integer(0)
# }
# }
#
# for (i in 1:length(a)) {
# for (j in 1:length(a[[i]])) {
# if (length(a[[i]][[j]]) == 0) a[[i]][[j]] <- integer(0)
# }
# }
#
# all(unique(sort(sapply(a,digest))) == unique(sort(sapply(b,digest))))
# }
#
#
# ##testing
# ##b[[5]]
# ##a[[14]]
#
# ##c <- a[[14]]
# ##c2 <- b[[5]]
#
# ###testing
# ## possible_p <- c(seq(20,100,by=10))
# possible_p <- c(seq(20,50,by=5))
#
# ## possible_neighb_size <- c(3:15)
# ## possible_neighb_size <- c(3:10)
# possible_neighb_size <- c(3:8)
#
# ## or choose prob and generate neighborhood size
# possible_prob <- seq(0.1,0.6,by=0.1)
#
# ##for function msep
#
# ##for joint IDA MCD:
# ##if you want to run locally set nc to 1!!
# nc <- 1
# registerDoParallel(nc) ## Request nc processors in parallel
# num_setings <-20
# num_rep <- 5
#
# ##amount of bg knowledge in percent
# p_bg <- seq(0,1,by=0.1)
#
# ## start.time <- Sys.time()
#
# seed1 <- 1
# resFin <- foreach(r=seed1: num_setings, .packages = 'pcalg') %dopar%{
# set.seed(r)
# ##Then we can choose one setting:
#
# p <- sample(possible_p,1)
# neigh <- sample(possible_neighb_size,1)
# prob <- round(neigh/(p-1),3)
# res <- rep(FALSE, num_rep)
#
# cat("r=",r,", p=",p,", nb=",neigh,"\n")
#
# ## then for every setting selected we can generate i.e. 20 graph
# for (d in 1: num_rep){
# ##i left the seed inside for now
# ## i am not sure which seed option makes it easier for us
# ## feel free to move this around
# #seed <- sample(possible_seed,1)
# #set.seed(seed)
#
# ##get graph
# g <- pcalg:::randomDAG(p, prob) ## true DAG
# cpdag <- dag2cpdag(g) ## true CPDAG
#
# ## get adjacency matrix
# cpdag.amat <- t(as(cpdag,"matrix"))
# dag.amat <- t(as(g,"matrix"))
# dag.amat[dag.amat != 0] <- 1
#
# #############################
# ## ##
# ## NEW CODE STARTS HERE!!! ##
# ## ##
# #############################
#
# amat.cpdag <- cpdag.amat
# #plot(cpdag)
# x <- sample(p,3)
#
# a <- pcalg:::extract.parent.sets(x,t(amat.cpdag)) ## extract valid joint parent sets using pcalg
# ## b <- extract.parent.sets(x,amat.cpdag) ## and using my own function
# b <- b.extract.parent.sets(x,amat.cpdag) ## and using my own function
# ## cat("l.a=",length(a), " - ","l.b=",length(b),"\n")
# ## cat("jidaCompare:",jidaCompare(a,b),"\n")
# res[d] <- jidaCompare(a,b)
# ##cat(res[d],"\n")
# }
# all(res)
# }
#
#
# stopifnot(all(unlist(resFin)))
#
# print(resFin)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.