Nothing
library(pcalg)
## source("/u/kalischm/research/packages/LINGAM/R/lingamFuns.R")
##--> showProc.time(), assertError(), relErrV(), ...
R.home(); sessionInfo() # helping package maintainers to debug ...
.libPaths()
packageDescription("pcalg")
packageDescription("Matrix")
cat("doExtras:", (doExtras <- pcalg:::doExtras()), "\n")
##################################################
## Exp 1
##################################################
set.seed(123)
n <- 500
eps1 <- sign(rnorm(n)) * sqrt(abs(rnorm(n)))
eps2 <- runif(n) - 0.5 # ~ U[-1/2, 1/2]
X <- cbind(A = eps1 + 0.9*eps2,
B = eps2)
## x1 <- x2
## adjacency matrix:
## 0 0
## 1 0
(trueDAG <- rbind(c(0,0),
c(1,0)))
estDAG <- LINGAM(X, verbose = TRUE)
stopifnot(identical(estDAG, LINGAM(X)),
as.integer(estDAG$ Adj) == trueDAG,
all.equal (estDAG$ B, cbind(0, c(0.878188262685122, 0))))
if(doExtras) {
## using pcalg
n <- nrow(X)
V <- LETTERS[1:ncol(X)] # labels aka node names
## estimate CPDAG
pc.fit <- pc(suffStat = list(C = cor(X), n = n),
indepTest = gaussCItest, ## indep.test: partial correlations
alpha = 0.01, labels = colnames(X))
if (require(Rgraphviz)) {
plot(pc.fit, main = "Estimated CPDAG")
}
}
##################################################
## Exp 2
##################################################
set.seed(123)
n <- 500
eps1 <- sign(rnorm(n)) * sqrt(abs(rnorm(n)))
eps2 <- runif(n) - 0.5
eps3 <- sign(rnorm(n)) * abs(rnorm(n))^(1/3)
eps4 <- rnorm(n)^2
x1 <- eps1 + 0.9*eps2
x2 <- eps2
x3 <- 0.8*eps2 + eps3
x4 <- -0.9*x3 - x1 + eps4
X <- cbind(U = x1, V = x2, W = x3, Y = x4)
trueDAG <- cbind(c(0,1,0,0),c(0,0,0,0),c(0,1,0,0),c(1,0,1,0))
## x4 <- x3 <- x2 -> x1 -> x4
## adjacency matrix:
## 0 0 0 1
## 1 0 1 0
## 0 0 0 1
## 0 0 0 0
estDAG <- LINGAM(X, verbose = TRUE)
B.est <- rbind(c(0, 0.986119553, 0, 0),
c(0, 0, 0, 0),
c(0, 0.89198226, 0, 0),
c(-0.987301824, 0, -0.890961952, 0))
stopifnot(as.integer(estDAG$Adj) == trueDAG,
all.equal(estDAG$B, B.est, tol=1e-9))
if(doExtras) {
## using pcalg
n <- nrow(X)
V <- colnames(X) # labels aka node names
## estimate CPDAG
pc.fit <- pc(suffStat = list(C = cor(X), n = n),
indepTest = gaussCItest, ## indep.test: partial correlations
alpha=0.01, labels = V, verbose = FALSE)
if (require(Rgraphviz)) {
plot(pc.fit, main = "Estimated CPDAG")
}
}
## if(!doExtras && !interactive()) quit("no")
### More tests for higher dimensions
### p = 8 -------- Example 3 -----------
set.seed(127)
n <- 2000
x1 <- eps1 <- sign(rnorm(n)) * sqrt(abs(rnorm(n)))
x2 <- eps2 <- runif(n) - 0.5
x3 <- eps3 <- sign(rnorm(n)) * abs(rnorm(n))^(1/3)
x4 <- eps4 <- rnorm(n)^2
Z <- rnorm(n); eps5 <- sign(Z) * sqrt(abs(Z))
Z <- rnorm(n); eps6 <- sign(Z) * sqrt(abs(Z))
Z <- rnorm(n); eps7 <- sign(Z) * sqrt(abs(Z))
Z <- rnorm(n); eps8 <- sign(Z) * sqrt(abs(Z))
x5 <- 7/8*x1 - 3/4*x2 + 3/4*x3 + eps5
x6 <- 0.8*x4 + eps6
x7 <- 3/4*x5 - 7/8*x6 + eps7
x8 <- .9*x7 + eps8
X <- cbind(x1,x2,x3,x4,x5,x6,x7,x8, deparse.level = 2)
## (x1, x2, x3) -> x5 -> x7 <- x6 <- x4; x7 -> x8
## adjacency matrix:
## 1 2 3 4 5 6 7 8
## x1 . . . . 1 . . .
## x2 . . . . 1 . . .
## x3 . . . . 1 . . .
## x4 . . . . . 1 . .
## x5 . . . . . . 1 .
## x6 . . . . . . 1 .
## x7 . . . . . . . 1
## x8 . . . . . . . .
## true DAG :
. <- 0
trDAG3 <- rbind(
c(., ., ., ., 1, ., ., .),
c(., ., ., ., 1, ., ., .),
c(., ., ., ., 1, ., ., .),
c(., ., ., ., ., 1, ., .),
c(., ., ., ., ., ., 1, .),
c(., ., ., ., ., ., 1, .),
c(., ., ., ., ., ., ., 1),
c(., ., ., ., ., ., ., .))
estB.3 <- rbind(
c(., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., .),
c(.831899433, -.737954104, 0.725137273, ., ., ., ., .),
c(., ., ., 0.788185348, ., ., ., .),
c(., ., ., ., 0.774490692, -0.886143314, ., .),
c(., ., ., ., ., ., 0.900617843, .))
eDAG3 <- LINGAM(X, verbose = 2)
stopifnot(trDAG3 == eDAG3$Adj,
with(eDAG3, all(t(B != 0) == Adj)),
all.equal(eDAG3$B, estB.3, tol=1e-9))
### p = 10 -------- Example 4 -----------
### using same x1..,x4, and, eps5 .. eps8 as in Ex. 3
Z <- rnorm(n); eps9 <- sign(Z) * abs(Z)^(1/3)
Z <- rnorm(n); eps10 <- sign(Z) * abs(Z)^0.25
x5 <- 7/8*x1 - 3/4*x2 + eps5
x6 <- 0.8*x2 - 7/8*x3 + eps6
x7 <- -7/8*x4 + eps7
x8 <- 0.9*x2 - 0.8*x5 + eps8
x9 <- -3/4*x6 + 7/8*x7 + eps9
x10 <- 3/4*x6 + 0.5*x8 +0.9*x9 + eps10
X <- cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10, deparse.level = 2)
## true DAG :
. <- 0
trDAG4 <- rbind(
# 1 2 3 4 5 6 7 8 9 0
c(., ., ., ., 1, ., ., ., ., .), # 1
c(., ., ., ., 1, 1, ., 1, ., .), # 2
c(., ., ., ., ., 1, ., ., ., .), # 3
c(., ., ., ., ., ., 1, ., ., .), # 4
c(., ., ., ., ., ., ., 1, ., .), # 5
c(., ., ., ., ., ., ., ., 1, 1), # 6
c(., ., ., ., ., ., ., ., 1, .), # 7
c(., ., ., ., ., ., ., ., ., 1), # 8
c(., ., ., ., ., ., ., ., ., 1), # 9
c(., ., ., ., ., ., ., ., ., .)) # 10
estB.4 <- rbind(
c(., ., ., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., ., ., .),
c(., ., ., ., ., ., ., ., ., .),
c(0.831899433, -0.737954104, ., ., ., ., ., ., ., .),
c(., 0.687919607, -0.863361084, ., ., ., ., ., ., .),
c(., ., ., -0.878305407, ., ., ., ., ., .),
c(., 0.864092647, ., ., -0.77902333, ., ., ., ., .),
c(., ., ., ., ., -0.780116888, 0.929828083, ., ., .),
c(., ., ., ., ., 0.72436897, ., 0.502210828, 0.913644804, .))
eDAG4 <- LINGAM(X, verbose = TRUE)
stopifnot(trDAG4 == eDAG4$Adj,
with(eDAG4, all(t(B != 0) == Adj)),
all.equal(eDAG4$B, estB.4, tol=1e-9))
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.