第3章

# カーネル行列の構築関数
K <- function(k, X) {
  n <- if (is.vector(X)) length(X) else nrow(X)
  K <- matrix(0, n, n)
  for (i in 1:n) {
    for (j in 1:n) {
      K[i, j] <- if (is.vector(X)) k(X[i], X[j]) else k(X[i, ], X[j, ])
    }
  }
  return(K)
}

# カーネル行列の中心化関数
tilde <- function(K) {
  # K: 中心化したいカーネル行列(n × n)
  n <- nrow(K)  # 行列の行数(サンプルサイズ)
  H <- diag(n) - matrix(1/n, n, n)  # 中心化行列
  return(H %*% K %*% H)  # 中心化されたカーネル行列を返す
}

# HSIC(Hilbert-Schmidt Independence Criterion)の値を計算する関数
HSIC.1 <- function(K.x, K.y) {

  # K.x: 第1変数のカーネル行列
  # K.y: 第2変数のカーネル行列

  n <- ncol(K.x)  # サンプル数 n を取得

  # tilde(K.x) と tilde(K.y) の中心化カーネル行列を計算
  K.x_tilde <- tilde(K.x)
  K.y_tilde <- tilde(K.y)

  # HSIC 値を計算
  hsic_value <- sum(diag(K.x_tilde %*% K.y_tilde)) / n^2

  # 正規化して HSIC の値を返す
  return(hsic_value)
}

## HSICの帰無分布をヒストグラムで可視化するためのコード ##

# データ生成
n <- 50  # サンプルサイズ
x <- rnorm(n)  # 標準正規分布に従うxの乱数
y <- rnorm(n)  # 標準正規分布に従うyの乱数

# カーネル関数の定義(RBFカーネル)
sigma2 <- 1  # RBFカーネルの分散パラメータ
k.x <- function(x, y) exp(-sum((x - y)^2) / (2 * sigma2))

k.y <- k.x  # 同じRBFカーネルをyにも使用

# カーネル行列の構築
K.x <- K(k.x, x)  # xに基づくカーネル行列
K.y <- K(k.y, y)  # yに基づくカーネル行列

# HSICの値を計算
u <- HSIC.1(K.x, K.y)  # 実データから得られるHSICの値


# 帰無分布を構成するためにxを並べ替えて再計算
m <- 100  # 並べ替えの試行回数
w <- NULL  # HSIC値を格納するベクトル

# 並べ替えによるHSICの分布を構築
for (i in 1:m) {
  x_shuffled <- sample(x, n)  # xをランダムに並べ替え
  K.x <- K(k.x, x_shuffled)  # 並べ替えたxに基づくカーネル行列
  w <- c(w, HSIC.1(K.x, K.y))  # 計算したHSIC値をwに追加
}

# 棄却域の設定(有意水準5%)
v <- quantile(w, 0.95)  # HSICの帰無分布の95%点

# HSICの分布をヒストグラムで表示
plot(
  density(w),  # 並べ替えたHSICの分布の密度曲線
  xlim = c(min(w, v, u), max(w, v, u)),  # x軸の範囲を設定
  main = "HSICの帰無分布と観測値",  # タイトル
  xlab = "HSIC値",  # x軸ラベル
  ylab = "密度"  # y軸ラベル
)

# 棄却域の境界を赤い破線で表示
abline(v = v, col = "red", lty = 2, lwd = 2)

# 観測されたHSICの値を青い実線で表示
abline(v = u, col = "blue", lty = 1, lwd = 2)

# HSICの値にnの3乗をかけた値と固有値を返す関数
# HSICの値にnの3乗をかけた値と固有値を返す関数
HSIC.2 <- function(K.x, K.y) {

  n <- ncol(K.x)  # サンプル数を取得

  # カーネル行列を中心化
  tilde.x <- tilde(K.x)  # xの中心化カーネル行列
  tilde.y <- tilde(K.y)  # yの中心化カーネル行列

  # HSICの計算
  hsic_value <- sum(diag(tilde.x %*% tilde.y))

  # 固有値の計算
  lambda.x <- Re(eigen(tilde.x)$values)  # tilde(K.x) の固有値
  lambda.y <- Re(eigen(tilde.y)$values)  # tilde(K.y) の固有値
  lambda.xy <- sort(as.vector(outer(lambda.x, lambda.y, "*")), decreasing = TRUE)

  # HSICの値と固有値をリストとして返す
  return(list(statistics = hsic_value * n,
              eigen_values = lambda.xy))
}

# 棄却域を設定する関数
null.dist <- function(eigen, alpha) {
  if (length(eigen) == 0) return(list(z = numeric(0), critical = NA))
  r <- length(eigen)  # 固有値の数

  # 近似計算の結果を格納するベクトルを事前に初期化
  z <- numeric(10000)

  # 固有値とカイ二乗分布を使って近似値を計算
  for (h in 1:10000) {
    z[h] <- sum(eigen * rchisq(r, df = 1))
  }

  # 棄却域の設定(有意水準 alpha の点を計算)
  critical <- quantile(z, 1 - alpha)

  return(list(z = z, critical = critical))
}

# サンプルサイズの設定とデータ生成
n <- 50  # サンプルサイズ
x <- rnorm(n)  # 標準正規分布に従うxの乱数
y <- rnorm(n)  # 標準正規分布に従うyの乱数

# y <- x + rnorm(n)  # xとの依存関係を持つ場合の例(検証時に使用)

# カーネル行列の計算(各変数に対して)
K.x <- K(k.x, x)  # xに対応するカーネル行列
K.y <- K(k.y, y)  # yに対応するカーネル行列

# HSICの計算と固有値の取得
result <- HSIC.2(K.x, K.y)  # HSICの値と固有値を取得
actual_value <- result$statistics  # HSICをn^3倍した値
eigen <- result$eigen_values  # 固有値の取得

# HSICの帰無分布の95%点を計算
critical <- null.dist(eigen, 0.05)$critical  # 95%の臨界値をn^2倍した値

# 結果の表示
cat("HSICの帰無分布の95%点:", critical, "\n")  # 臨界値を表示
## HSICの帰無分布の95%点: 1086.465
cat("実際のHSICの値のn倍:", actual_value, "\n")  # HSICの実測値を表示
## 実際のHSICの値のn倍: 978.9719
symmetrize <- function(A){
  return( (t(A) + A) / 2)
}

