The R
package ssgraph is designed for Bayesian structure learning in graphical models using spike-and-slab priors. To speed up the computations, the computationally intensive tasks of the package are implemented in C++
in parallel using OpenMP.
Install ssgraph using
install.packages( "ssgraph" )
First, we install ssgraph
library( ssgraph )
This is a simple example to see the performance of the package for the Gaussian graphical models. First, by using the function bdgraph.sim()
, we simulate 100 observations (n = 100) from a multivariate Gaussian distribution with 8 variables (p = 8) and “scale-free” graph structure, as follows:
set.seed( 10 )
<- bdgraph.sim( n = 100, p = 8, graph = "scale-free", vis = TRUE ) data.sim
round( head( data.sim $ data, 4 ), 2 )
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
> [1,] -0.83 0.72 -0.26 -0.29 0.46 0.08 -0.85 0.35
> [2,] -0.40 -0.38 0.78 1.90 0.35 0.51 -0.97 0.38
> [3,] -0.65 0.21 -0.80 -0.64 -0.72 0.40 0.89 0.94
> [4,] 0.74 -0.38 0.18 -0.95 0.23 -1.44 -0.85 0.03
Since the generated data are Gaussian, we run ssgraph
function by choosing method = "ggm"
, as follows:
<- ssgraph( data = data.sim, method = "ggm", iter = 5000,
ssgraph.obj save = TRUE, verbose = FALSE )
summary( ssgraph.obj )
> $selected_g
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
> [1,] 0 0 0 1 0 0 1 1
> [2,] 0 0 1 0 1 1 0 0
> [3,] 0 0 0 0 0 0 0 0
> [4,] 0 0 0 0 0 0 0 0
> [5,] 0 0 0 0 0 0 0 0
> [6,] 0 0 0 0 0 0 0 0
> [7,] 0 0 0 0 0 0 0 0
> [8,] 0 0 0 0 0 0 0 0
>
> $p_links
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
> [1,] 0 0.12 0.04 0.96 0.05 0.07 0.57 0.99
> [2,] 0 0.00 1.00 0.04 0.98 1.00 0.05 0.11
> [3,] 0 0.00 0.00 0.45 0.04 0.04 0.03 0.06
> [4,] 0 0.00 0.00 0.00 0.02 0.07 0.08 0.04
> [5,] 0 0.00 0.00 0.00 0.00 0.06 0.15 0.02
> [6,] 0 0.00 0.00 0.00 0.00 0.00 0.14 0.03
> [7,] 0 0.00 0.00 0.00 0.00 0.00 0.00 0.05
> [8,] 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
>
> $K_hat
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
> [1,] 1.21 -0.03 0.00 -0.36 -0.01 -0.02 -0.17 -0.42
> [2,] -0.03 2.14 -1.03 0.01 -0.45 -0.59 -0.01 -0.03
> [3,] 0.00 -1.03 1.87 -0.14 0.00 -0.01 0.00 -0.01
> [4,] -0.36 0.01 -0.14 1.25 0.00 -0.02 0.02 0.00
> [5,] -0.01 -0.45 0.00 0.00 1.15 0.02 0.04 0.00
> [6,] -0.02 -0.59 -0.01 -0.02 0.02 1.05 -0.03 -0.01
> [7,] -0.17 -0.01 0.00 0.02 0.04 -0.03 1.11 0.01
> [8,] -0.42 -0.03 -0.01 0.00 0.00 -0.01 0.01 1.22
To compare the result with true graph
compare( data.sim, ssgraph.obj, main = c( "Target", "ssgraph" ), vis = TRUE )
> Target ssgraph
> True Positive 6 6.000
> True Negative 22 21.000
> False Positive 0 1.000
> False Negative 0 0.000
> F1-score 1 0.923
> Specificity 1 0.955
> Sensitivity 1 1.000
> MCC 1 0.905
plotroc( ssgraph.obj, data.sim, cut = 200 )