About

bnviewer is an R package for interactive visualization of Bayesian Networks based on bnlearn and visNetwork.

The bnviewer package learning algorithms of structure provided by the bnlearn package and enables interactive visualization through custom layouts as well as perform interactions with drag and drop, zoom and click operations on the vertices and edges of the network. In addition, the package allows to interpret the force of causal relations between the vertices of the Bayesian Network analyzed.

This package originated from my Master's project in Mathematics, Statistics and Applied Computing to Industry at the Institute of Mathematical and Computer Sciences of the University of São Paulo - ICMC-USP, under the supervision of Prof. Dr. Alneu Andrade Lopes and co-supervision of Dr. Brett Drury.

Support for the structure learning algorithms below:


Constraint-based structure learning algorithms:


  • PC (the stable version);
  • Grow-Shrink (GS);
  • Incremental Association Markov Blanket (IAMB);
  • Fast Incremental Association (Fast-IAMB);
  • Interleaved Incremental Association (Inter-IAMB);
  • Max-Min Parents & Children (MMPC);
  • Semi-Interleaved Hiton-PC (SI-HITON-PC);

Score-based structure learning algorithms:


  • Hill Climbing (HC);
  • Tabu Search (Tabu);

Hybrid structure learning algorithms:


  • Max-Min Hill Climbing (MMHC);
  • General 2-Phase Restricted Maximization (RSMAX2);

Local discovery algorithms:


  • Chow-Liu;
  • ARACNE;

Installation

You can install the stable version of bnviewer from CRAN:
				  
install.packages("bnviewer")
				  
			  
bnviewer is available for developers, install from GitHub.
				
install.packages("devtools")
devtools::install_github("robson-fernandes/bnviewer")
				
			

How to Use

Import the bnlearn and bnviewer packages
			
library(bnlearn)
library(bnviewer)
			
		
Import the desired dataset and apply a structure learning algorithm. Example (Hill-Climbing (HC)).
				
data("alarm")
bn.learn.hc = hc(alarm)
				
			

How to use - Viewer function

Call the viewer function of the bnviewer package with the desired parameters.

				
viewer(bn.learn.hc,
	bayesianNetwork.width = "100%",
	bayesianNetwork.height = "80vh",
	bayesianNetwork.layout = "layout_with_sugiyama",
	bayesianNetwork.title="Discrete Bayesian Network - Alarm",
	bayesianNetwork.subtitle = "Monitoring of emergency care patients",
	bayesianNetwork.footer = "Fig. 1 - Layout with Sugiyama"
)
				
			
Example of Bayesian network visualization with custom nodes and grid layout.
			
viewer(bn.learn.hc,
	bayesianNetwork.width = "100%",
	bayesianNetwork.height = "80vh",
	bayesianNetwork.layout = "layout_on_grid",
	bayesianNetwork.title="Discrete Bayesian Network - Alarm",
	bayesianNetwork.subtitle = "Monitoring of emergency care patients",
	bayesianNetwork.footer = "Fig. 2 - Layout on grid",

	node.colors = list(background = "#f4bafd",
						border = "#2b7ce9",
						highlight = list(background = "#97c2fc",
										border = "#2b7ce9"))
	
)
			
		

How to use - Strength Viewer function

Example of Bayesian network visualization with strength viewer function.

			
bayesianNetwork.boot.strength = boot.strength(alarm, R = 20, algorithm = "hc")

avg.bayesianNetwork = averaged.network(bayesianNetwork.boot.strength, threshold = 0.2)

strength.viewer(
	avg.bayesianNetwork,
	bayesianNetwork.boot.strength,
	bayesianNetwork.background = "#282c34",
	bayesianNetwork.arc.strength.threshold.expression = c("@threshold > 0 & @threshold < 0.5",
								"@threshold >= 0.5 & @threshold <= 0.8",
								"@threshold > 0.8 & @threshold <= 1"),

	bayesianNetwork.arc.strength.threshold.expression.color  = c("red", "yellow", "blue"),
	bayesianNetwork.arc.strength.threshold.alternative.color =  "white",
	
	bayesianNetwork.arc.strength.label = TRUE,
	bayesianNetwork.arc.strength.label.prefix = "",
	bayesianNetwork.arc.strength.label.color = "white",
	
	bayesianNetwork.arc.strength.tooltip = TRUE,
	
	bayesianNetwork.edge.scale.min = 1,
	bayesianNetwork.edge.scale.max = 3,
	
	bayesianNetwork.edge.scale.label.min = 14,
	bayesianNetwork.edge.scale.label.max = 14,
	
	bayesianNetwork.width = "100%",
	bayesianNetwork.height = "800px",
	bayesianNetwork.layout = "layout_with_sugiyama",
	node.colors = list(background = "black",
						border = "#2b7ce9",
						highlight = list(background = "#e91eba",
										border = "#2b7ce9")),
	
	node.font = list(color = "white", face="Arial"),
	edges.dashes = FALSE
)
				
			
		