# KCI (Kernel-based Conditional Independence Test) 関数
KCI.1 <- function(K.x, K.y, K.z, lambda) {
  n <- nrow(K.x)  # サンプル数

  # xとz, yとzの結合カーネル行列の構築
  K.xz <- K.x * K.z
  K.yz <- K.y * K.z

  # z の正則化付き逆行列の計算
  R.Z <- lambda * solve(tilde(K.z) + lambda * diag(n))

  # R.Z を使って XZ と YZ を正規化する
  XZ <- R.Z %*% tilde(K.xz) %*% t(R.Z)  # xとzの結合行列を正規化
  YZ  <- R.Z %*% tilde(K.yz) %*% t(R.Z) # yとzの結合行列を正規化

  # 固有値分解
  eigen.XZ <- eigen(symmetrize(XZ))  # XZの固有値分解
  eigen.YZ <- eigen(symmetrize(YZ))    # YZの固有値分解

  # 上位 r 個の固有値を使用
  r <- ceiling(sqrt(n))  # 固有値の使用数
  S <- tcrossprod(eigen.XZ$vectors[, 1:r], diag(sqrt(Re(eigen.XZ$values[1:r]))))   # XZの固有値ベクトル
  T <- tcrossprod(eigen.YZ$vectors[, 1:r], diag(sqrt(Re(eigen.YZ$values[1:r]))))     # YZの固有値ベクトル

  # 行列 W の初期化と計算
  W <- matrix(0, ncol = r*r, nrow = n)  # r*r 次のゼロ行列
  for (i in 1:r) {
    for (j in 1:r) {
      W[, r * (i - 1) + j] <- S[, i] * T[, j]
    }
  }
  # 結果をリストで返す
  return(list(
    statistics = sum(diag(XZ %*% YZ)),   # 検定統計量 T
    eigen_values = Re(eigen(crossprod(W))$values)  # W の固有値
  ))
}

## カーネルの設定 (Gaussianカーネル)
k.x <- function(x, y) exp(-sum((x - y)^2) / 2)  # RBFカーネル(xとyの類似度を計算)
k.y <- k.x  # 同じカーネル関数を y に使用
k.z <- k.x  # 同じカーネル関数を z に使用

## データの生成
n <- 100  # サンプルサイズ
x <- rnorm(n)  # 標準正規分布に従うxの乱数
y <- rnorm(n)  # 標準正規分布に従うyの乱数
z <- rnorm(n)  # 標準正規分布に従うzの乱数

## カーネル行列の計算
K.x <- K(k.x, x)  # xのカーネル行列
K.y <- K(k.y, y)  # yのカーネル行列
K.z <- K(k.z, z)  # zのカーネル行列

## パラメータの設定とKCIの実行
lambda <- 0.001  # 正則化パラメータの設定
result <- KCI.1(K.x, K.y, K.z, lambda)  # KCIの実行
eigen <- result$eigen_values  # 固有値の取得
u <- result$statistics  # 検定統計量の取得

alpha <- 0.05
result2 <- null.dist(eigen, alpha)
z <- result2$z
v <- result2$critical

## 結果のグラフ表示
plot(
  density(z),  # 近似されたHSICの分布を密度曲線で表示
  xlim = c(min(z, v, u), max(z, v, u)),  # x軸の範囲を設定
  main = "KCIの帰無分布と観測値",  # グラフのタイトル
  xlab = "統計量",  # x軸のラベル
  ylab = "密度"  # y軸のラベル
)

## 棄却域の境界を赤い破線で表示
abline(v = v, col = "red", lty = 2, lwd = 2)

## 観測された検定統計量を青い実線で表示
abline(v = u, col = "blue", lty = 1, lwd = 2)

第4章

library(pcalg)
data(gmG)
suffStat <- list(C = cor(gmG$x), n = nrow(gmG$x))
skeleton.fit <- pcalg::skeleton(suffStat, indepTest = gaussCItest, p = ncol(gmG$x), alpha = 0.01)
pc.fit <- pc(suffStat, indepTest=gaussCItest, p=ncol(gmG$x), alpha=0.01)
par(mfrow=c(1,3)) # 出力する3個のグラフを横に並べる
plot(gmG$g, main="真のDAG")
plot(skeleton.fit, main="推定された骨格")
plot(pc.fit, main="推定されたCPDAG")

# Gram行列の積を求める関数
K.merge <- function(S, K.list) {
  n <- nrow(K.list[[1]])  # 行列のサイズを取得

  # Kの初期化(すべての要素が1のn × n行列)
  K <- matrix(1, n, n)

  # 集合 S のカーネル行列とのアダマール積を計算
  for (h in S) {
    K <- K * K.list[[h]]
  }
  # アダマール積による結合結果を返す
  return(K)
}

CI.PC <- function(i, j, S, K.list, alpha, lambda) {
  # カーネル行列のサイズを取得
  n <- nrow(K.list[[1]])
  m <- length(S)

  # HSICまたはKCIを使用して検定統計量を計算
  if (m == 0) {
    result <- HSIC.2(K.list[[i]], K.list[[j]])  # HSICの場合
  } else {
    KK <- K.merge(S, K.list)  # Gaussカーネルの帯域幅をZに含まれる変数の個数倍に調整
    result <- KCI.1(K.list[[i]], K.list[[j]], KK, lambda)  # KCIの場合
  }

  # 検定統計量と固有値を取得
  statistics <- result$statistics
  eigen <- result$eigen_values

  # 棄却域の設定(有意水準 alpha に基づく)
  critical <- null.dist(eigen, alpha)$critical

  # 結果の判定
  True.False <- (statistics < critical)

  # 結果を表示
  print(c(i, j))
  print(S)
  print(True.False)

  # 結果の返却(TRUE または FALSE)
  return(True.False)
}

# パラメータの設定
p <- 4  # 変数の数
n <- 100  # サンプルサイズ

# サンプルデータの生成
z <- rnorm(n)  # 標準正規分布に従う z
w <- rnorm(n)  # 標準正規分布に従う w
x <- z + rnorm(n)  # z に依存する x
y <- w + rnorm(n)  # w に依存する y

# 変数を列方向に結合
X <- cbind(x, y, z, w)

# Gaussianカーネルの定義
gaussian_kernel <- function(x, y) exp(-sum((x - y)^2) / 2)

# 各変数に対するカーネル行列の計算
KK <- list()
for (j in 1:p) {
  KK[[j]] <- K(gaussian_kernel, X[, j])  # 各列に対するカーネル行列を計算
}

# CI.PC関数の実行
result <- CI.PC(1, 2, c(3, 4), KK, 0.05, 0.1)
## [1] 1 2
## [1] 3 4
##  95% 
## TRUE
# 結果の表示
print(result)
##  95% 
## TRUE
skeleton <- function(K.list, alpha, lambda) {
  p <- length(K.list)
  m <- 0
  repeat {
    done <- TRUE
    for (i in 1:(p - 1)) {
      for (j in (i + 1):p) {
        if (adj[i, j]) {
          S <- setdiff(which(adj[i, ]), c(i, j))
          if (length(S) >= m) {
            if (m == 0) {
              if (CI.PC(i, j, NULL, K.list, alpha, lambda)) {
                adj[i, j] <- FALSE
                adj[j, i] <- FALSE
                done <- FALSE
              }
            } else {
              mat <- combn(S, m)
              for (h in 1:ncol(mat)) {
                cond_set <- mat[, h]
                if (CI.PC(i, j, cond_set, K.list, alpha, lambda)) {
                  adj[i, j] <- FALSE
                  adj[j, i] <- FALSE
                  for (k in cond_set) {
                    s[i, j, k] <- TRUE
                    s[j, i, k] <- TRUE
                  }
                  done <- FALSE
                  break
                }
              }
            }
          }
        }
      }
    }
    if (done) break
    m <- m + 1
  }

  return(list(adj = adj, s = s))
}

# データの設定
n <- 200
p <- 4
y <- rnorm(n)
z <- rnorm(n)
x <- z + rbinom(n, 1, 0.25)
w <- y + z + rbinom(n, 1, 0.25)
X <- cbind(x, y, z, w)

