Type: Package
Title: Optimal Graph Partition using the Persistence
Version: 0.1.0
Description: Calculate the optimal vertex partition of a graph using the persistence as objective function. These subroutines have been used in Avellone et al. <doi:10.1007/s10288-023-00559-z>.
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Encoding: UTF-8
SystemRequirements: C++20
Suggests: igraph
RoxygenNote: 7.3.2
NeedsCompilation: yes
Collate: 'persistence-exports.R' 'cluster_milano.R' 'global_persistence.R' 'local_persistence.R'
Packaged: 2025-05-17 08:08:47 UTC; ale
Author: Alessandro Avellone [aut, cre], Paolo Bartesaghi [aut], Stefano Benati [aut], Rosanna Grassi [aut]
Maintainer: Alessandro Avellone <alessandro.avellone@unimib.it>
Repository: CRAN
Date/Publication: 2025-05-21 08:30:02 UTC

Persistence

Description

Given a non-oriented graph, calculates the optimal vertex partition using the persistence as the objective function.

Details

See manual entries.

Author(s)

Maintainer: Alessandro Avellone alessandro.avellone@unimib.it

Authors:


cluster Milano

Description

Calculates the partition with maximum global null-adjuted persistence.

Usage

cluster_milano(vertex, edge_list, seed = NULL)

Arguments

vertex

the vertices of the graph, whose label are integers and they must be consistent with the edge sets.

edge_list

the graph edge list in the form of an integer matrix with two columns.

seed

As some steps of the algorithm are random, users may experiments with different seeds of random numbers.

Value

A list containing:

membeship

The optimal vertex partition.

value

The null-adjusted persistence of the partition.

seed

The used seed to generate random numbers.

Examples

library(persistence)
library(igraph)

edg = c(1, 2, 1, 3, 1, 4, 2, 3, 3, 4, 4, 5, 5, 6, 5, 7, 5, 8, 5, 9, 6, 7, 6, 8, 7, 9, 8, 9)
print(length(edg) / 2.0)
vertex = unique(edg)
edg = t(matrix(as.integer(edg), nrow = 2 ))
rete <- graph_from_edgelist(edg, directed = FALSE)
plot(rete)
seed <- sample(1:as.integer(.Machine$integer.max),1, replace= FALSE)
r = cluster_milano(vertex, edg, seed=seed)
print(paste("The optimal null-adjusted persistence is: ", r$measure))
print(paste("The optimal persistence probability is: ", r$measure + 1))



global persistence

Description

Given a partition of the graph vertices, it calculates the global persistence as the sum of the persistences of the single clusters. Persistence can be referred to the null-adjusted o to the probability.

Usage

global_persistence(vertex, edge_list, membership, H0 = TRUE)

Arguments

vertex

the vertices of the graph, whose label are integers and they must be consistent with the edge sets.

edge_list

the graph edge list in the form of an integer matrix with two columns.

membership

An integer vector representing the vertex membership: x_i = k if i in C_k.

H0

If true, it calculates the null-adjusted persistence, if false, the persistence probability.

Value

value A list containing the following:

value

The global persistence of the partition.

clusters_value

The local persistence of each cluster. If for some k we have v_k = NaN, then C_k is empty in the input membership.

Examples

library(persistence)
library(igraph)

edg = c(1, 2, 1, 3, 1, 4, 2, 3, 3, 4, 4, 5, 5, 6, 5, 7, 5, 8, 5, 9, 6, 7, 6, 8, 7, 9, 8, 9)
print(length(edg) / 2.0)
vertex = unique(edg)
edg = t(matrix(as.integer(edg), nrow = 2 ))
rete <- graph_from_edgelist(edg, directed = FALSE) # I graph this matrix
plot(rete)

membership = c(1, 1, 1, 1, 2, 2, 2, 2, 2)
v1 = global_persistence(vertex, edg, membership, H0=TRUE)
print(paste("global null-adjusted persistence: ", v1$value))
print(paste("null-adjusted persistence per cluster: ", v1$clusters_value))

local_persistence

Description

Given the incidence vector of a vertex subset, it calculates the persistence probability or the null-adjusted persistence of C.

Usage

local_persistence(vertex, edge_list, cluster, H0 = TRUE)

Arguments

vertex

the vertices of the graph, whose label are integers and they must be consistent with the edge sets

edge_list

the graph edge list in the form of an integer matrix with two columns

cluster

A binary vector representing the incidence vector of the cluster: x_i = 1 if i in C, 0 otherwise.

H0

if true, it calculates the null-adjusted persistence, if false, the persistence probability.

Value

the value of the null-adjusted persistence if H0 = T, the value of the persistence probability if H0 = F

Examples

#' library(persistence)
library(igraph)

edg = c(1, 2, 1, 3, 1, 4, 2, 3, 3, 4, 4, 5, 5, 6, 5, 7, 5, 8, 5, 9, 6, 7, 6, 8, 7, 9, 8, 9)
print(length(edg) / 2.0)
vertex = unique(edg)
edg = t(matrix(as.integer(edg), nrow = 2 ))
rete <- graph_from_edgelist(edg, directed = FALSE) # I graph this matrix
plot(rete)

cluster = rep(0, length(vertex))
v1 = c(1, 2, 3, 4)
cluster[v1] = 1
f1 = local_persistence(vertex, edg, cluster, H0 = TRUE)
f2 = local_persistence(vertex, edg, cluster, H0 = FALSE)