Documentation

{viewer} Function. Interactive Bayesian Network Viewer

Usage
				
viewer(bayesianNetwork, bayesianNetwork.title = "",
bayesianNetwork.subtitle = "", bayesianNetwork.footer = "",
bayesianNetwork.layout = "default", bayesianNetwork.width = "100%",
bayesianNetwork.height = "500px", node.shape = c("dot"),
node.label.prefix = "", node.colors = list(), edges.smooth = TRUE,
edges.dashes = FALSE, options.highlightNearest = TRUE,
options.nodesIdSelection = FALSE)
				
			
Arguments

bayesianNetwork

A Bayesian Network structure. (Example : hill-climbing (HC)).

bayesianNetwork.title

: String. Bayesian Network title

bayesianNetwork.subtitle

: String. Bayesian Network subtitle

bayesianNetwork.footer

: String. Bayesian Network footer

bayesianNetwork.layout

: String. A layout of a Bayesian Network

  1. layout_on_sphere

  2. layout_on_grid

  3. layout_in_circle

  4. layout_as_star

  5. layout_as_tree

  6. layout_with_sugiyama

  7. layout_with_kk

  8. layout_with_dh

  9. layout_with_lgl

  10. layout_with_mds

  11. layout_with_gem

  12. layout_nicely

  13. layout_components

bayesianNetwork.width

: String. Bayesian Network width

bayesianNetwork.height

: String. Bayesian Network height

node.shape

: String. A node shape of a Bayesian Network

  1. dot (default)

  2. circle

  3. ellipse

  4. database

  5. diamond

  6. square

  7. triangle

  8. box

  9. star

  10. text

node.label.prefix

: String. Adds a prefix to the node label

node.colors

: String | named list. Color for the node. Can be 'rgba(120,32,14,1)', '#97C2FC' (hexa notation on 7 char without transparency) or 'red'. Can be just one color, or a list with several elements:

  1. "background" : String. Default to '#97C2FC'. Background color for the node.

  2. "border" : String. Default to '#2B7CE9'. Border color for the node.

  3. "highlight" : String | named list, Color of the node when selected.

    1. "background" : String. Default to '#97C2FC'. Background color for the node when selected.

    2. "border" : String. Default to '#2B7CE9'. Border color for the node when selected.

edges.smooth

: Boolean. When true, the edge is drawn as a dynamic quadratic bezier curve.

edges.dashes

: Array or Boolean. Default to false. When true, the edge will be drawn as a dashed line.

options.highlightNearest

: Boolean. Default to true. Highlight nearest when clicking a node.

options.nodesIdSelection

: Boolean. Default to false. Add an id node selection creating an HTML select element.




{strength.viewer} Function. Interactive Bayesian Network Strength Viewer

Usage
				
strength.viewer(bayesianNetwork, bayesianNetwork.background = NULL,
bayesianNetwork.boot.strength = NULL,
bayesianNetwork.arc.strength.threshold.expression = NULL,
bayesianNetwork.arc.strength.threshold.expression.color = NULL,
bayesianNetwork.arc.strength.threshold.alternative.color = NULL,
bayesianNetwork.arc.strength.label = FALSE,
bayesianNetwork.arc.strength.label.prefix = "",
bayesianNetwork.arc.strength.label.color = NULL,
bayesianNetwork.arc.strength.tooltip = FALSE,
bayesianNetwork.edge.scale.min = 1,
bayesianNetwork.edge.scale.max = 5,
bayesianNetwork.edge.scale.label.min = 14,
bayesianNetwork.edge.scale.label.max = 14,
bayesianNetwork.title = "", bayesianNetwork.subtitle = "",
bayesianNetwork.footer = "", bayesianNetwork.layout = "default",
bayesianNetwork.width = "100%", bayesianNetwork.height = "500px",
node.shape = c("dot"), node.label.prefix = "",
node.colors = list(), node.font = list(), edges.smooth = TRUE,
edges.dashes = FALSE, edges.colors = list(),
options.highlightNearest = TRUE, options.nodesIdSelection = FALSE)
				
			
Arguments