library(igraph)
# カーネル関数の設定(Gaussian カーネル)

k=list()
for (j in 1:p) {
  k[[j]] <- function(x, y) exp(-sum((x - y)^2) / 2)
  # RBFカーネル
}

X <- scale(X)

# 各変数に対するカーネル行列の計算
KK <- list()
for (j in 1:p) {
  KK[[j]] <- K(k[[j]], X[, j])
}

# 大域変数 adj, sの初期設定

# p × p の隣接行列を TRUE で初期化し、対角要素は FALSE にする
adj <- array(TRUE, dim = c(p, p))
for (j in 1:p) adj[j, j] <- FALSE
# s は、各 i, j, k に対する独立性の情報を保存する 3 次元配列
s <- array(FALSE, dim = c(p, p, p))

alpha <- 0.05
lambda <- 10**(-3)
skeleton(KK, alpha, lambda)
## [1] 1 2
## NULL
##   95% 
## FALSE 
## [1] 1 3
## NULL
##   95% 
## FALSE 
## [1] 1 4
## NULL
##   95% 
## FALSE 
## [1] 2 3
## NULL
##   95% 
## FALSE 
## [1] 2 4
## NULL
##   95% 
## FALSE 
## [1] 3 4
## NULL
##   95% 
## FALSE
## $adj
##       [,1]  [,2]  [,3]  [,4]
## [1,] FALSE  TRUE  TRUE  TRUE
## [2,]  TRUE FALSE  TRUE  TRUE
## [3,]  TRUE  TRUE FALSE  TRUE
## [4,]  TRUE  TRUE  TRUE FALSE
## 
## $s
## , , 1
## 
##       [,1]  [,2]  [,3]  [,4]
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
## 
## , , 2
## 
##       [,1]  [,2]  [,3]  [,4]
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
## 
## , , 3
## 
##       [,1]  [,2]  [,3]  [,4]
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
## 
## , , 4
## 
##       [,1]  [,2]  [,3]  [,4]
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
g <- graph_from_adjacency_matrix(adj, mode = "undirected")
plot(g)

Post_PC <- function(adj, s) {
  p <- nrow(adj)

  any  <- function(i, j) adj[i, j] | adj[j, i]
  no   <- function(i, j) !any(i, j)

  # コライダーの検出
  for (i in 1:p) {
    for (j in setdiff(1:p, i)) {
      for (k in setdiff(1:p, c(i, j))) {
        if (no(i, k) && !s[i, k, j] && adj[i, j] && adj[k, j]) {
          adj[j, i] <- FALSE
          adj[j, k] <- FALSE
        }
      }
    }
  }

  # 間接依存の辺の削除
  for (i in 1:p) {
    for (j in setdiff(1:p, i)) {
      for (k in setdiff(1:p, c(i, j))) {
        if (adj[i, j] && adj[j, k] && no(i, k)) {
          adj[k, j] <- FALSE
        }
      }
    }
  }

  # 循環削除
  for (i in 1:p) {
    for (j in setdiff(1:p, i)) {
      for (k in setdiff(1:p, c(i, j))) {
        if (adj[i, j] && adj[j, k] && adj[i,k]) {
          adj[k, i] <- FALSE
        }
      }
    }
  }

  # コライダーの拡張 (1)
  for (j in 1:p) {
    for (k in setdiff(1:p, j)) {
      for (l in setdiff(1:p, c(j, k))) {
        for (i in setdiff(1:p, c(j, k, l))) {
          if (adj[k, j] && adj[l, j] && adj[i,j] && any(i, k) && any(i, l)) {
            adj[j, i] <- FALSE
          }
        }
      }
    }
  }

  # コライダーの拡張 (2)
  for (j in 1:p) {
    for (k in setdiff(1:p, j)) {
      for (l in setdiff(1:p, c(j, k))) {
        for (i in setdiff(1:p, c(j, k, l))) {
          if (adj[k, l] && adj[l, j] && adj[i, j] && any(i, k)) {
            adj[j, i] <- FALSE
          }
        }
      }
    }
  }

  return(adj)
}

p <- 3
adj <- matrix(FALSE, p, p)
adj[1,3] <- adj[3,1] <- TRUE
adj[2,3] <- adj[3,2] <- TRUE
diag(adj) <- FALSE

s <- array(TRUE, dim = c(p, p, p))   # 初期化(すべて分離されているとする)
s[1,2,3] <- s[2,1,3] <- FALSE        # ただし S[1,2,3] = FALSE と設定

adj_post <- Post_PC(adj, s)
adj_post
##       [,1]  [,2]  [,3]
## [1,] FALSE FALSE  TRUE
## [2,] FALSE FALSE  TRUE
## [3,] FALSE FALSE FALSE
library(igraph)
library(MASS)

# Bostonデータ: 実行に時間がかかるので最初の100サンプルで実行(それでも10-15分程度)
df <- Boston
 X <- scale(as.matrix(df))
 n <- 100 # 15分程度の実行
# n <- 200 # 1時間程度の実行
 X <- X[1:n, ]
 p <- ncol(X)

# Gaussian カーネル(各変数で同じ)
k <- function(x, y) exp(-sum((x - y)^2) / 2)

# 各変数に対するカーネル行列の計算
KK <- list()
for (j in 1:p) {
  KK[[j]] <- K(k, X[, j])
}

# グローバル変数(副作用版を使う場合)
adj <- matrix(TRUE, p, p)
diag(adj) <- FALSE
s <- array(FALSE, dim = c(p, p, p))

# パラメータ
alpha <- 0.05
lambda <- 1e-3

