Skip to contents

Extracts one selected graph summary from two graph-like objects and computes a divergence between the resulting probability mass functions.

Currently the supported divergence is Jensen-Shannon divergence, implemented via jensen.shannon.divergence().

Usage

graph.summary.divergence(
  graph1,
  graph2,
  summary = c("degree_distribution", "edge_weight_distribution",
    "component_size_distribution", "neighborhood_label_distribution"),
  divergence = c("js"),
  labels = NULL,
  summary.args = list(),
  support = NULL,
  return.details = TRUE
)

Arguments

graph1

First dgraph object.

graph2

Second dgraph object.

summary

Summary type to compare.

divergence

Divergence type. Currently only "js".

labels

Optional shared vertex-label vector used for "neighborhood_label_distribution".

summary.args

Optional named list forwarded to compute.graph.summary.pmf().

support

Optional common support. If NULL, the union of the two PMF supports is used.

return.details

Logical; if TRUE, return a structured list.

Value

If return.details = TRUE, a list with fields:

  • summary: summary type used.

  • divergence: divergence type used.

  • value: scalar divergence value.

  • pmf1: aligned PMF for g1.

  • pmf2: aligned PMF for g2.

  • support: aligned support.

  • metadata: summary-specific metadata for both graphs.

Otherwise, returns the scalar divergence value.

Examples

path <- dgraph(list(2L, c(1L, 3L), 2L))
triangle <- dgraph(list(c(2L, 3L), c(1L, 3L), c(1L, 2L)))
graph.summary.divergence(
  path,
  triangle,
  summary = "degree_distribution"
)
#> $summary
#> [1] "degree_distribution"
#> 
#> $divergence
#> [1] "js"
#> 
#> $value
#> [1] 0.4591479
#> 
#> $pmf1
#>         1         2 
#> 0.6666667 0.3333333 
#> 
#> $pmf2
#> 1 2 
#> 0 1 
#> 
#> $support
#> [1] "1" "2"
#> 
#> $metadata
#> $metadata$graph1
#> $metadata$graph1$n.vertices
#> [1] 3
#> 
#> $metadata$graph1$n.edges
#> [1] 2
#> 
#> $metadata$graph1$directed
#> [1] FALSE
#> 
#> $metadata$graph1$simplify.multiple
#> [1] TRUE
#> 
#> 
#> $metadata$graph2
#> $metadata$graph2$n.vertices
#> [1] 3
#> 
#> $metadata$graph2$n.edges
#> [1] 3
#> 
#> $metadata$graph2$directed
#> [1] FALSE
#> 
#> $metadata$graph2$simplify.multiple
#> [1] TRUE
#> 
#> 
#>