bayesianNetwork

A Bayesian Network structure from Averaged Network

bayesianNetwork.background

Bayesian network background

bayesianNetwork.boot.strength

A nonparametric bootstrap to assess arc strength and direction

bayesianNetwork.arc.strength.threshold.expression

Logical expression of the force threshold of the arcs of the Bayesian network

bayesianNetwork.arc.strength.threshold.expression.color

Color applied to logical expression of the force threshold of the arcs of the Bayesian network

bayesianNetwork.arc.strength.threshold.alternative.color

Alternative color to logical expression of the force threshold of the arcs of the Bayesian network

bayesianNetwork.arc.strength.label

Enable Bayesian Network arc strength label

bayesianNetwork.arc.strength.label.prefix

Include Bayesian Network arc strength label prefix

bayesianNetwork.arc.strength.label.color

Set Bayesian Network arc strength label color

bayesianNetwork.arc.strength.tooltip

Enable Bayesian Network arc strength tooltip

bayesianNetwork.edge.scale.min

Set bayesian Network edge scale minimum

bayesianNetwork.edge.scale.max

Set bayesian Network edge scale maximum

bayesianNetwork.edge.scale.label.min

Set bayesian Network edge scale label minimum

bayesianNetwork.edge.scale.label.max

Set bayesian Network edge scale label maximum

bayesianNetwork.title

: String. Bayesian Network title

bayesianNetwork.subtitle

: String. Bayesian Network subtitle

bayesianNetwork.footer

: String. Bayesian Network footer

bayesianNetwork.layout

: String. A layout of a Bayesian Network

  1. layout_on_sphere

  2. layout_on_grid

  3. layout_in_circle

  4. layout_as_star

  5. layout_as_tree

  6. layout_with_sugiyama

  7. layout_with_kk

  8. layout_with_dh

  9. layout_with_lgl

  10. layout_with_mds

  11. layout_with_gem

  12. layout_nicely

  13. layout_components

bayesianNetwork.width

: String. Bayesian Network width

bayesianNetwork.height

: String. Bayesian Network height

node.shape

: String. A node shape of a Bayesian Network

  1. dot (default)

  2. circle

  3. ellipse

  4. database

  5. diamond

  6. square

  7. triangle

  8. box

  9. star

  10. text

node.label.prefix

: String. Adds a prefix to the node label

node.colors

: String | named list. Color for the node. Can be 'rgba(120,32,14,1)', '#97C2FC' (hexa notation on 7 char without transparency) or 'red'. Can be just one color, or a list with several elements:

  1. "background" : String. Default to '#97C2FC'. Background color for the node.

  2. "border" : String. Default to '#2B7CE9'. Border color for the node.

  3. "highlight" : String | named list, Color of the node when selected.

    1. "background" : String. Default to '#97C2FC'. Background color for the node when selected.

    2. "border" : String. Default to '#2B7CE9'. Border color for the node when selected.

node.font

Node Font : Array. Example list(color = "black", face="Arial")

edges.smooth

: Boolean. When true, the edge is drawn as a dynamic quadratic bezier curve.

edges.dashes

: Array or Boolean. Default to false. When true, the edge will be drawn as a dashed line.

edges.colors

: Named list or String. Default to named list. Color information of the edge in every situation. Can be 'rgba(120,32,14,1)', '#97C2FC' (hexa notation on 7 char without transparency) or 'red'.

  • "color" : String. Default to '#848484. The color of the edge when it is not selected or hovered over (assuming hover is enabled in the interaction module).

  • "highlight " : String. Default to '#848484'. The color the edge when it is selected.

  • "hover" : String. Default to '#848484'. The color the edge when the mouse hovers over it (assuming hover is enabled in the interaction module).

  • "inherit" : String or Boolean. Default to 'from'. When color, highlight or hover are defined, inherit is set to false! Supported options are: true, false, 'from','to','both'.

  • "opacity" : Number. Default to 1.0. It can be useful to set the opacity of an edge without manually changing all the colors. The allowed range of the opacity option is between 0 and 1.

options.highlightNearest

: Boolean. Default to true. Highlight nearest when clicking a node.

options.nodesIdSelection

: Boolean. Default to false. Add an id node selection creating an HTML select element.