# skeleton関数(副作用付き)を呼び出し
skeleton(KK, alpha, lambda)  # ← adj, s が書き換わる
## [1] 1 2
## NULL
##   95% 
## FALSE 
## [1] 1 3
## NULL
##   95% 
## FALSE 
## [1] 1 4
## NULL
##  95% 
## TRUE 
## [1] 1 5
## NULL
##   95% 
## FALSE 
## [1] 1 6
## NULL
##   95% 
## FALSE 
## [1] 1 7
## NULL
##   95% 
## FALSE 
## [1] 1 8
## NULL
##   95% 
## FALSE 
## [1] 1 9
## NULL
##  95% 
## TRUE 
## [1]  1 10
## NULL
##   95% 
## FALSE 
## [1]  1 11
## NULL
##   95% 
## FALSE 
## [1]  1 12
## NULL
##   95% 
## FALSE 
## [1]  1 13
## NULL
##   95% 
## FALSE 
## [1]  1 14
## NULL
##   95% 
## FALSE 
## [1] 2 3
## NULL
##   95% 
## FALSE 
## [1] 2 4
## NULL
##  95% 
## TRUE 
## [1] 2 5
## NULL
##   95% 
## FALSE 
## [1] 2 6
## NULL
##  95% 
## TRUE 
## [1] 2 7
## NULL
##   95% 
## FALSE 
## [1] 2 8
## NULL
##   95% 
## FALSE 
## [1] 2 9
## NULL
##   95% 
## FALSE 
## [1]  2 10
## NULL
##  95% 
## TRUE 
## [1]  2 11
## NULL
##   95% 
## FALSE 
## [1]  2 12
## NULL
##   95% 
## FALSE 
## [1]  2 13
## NULL
##   95% 
## FALSE 
## [1]  2 14
## NULL
##   95% 
## FALSE 
## [1] 3 4
## NULL
##  95% 
## TRUE 
## [1] 3 5
## NULL
##   95% 
## FALSE 
## [1] 3 6
## NULL
##   95% 
## FALSE 
## [1] 3 7
## NULL
##   95% 
## FALSE 
## [1] 3 8
## NULL
##   95% 
## FALSE 
## [1] 3 9
## NULL
##   95% 
## FALSE 
## [1]  3 10
## NULL
##   95% 
## FALSE 
## [1]  3 11
## NULL
##   95% 
## FALSE 
## [1]  3 12
## NULL
##   95% 
## FALSE 
## [1]  3 13
## NULL
##   95% 
## FALSE 
## [1]  3 14
## NULL
##   95% 
## FALSE 
## [1] 4 5
## NULL
##  95% 
## TRUE 
## [1] 4 6
## NULL
##  95% 
## TRUE 
## [1] 4 7
## NULL
##  95% 
## TRUE 
## [1] 4 8
## NULL
##  95% 
## TRUE 
## [1] 4 9
## NULL
##  95% 
## TRUE 
## [1]  4 10
## NULL
##  95% 
## TRUE 
## [1]  4 11
## NULL
##  95% 
## TRUE 
## [1]  4 12
## NULL
##  95% 
## TRUE 
## [1]  4 13
## NULL
##  95% 
## TRUE 
## [1]  4 14
## NULL
##  95% 
## TRUE 
## [1] 5 6
## NULL
##   95% 
## FALSE 
## [1] 5 7
## NULL
##   95% 
## FALSE 
## [1] 5 8
## NULL
##   95% 
## FALSE 
## [1] 5 9
## NULL
##  95% 
## TRUE 
## [1]  5 10
## NULL
##   95% 
## FALSE 
## [1]  5 11
## NULL
##   95% 
## FALSE 
## [1]  5 12
## NULL
##   95% 
## FALSE 
## [1]  5 13
## NULL
##   95% 
## FALSE 
## [1]  5 14
## NULL
##   95% 
## FALSE 
## [1] 6 7
## NULL
##  95% 
## TRUE 
## [1] 6 8
## NULL
##  95% 
## TRUE 
## [1] 6 9
## NULL
##   95% 
## FALSE 
## [1]  6 10
## NULL
##   95% 
## FALSE 
## [1]  6 11
## NULL
##   95% 
## FALSE 
## [1]  6 12
## NULL
##   95% 
## FALSE 
## [1]  6 13
## NULL
##   95% 
## FALSE 
## [1]  6 14
## NULL
##   95% 
## FALSE 
## [1] 7 8
## NULL
##   95% 
## FALSE 
## [1] 7 9
## NULL
##  95% 
## TRUE 
## [1]  7 10
## NULL
##  95% 
## TRUE 
## [1]  7 11
## NULL
##   95% 
## FALSE 
## [1]  7 12
## NULL
##   95% 
## FALSE 
## [1]  7 13
## NULL
##   95% 
## FALSE 
## [1]  7 14
## NULL
##   95% 
## FALSE 
## [1] 8 9
## NULL
##   95% 
## FALSE 
## [1]  8 10
## NULL
##  95% 
## TRUE 
## [1]  8 11
## NULL
##   95% 
## FALSE 
## [1]  8 12
## NULL
##   95% 
## FALSE 
## [1]  8 13
## NULL
##  95% 
## TRUE 
## [1]  8 14
## NULL
##  95% 
## TRUE 
## [1]  9 10
## NULL
##   95% 
## FALSE 
## [1]  9 11
## NULL
##   95% 
## FALSE 
## [1]  9 12
## NULL
##  95% 
## TRUE 
## [1]  9 13
## NULL
##   95% 
## FALSE 
## [1]  9 14
## NULL
##   95% 
## FALSE 
## [1] 10 11
## NULL
##   95% 
## FALSE 
## [1] 10 12
## NULL
##  95% 
## TRUE 
## [1] 10 13
## NULL
##   95% 
## FALSE 
## [1] 10 14
## NULL
##   95% 
## FALSE 
## [1] 11 12
## NULL
##   95% 
## FALSE 
## [1] 11 13
## NULL
##   95% 
## FALSE 
## [1] 11 14
## NULL
##   95% 
## FALSE 
## [1] 12 13
## NULL
##   95% 
## FALSE 
## [1] 12 14
## NULL
##   95% 
## FALSE 
## [1] 13 14
## NULL
##   95% 
## FALSE 
## [1] 1 2
## [1] 3
##   95% 
## FALSE 
## [1] 1 2
## [1] 5
##   95% 
## FALSE 
## [1] 1 2
## [1] 6
##   95% 
## FALSE 
## [1] 1 2
## [1] 7
##   95% 
## FALSE 
## [1] 1 2
## [1] 8
##   95% 
## FALSE 
## [1] 1 2
## [1] 10
##   95% 
## FALSE 
## [1] 1 2
## [1] 11
##  95% 
## TRUE 
## [1] 1 3
## [1] 5
##  95% 
## TRUE 
## [1] 1 5
## [1] 6
##   95% 
## FALSE 
## [1] 1 5
## [1] 7
##   95% 
## FALSE 
## [1] 1 5
## [1] 8
##   95% 
## FALSE 
## [1] 1 5
## [1] 10
##   95% 
## FALSE 
## [1] 1 5
## [1] 11
##  95% 
## TRUE 
## [1] 1 6
## [1] 7
##   95% 
## FALSE 
## [1] 1 6
## [1] 8
##   95% 
## FALSE 
## [1] 1 6
## [1] 10
##   95% 
## FALSE 
## [1] 1 6
## [1] 11
##   95% 
## FALSE 
## [1] 1 6
## [1] 12
##   95% 
## FALSE 
## [1] 1 6
## [1] 13
##  95% 
## TRUE 
## [1] 1 7
## [1] 8
##   95% 
## FALSE 
## [1] 1 7
## [1] 10
##   95% 
## FALSE 
## [1] 1 7
## [1] 11
##   95% 
## FALSE 
## [1] 1 7
## [1] 12
##   95% 
## FALSE 
## [1] 1 7
## [1] 13
##   95% 
## FALSE 
## [1] 1 7
## [1] 14
##  95% 
## TRUE 
## [1] 1 8
## [1] 10
##   95% 
## FALSE 
## [1] 1 8
## [1] 11
##  95% 
## TRUE 
## [1]  1 10
## [1] 11
##  95% 
## TRUE 
## [1]  1 11
## [1] 12
##   95% 
## FALSE 
## [1]  1 11
## [1] 13
##   95% 
## FALSE 
## [1]  1 11
## [1] 14
##   95% 
## FALSE 
## [1]  1 12
## [1] 11
##  95% 
## TRUE 
## [1]  1 13
## [1] 11
##   95% 
## FALSE 
## [1]  1 13
## [1] 14
##  95% 
## TRUE 
## [1]  1 14
## [1] 1
##   95% 
## FALSE 
## [1]  1 14
## [1] 2
##   95% 
## FALSE 
## [1]  1 14
## [1] 3
##   95% 
## FALSE 
## [1]  1 14
## [1] 4
##   95% 
## FALSE 
## [1]  1 14
## [1] 5
##   95% 
## FALSE 
## [1]  1 14
## [1] 6
##   95% 
## FALSE 
## [1]  1 14
## [1] 7
##   95% 
## FALSE 
## [1]  1 14
## [1] 8
##   95% 
## FALSE 
## [1]  1 14
## [1] 9
##   95% 
## FALSE 
## [1]  1 14
## [1] 10
##   95% 
## FALSE 
## [1]  1 14
## [1] 11
##   95% 
## FALSE 
## [1] 2 3
## [1] 5
##   95% 
## FALSE 
## [1] 2 3
## [1] 7
##   95% 
## FALSE 
## [1] 2 3
## [1] 8
##   95% 
## FALSE 
## [1] 2 3
## [1] 9
##   95% 
## FALSE 
## [1] 2 3
## [1] 11
##   95% 
## FALSE 
## [1] 2 3
## [1] 12
##   95% 
## FALSE 
## [1] 2 3
## [1] 13
##  95% 
## TRUE 
## [1] 2 5
## [1] 7
##   95% 
## FALSE 
## [1] 2 5
## [1] 8
##   95% 
## FALSE 
## [1] 2 5
## [1] 9
##   95% 
## FALSE 
## [1] 2 5
## [1] 11
##   95% 
## FALSE 
## [1] 2 5
## [1] 12
##   95% 
## FALSE 
## [1] 2 5
## [1] 13
##   95% 
## FALSE 
## [1] 2 5
## [1] 14
##   95% 
## FALSE 
## [1] 2 7
## [1] 5
##  95% 
## TRUE 
## [1] 2 8
## [1] 5
##   95% 
## FALSE 
## [1] 2 8
## [1] 9
##   95% 
## FALSE 
## [1] 2 8
## [1] 11
##   95% 
## FALSE 
## [1] 2 8
## [1] 12
##   95% 
## FALSE 
## [1] 2 8
## [1] 13
##   95% 
## FALSE 
## [1] 2 8
## [1] 14
##   95% 
## FALSE 
## [1] 2 9
## [1] 5
##   95% 
## FALSE 
## [1] 2 9
## [1] 8
##   95% 
## FALSE 
## [1] 2 9
## [1] 11
##  95% 
## TRUE 
## [1]  2 11
## [1] 5
##   95% 
## FALSE 
## [1]  2 11
## [1] 8
##  95% 
## TRUE 
## [1]  2 12
## [1] 5
##   95% 
## FALSE 
## [1]  2 12
## [1] 8
##   95% 
## FALSE 
## [1]  2 12
## [1] 13
##   95% 
## FALSE 
## [1]  2 12
## [1] 14
##   95% 
## FALSE 
## [1]  2 13
## [1] 5
##  95% 
## TRUE 
## [1]  2 14
## [1] 5
##  95% 
## TRUE 
## [1] 3 5
## [1] 6
##   95% 
## FALSE 
## [1] 3 5
## [1] 7
##   95% 
## FALSE 
## [1] 3 5
## [1] 8
##   95% 
## FALSE 
## [1] 3 5
## [1] 9
##   95% 
## FALSE 
## [1] 3 5
## [1] 10
##   95% 
## FALSE 
## [1] 3 5
## [1] 11
##  95% 
## TRUE 
## [1] 3 6
## [1] 7
##   95% 
## FALSE 
## [1] 3 6
## [1] 8
##   95% 
## FALSE 
## [1] 3 6
## [1] 9
##   95% 
## FALSE 
## [1] 3 6
## [1] 10
##   95% 
## FALSE 
## [1] 3 6
## [1] 11
##   95% 
## FALSE 
## [1] 3 6
## [1] 12
##   95% 
## FALSE 
## [1] 3 6
## [1] 13
##   95% 
## FALSE 
## [1] 3 6
## [1] 14
##  95% 
## TRUE 
## [1] 3 7
## [1] 8
##   95% 
## FALSE 
## [1] 3 7
## [1] 9
##   95% 
## FALSE 
## [1] 3 7
## [1] 10
##   95% 
## FALSE 
## [1] 3 7
## [1] 11
##  95% 
## TRUE 
## [1] 3 8
## [1] 9
##   95% 
## FALSE 
## [1] 3 8
## [1] 10
##   95% 
## FALSE 
## [1] 3 8
## [1] 11
##   95% 
## FALSE 
## [1] 3 8
## [1] 12
##   95% 
## FALSE 
## [1] 3 8
## [1] 13
##   95% 
## FALSE 
## [1] 3 8
## [1] 14
##   95% 
## FALSE 
## [1] 3 9
## [1] 8
##   95% 
## FALSE 
## [1] 3 9
## [1] 10
##  95% 
## TRUE 
## [1]  3 10
## [1] 8
##   95% 
## FALSE 
## [1]  3 10
## [1] 11
##   95% 
## FALSE 
## [1]  3 10
## [1] 12
##   95% 
## FALSE 
## [1]  3 10
## [1] 13
##   95% 
## FALSE 
## [1]  3 10
## [1] 14
##   95% 
## FALSE 
## [1]  3 11
## [1] 8
##   95% 
## FALSE 
## [1]  3 11
## [1] 10
##   95% 
## FALSE 
## [1]  3 11
## [1] 12
##   95% 
## FALSE 
## [1]  3 11
## [1] 13
##   95% 
## FALSE 
## [1]  3 11
## [1] 14
##   95% 
## FALSE 
## [1]  3 12
## [1] 8
##   95% 
## FALSE 
## [1]  3 12
## [1] 10
##   95% 
## FALSE 
## [1]  3 12
## [1] 11
##   95% 
## FALSE 
## [1]  3 12
## [1] 13
##   95% 
## FALSE 
## [1]  3 12
## [1] 14
##   95% 
## FALSE 
## [1]  3 13
## [1] 8
##   95% 
## FALSE 
## [1]  3 13
## [1] 10
##   95% 
## FALSE 
## [1]  3 13
## [1] 11
##   95% 
## FALSE 
## [1]  3 13
## [1] 12
##   95% 
## FALSE 
## [1]  3 13
## [1] 14
##  95% 
## TRUE 
## [1]  3 14
## [1] 8
##   95% 
## FALSE 
## [1]  3 14
## [1] 10
##   95% 
## FALSE 
## [1]  3 14
## [1] 11
##   95% 
## FALSE 
## [1]  3 14
## [1] 12
##   95% 
## FALSE 
## [1] 5 6
## [1] 2
##   95% 
## FALSE 
## [1] 5 6
## [1] 7
##   95% 
## FALSE 
## [1] 5 6
## [1] 8
##   95% 
## FALSE 
## [1] 5 6
## [1] 10
##   95% 
## FALSE 
## [1] 5 6
## [1] 11
##  95% 
## TRUE 
## [1] 5 7
## [1] 2
##   95% 
## FALSE 
## [1] 5 7
## [1] 8
##   95% 
## FALSE 
## [1] 5 7
## [1] 10
##   95% 
## FALSE 
## [1] 5 7
## [1] 11
##   95% 
## FALSE 
## [1] 5 7
## [1] 12
##   95% 
## FALSE 
## [1] 5 7
## [1] 13
##   95% 
## FALSE 
## [1] 5 7
## [1] 14
##   95% 
## FALSE 
## [1] 5 8
## [1] 2
##   95% 
## FALSE 
## [1] 5 8
## [1] 7
##   95% 
## FALSE 
## [1] 5 8
## [1] 10
##   95% 
## FALSE 
## [1] 5 8
## [1] 11
##   95% 
## FALSE 
## [1] 5 8
## [1] 12
##   95% 
## FALSE 
## [1] 5 8
## [1] 13
##   95% 
## FALSE 
## [1] 5 8
## [1] 14
##   95% 
## FALSE 
## [1]  5 10
## [1] 2
##   95% 
## FALSE 
## [1]  5 10
## [1] 7
##   95% 
## FALSE 
## [1]  5 10
## [1] 8
##  95% 
## TRUE 
## [1]  5 11
## [1] 2
##   95% 
## FALSE 
## [1]  5 11
## [1] 7
##   95% 
## FALSE 
## [1]  5 11
## [1] 8
##   95% 
## FALSE 
## [1]  5 11
## [1] 12
##   95% 
## FALSE 
## [1]  5 11
## [1] 13
##   95% 
## FALSE 
## [1]  5 11
## [1] 14
##   95% 
## FALSE 
## [1]  5 12
## [1] 2
##   95% 
## FALSE 
## [1]  5 12
## [1] 7
##  95% 
## TRUE 
## [1]  5 13
## [1] 2
##   95% 
## FALSE 
## [1]  5 13
## [1] 7
##  95% 
## TRUE 
## [1]  5 14
## [1] 2
##   95% 
## FALSE 
## [1]  5 14
## [1] 7
##  95% 
## TRUE 
## [1] 6 9
## [1] 10
##  95% 
## TRUE 
## [1]  6 10
## [1] 11
##   95% 
## FALSE 
## [1]  6 10
## [1] 12
##   95% 
## FALSE 
## [1]  6 10
## [1] 13
##  95% 
## TRUE 
## [1]  6 11
## [1] 12
##   95% 
## FALSE 
## [1]  6 11
## [1] 13
##  95% 
## TRUE 
## [1]  6 12
## [1] 13
##  95% 
## TRUE 
## [1]  6 13
## [1] 1
##   95% 
## FALSE 
## [1]  6 13
## [1] 2
##   95% 
## FALSE 
## [1]  6 13
## [1] 3
##   95% 
## FALSE 
## [1]  6 13
## [1] 4
##   95% 
## FALSE 
## [1]  6 13
## [1] 5
##   95% 
## FALSE 
## [1]  6 13
## [1] 6
##  95% 
## TRUE 
## [1] 7 8
## [1] 5
##  95% 
## TRUE 
## [1]  7 11
## [1] 5
##  95% 
## TRUE 
## [1]  7 12
## [1] 5
##  95% 
## TRUE 
## [1]  7 13
## [1] 5
##   95% 
## FALSE 
## [1]  7 13
## [1] 14
##  95% 
## TRUE 
## [1]  7 14
## [1] 1
##   95% 
## FALSE 
## [1]  7 14
## [1] 2
##   95% 
## FALSE 
## [1]  7 14
## [1] 3
##   95% 
## FALSE 
## [1]  7 14
## [1] 4
##   95% 
## FALSE 
## [1]  7 14
## [1] 5
##   95% 
## FALSE 
## [1] 8 9
## [1] 2
##   95% 
## FALSE 
## [1] 8 9
## [1] 3
##   95% 
## FALSE 
## [1] 8 9
## [1] 5
##   95% 
## FALSE 
## [1] 8 9
## [1] 11
##  95% 
## TRUE 
## [1]  8 11
## [1] 2
##   95% 
## FALSE 
## [1]  8 11
## [1] 3
##   95% 
## FALSE 
## [1]  8 11
## [1] 5
##   95% 
## FALSE 
## [1]  8 11
## [1] 12
##   95% 
## FALSE 
## [1]  8 12
## [1] 2
##  95% 
## TRUE 
## [1]  9 10
## [1] 11
##   95% 
## FALSE 
## [1]  9 10
## [1] 13
##   95% 
## FALSE 
## [1]  9 10
## [1] 14
##   95% 
## FALSE 
## [1]  9 11
## [1] 10
##   95% 
## FALSE 
## [1]  9 11
## [1] 13
##   95% 
## FALSE 
## [1]  9 11
## [1] 14
##   95% 
## FALSE 
## [1]  9 13
## [1] 10
##  95% 
## TRUE 
## [1]  9 14
## [1] 10
##  95% 
## TRUE 
## [1] 10 11
## [1] 3
##   95% 
## FALSE 
## [1] 10 11
## [1] 9
##   95% 
## FALSE 
## [1] 10 11
## [1] 13
##   95% 
## FALSE 
## [1] 10 11
## [1] 14
##   95% 
## FALSE 
## [1] 10 13
## [1] 3
##  95% 
## TRUE 
## [1] 10 14
## [1] 3
##   95% 
## FALSE 
## [1] 10 14
## [1] 9
##   95% 
## FALSE 
## [1] 10 14
## [1] 11
##   95% 
## FALSE 
## [1] 11 12
## [1] 1
##  95% 
## TRUE 
## [1] 11 13
## [1] 1
##   95% 
## FALSE 
## [1] 11 13
## [1] 3
##  95% 
## TRUE 
## [1] 11 14
## [1] 1
##  95% 
## TRUE 
## [1] 12 13
## [1] 2
##   95% 
## FALSE 
## [1] 12 13
## [1] 3
##  95% 
## TRUE 
## [1] 12 14
## [1] 2
##   95% 
## FALSE 
## [1] 12 14
## [1] 3
##   95% 
## FALSE 
## [1] 2 5
## [1]  8 12
##   95% 
## FALSE 
## [1] 2 8
## [1]  5 12
##   95% 
## FALSE 
## [1]  2 12
## [1] 5 8
##  95% 
## TRUE 
## [1] 3 8
## [1] 10 11
##  95% 
## TRUE 
## [1]  3 10
## [1] 11 12
##   95% 
## FALSE 
## [1]  3 10
## [1] 11 14
##   95% 
## FALSE 
## [1]  3 10
## [1] 12 14
##   95% 
## FALSE 
## [1]  3 11
## [1] 10 12
##  95% 
## TRUE 
## [1]  3 12
## [1] 10 14
##   95% 
## FALSE 
## [1]  3 14
## [1] 10 12
##   95% 
## FALSE 
## [1] 5 7
## [1] 2 8
##   95% 
## FALSE 
## [1] 5 7
## [1]  2 11
##   95% 
## FALSE 
## [1] 5 7
## [1]  8 11
##   95% 
## FALSE 
## [1] 5 8
## [1] 2 7
##  95% 
## TRUE 
## [1]  5 11
## [1] 2 7
##   95% 
## FALSE 
## [1] 10 11
## [1] 3 9
##  95% 
## TRUE 
## [1] 10 14
## [1] 3 9
##   95% 
## FALSE
## $adj
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [2,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
## [10,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [11,]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
## [12,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,]  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE
##       [,13] [,14]
##  [1,] FALSE  TRUE
##  [2,] FALSE FALSE
##  [3,] FALSE  TRUE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE  TRUE
##  [7,] FALSE  TRUE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE  TRUE
## [11,] FALSE FALSE
## [12,] FALSE  TRUE
## [13,] FALSE  TRUE
## [14,]  TRUE FALSE
## 
## $s
## , , 1
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE  TRUE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 2
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 3
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,]  TRUE FALSE
## [11,]  TRUE FALSE
## [12,]  TRUE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 4
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 5
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
##  [3,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,]  TRUE  TRUE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 6
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,]  TRUE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 7
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,]  TRUE  TRUE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 8
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 9
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 10
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,]  TRUE  TRUE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 11
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE
##  [2,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [9,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
## [10,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 12
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 13
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
##  [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,] FALSE FALSE
##  [2,] FALSE FALSE
##  [3,] FALSE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,] FALSE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## 
## , , 14
## 
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
##  [1,] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
##  [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [3,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
##  [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [6,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [7,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##       [,13] [,14]
##  [1,]  TRUE FALSE
##  [2,] FALSE FALSE
##  [3,]  TRUE FALSE
##  [4,] FALSE FALSE
##  [5,] FALSE FALSE
##  [6,] FALSE FALSE
##  [7,]  TRUE FALSE
##  [8,] FALSE FALSE
##  [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
# Post_PC を使って方向づけ
adj <- Post_PC(adj, s)

# グラフの可視化
g <- graph_from_adjacency_matrix(adj, mode = "directed")
plot(g)

第5章

LiNGAM.1 <- function(x, y, proc = "HSIC") {
  # x, y: 比較対象のデータベクトル
  # proc: 使用する処理方法("HSIC" か "p.val")
  sigma2 <- 1  # RBFカーネル用の分散パラメータ
  # RBF(Radial Basis Function)カーネル関数を定義
  k.x <- function(x, y) exp(-norm(x - y, "2")^2 / (2 * sigma2))
  # x と y の類似度を計算
  k.z <- k.x  # y にも同じ RBF カーネルを適用
  # 回帰残差ベクトル z を計算(y の x に対する線形回帰の残差)
  z <- y - sum(x * y) / sum(x^2) * x
  # x と z それぞれに対するカーネル行列を計算
  K.x <- K(k.x, x)
  K.z <- K(k.z, z)
  # HSIC(Hilbert-Schmidt Independence Criterion)の計算結果を取得
  result <- HSIC.2(K.x, K.z)
  # proc のオプションに応じた処理
  if (proc == "HSIC") {
    # HSIC 値を返す
    return(result$statistics)
  } else {
    # 固有値に基づく棄却域の設定と p 値を返す
    seq <- null.dist(result$eigen_values, 0.05)$z  # 有意水準 0.05 での分布を取得
    return(mean(result$statistics < seq))  # p 値を返す
  }
}

n <- 100
x <- rnorm(n)
y <- x + scale(rnorm(n)**2, center = TRUE)
LiNGAM.1(x, y, proc="HSIC")
## [1] 1009.303
LiNGAM.1(y, x, proc="HSIC")
## [1] 13553.19
LiNGAM.1(x, y, proc="p.val")
## [1] 0.5167
LiNGAM.1(y, x, proc="p.val")
## [1] 0
# 実行に先立ち、第2章の下記関数を定義する。
# カーネル行列を計算する関数 K
# カーネル行列の中心化関数 tilde
# HSIC(Hilbert-Schmidt Independence Criterion)値を計算する関数 HSIC.2
# 固有値のベクトルと有意水準を基に棄却域を設定する関数 null.dist

# LiNGAMの計算を行う関数(HSICまたはp値を選択)
LiNGAM.2 <- function(i, z, proc="HSIC") {
  sigma2 <- 1  # カーネルのスケールパラメータ
  # ガウスカーネルを使用してxとyの類似度を計算
  k.x <- function(x, y) exp(-norm(x - y, "2")^2 / (2 * sigma2))
  # サンプルサイズをnとする
  n <- length(z[[i]])
  # 入力変数zの数
  m <- length(z)
  # xについてカーネル行列を作成
  K.x <- K(k.x, z[[i]])
  # カーネル行列K.zを初期化(対角要素が1の行列)
  K.z <- matrix(1, n, n)
  # zの各変数に対して処理を行う
  index <- setdiff(1:m, i)
  for (j in index) {
    # zの第j変数に対して残差を計算
    z[[j]] <- z[[j]] - sum(z[[i]] * z[[j]]) / sum(z[[i]] ** 2) * z[[i]]
    # K.zにz[[j]]のカーネル行列を積算
    K.z <- K.z * K(k.x, z[[j]])
  }
  # HSIC統計量を計算
  result <- HSIC.2(K.x, K.z)
  # HSICの場合
  if (proc == "HSIC") {
    HSIC <- result$statistics
    return(list(HSIC=HSIC, Z=z[-i]))
  } else if (proc == "p.val"){
    # p値の場合
    seq <- null.dist(result$eigen_values, 0.05)$z
    p.val <- mean(result$statistics < seq)
    return(list(p.val=p.val, Z=z[-i]
    ))
  }
}

search.HSIC <- function(Z, index=NULL) {
  m <- length(Z)
  # indexが省略されていたら、最上位での実行とみなす。
  if (length(index) == 0) index <- 1:m
  # indexの長さが2未満であれば、そのままindexを返す
  if (m < 2) return(index)
  # 初期化:最小のHSIC値を設定
  min <- Inf
  # indexの各要素についてループ
  for (i in 1:m) {
    # LiNGAM.2関数でHSICを実行
    result <- LiNGAM.2(i, Z, proc="HSIC")
    # 最小のHSIC値を更新し、その際のZとiの値を記録
    if (result$HSIC < min) {
      min <- result$HSIC
      W <- result$Z  # 残差を保存
      k <- index[i]
    }
  }
  # 更新されたWで再帰呼び出しを行い、結果をまとめる
  index.3 <- search.HSIC(W, setdiff(index, k))
  return(c(k, index.3))
}

n <- 100
x <- scale(rnorm(n)^2, center = TRUE)
y <- 2*x + scale(rnorm(n)^2, center = TRUE)
z <- -3*x + 4*y + scale(rnorm(n)^2, center = TRUE)
X <- list(x, y, z)
search.HSIC(X)
## [1] 1 2 3
library(MASS)
Boston.101_200 <- as.data.frame(scale(Boston[101:200, ], center = TRUE, scale = FALSE))
search.HSIC(as.list(Boston.101_200))
##  [1]  5  4  6  1  8  9 11 13 14  3  2  7 10 12
# 必要なライブラリをロード
library(fastICA)
# 乱数で独立した信号 S を生成 (5000×2 の行列)
S <- matrix(runif(10000), 5000, 2)
# 混合行列 A を定義 (独立成分を混合するための行列)
A <- matrix(c(1, 1, -1, 3), 2, 2, byrow = TRUE)
# 観測データ X を作成 (独立信号 S に混合行列 A を掛ける)
X <- S %*% A
# ICA を適用
a <- fastICA(X, 2,
             alg.typ = "parallel",  # 並列アルゴリズムを使用
             fun = "logcosh",        # 活性化関数: logcosh
             alpha = 1,              # 非線形関数のパラメータ
             method = "C",           # C言語による実装
             row.norm = FALSE,       # 行ごとの正規化なし
             maxit = 200,            # 最大反復回数
             tol = 0.0001,           # 収束条件
             verbose = TRUE)         # 進捗の表示
## Centering
## Whitening
## Symmetric FastICA using logcosh approx. to neg-entropy function
## Iteration 1 tol=0.110629
## Iteration 2 tol=0.000411
## Iteration 3 tol=0.000001
# グラフを並べて表示 (1行3列のレイアウト)
par(mfrow = c(1, 3))
# 各プロットの描画
plot(a$X, main = "前処理済みデータ", col = "blue", pch = 20)  # 前処理後のデータ
plot(a$X %*% a$K, main = "主成分分析 (PCA) 結果", col = "red", pch = 20)  # PCA成分
plot(a$S, main = "独立成分分析 (ICA) 結果", col = "green", pch = 20)  # ICA成分

library(pcalg)
set.seed(1234)  # 乱数のシードを設定(再現性を確保)
n <- 500  # サンプルサイズ
# ノイズ(外乱変数)を生成
eps1 <- sign(rnorm(n)) * sqrt(abs(rnorm(n)))  # ノイズ1:符号付きの平方根変換された正規乱数
eps2 <- runif(n) - 0.5  # ノイズ2:一様分布 (-0.5, 0.5)
# x2 を生成
x2 <- 3 + eps2  # x2 は 3 の定数にノイズを加えたもの
# x1 を生成
x1 <- 0.9*x2 + 7 + eps1  # x1 は x2 の線形結合にノイズを加えたもの
# 真の DAG(有向非巡回グラフ)
# x2 → x1 という因果構造
trueDAG <- cbind(c(0,1),c(0,0))  # 行列表現:x2 から x1 への向き
# データ行列を作成
X <- cbind(x1,x2)
# LiNGAM(Linear Non-Gaussian Acyclic Model)を適用して因果構造を推定
res <- lingam(X)
# 真の DAG を表示
cat("【真の DAG】:\n")
## 【真の DAG】:
show(trueDAG)
##      [,1] [,2]
## [1,]    0    0
## [2,]    1    0
# 推定された DAG を表示
cat("【推定された DAG】:\n")
## 【推定された DAG】:
show(as(res, "amat"))
## Adjacency Matrix 'amat' (2 x 2) of type 'pag':
##      [,1]  [,2]
## [1,] .     .   
## [2,]  TRUE .
# 真の定数(バイアス項)を表示
cat("\n【真の定数】:\n")
## 
## 【真の定数】:
show(c(7,3))  # x1 のバイアスは 7, x2 のバイアスは 3
## [1] 7 3
# 推定された定数を表示
cat("【推定された定数】:\n")
## 【推定された定数】:
show(res$ci)
## [1] 6.922077 3.010565
# 真のノイズの標準偏差(サンプル標準偏差)を表示
cat("\n【真のノイズの標準偏差】:\n")
## 
## 【真のノイズの標準偏差】:
show(c(sd(eps1), sd(eps2)))
## [1] 0.8680139 0.2857320
# 推定されたノイズの標準偏差を表示
cat("【推定されたノイズの標準偏差】:\n")
## 【推定されたノイズの標準偏差】:
show(res$stde)
## [1] 0.8464599 0.2802133
library(pcalg)
set.seed(123)  # 乱数のシードを設定(再現性を確保)
n <- 500  # サンプルサイズ
# ノイズ(外乱変数)を生成
eps1 <- sign(rnorm(n)) * sqrt(abs(rnorm(n)))  # 符号付きの平方根変換された正規乱数
eps2 <- runif(n) - 0.5  # 一様分布 (-0.5, 0.5)
eps3 <- sign(rnorm(n)) * abs(rnorm(n))^(1/3)  # 符号付きの 1/3 べき変換
eps4 <- scale(rnorm(n)^2, center = TRUE)  # 正規分布の2乗
# 変数の生成
x2 <- eps2  # x2 はノイズのみ
x1 <- 0.9*x2 + eps1  # x1 は x2 の線形結合にノイズを加えたもの
x3 <- 0.8*x2 + eps3  # x3 は x2 の線形結合にノイズを加えたもの
x4 <- -x1 - 0.9*x3 + eps4  # x4 は x1 と x3 の線形結合にノイズを加えたもの
# データ行列を作成
X <- cbind(x1, x2, x3, x4)
# 真の DAG(有向非巡回グラフ)を行列表現で定義
trueDAG <- cbind(
  x1 = c(0,1,0,0),  # x1 は x2 から影響を受ける
  x2 = c(0,0,0,0),  # x2 は独立変数
  x3 = c(0,1,0,0),  # x3 も x2 から影響を受ける
  x4 = c(1,0,1,0)   # x4 は x1 と x3 から影響を受ける
)
# 因果関係:
## x2 → x1,  x2 → x3,  x1 → x4,  x3 → x4
# LiNGAM を適用(詳細な出力あり)
res1 <- lingam(X, verbose = TRUE)  # LiNGAM の詳細を出力
## Performing row permutation, nzdiag*() ...
##   (Small dimensionality, using brute-force method.): Done!
## Performing permutation for causal order...
##   (Small dimensionality, using brute-force method.): Done!
##             [,1]        [,2]        [,3]        [,4]
## [1,]  0.00000000  0.01479851  0.01299619 0.013326408
## [2,]  0.90088984  0.00000000 -0.03644348 0.004821708
## [3,]  0.95137326 -0.04157816  0.00000000 0.024153796
## [4,] -0.04515725 -0.89175712 -1.04325655 0.000000000
## Causal B nicely triangular. No problems to report here.
## Pruning the network connections...
## Done!
res2 <- lingam(X, verbose = 2)  # LiNGAM に加え fastICA の詳細も出力
## Performing row permutation, nzdiag*() ...
##   (Small dimensionality, using brute-force method.): Done!
## Performing permutation for causal order...
##   (Small dimensionality, using brute-force method.): Done!
##             [,1]        [,2]        [,3]        [,4]
## [1,]  0.00000000  0.01479851  0.01299619 0.013326413
## [2,]  0.90088984  0.00000000 -0.03644348 0.004821706
## [3,]  0.95137329 -0.04157816  0.00000000 0.024153794
## [4,] -0.04515731 -0.89175712 -1.04325655 0.000000000
## Causal B nicely triangular. No problems to report here.
## Pruning the network connections...
## Done!
# 結果の一致を確認
## 当然ながら、結果は同じであることを確認
stopifnot(identical(res1, res2))
# 真の DAG を表示
cat("【真の DAG】:\n")
## 【真の DAG】:
show(trueDAG)
##      x1 x2 x3 x4
## [1,]  0  0  0  1
## [2,]  1  0  1  0
## [3,]  0  0  0  1
## [4,]  0  0  0  0
# 推定された DAG を表示
cat("【推定された DAG】:\n")
## 【推定された DAG】:
show(as(res1, "amat"))
## Adjacency Matrix 'amat' (4 x 4) of type 'pag':
##      [,1]  [,2] [,3]  [,4] 
## [1,] .     .    .      TRUE
## [2,]  TRUE .     TRUE .    
## [3,] .     .    .      TRUE
## [4,] .     .    .     .