| Title: | Graph Prediction from a Graph Time Series |
|---|---|
| Description: | Predicting the structure of a graph including new nodes and edges using a time series of graphs. Flux balance analysis, a linear and integer programming technique used in biochemistry is used with time series prediction methods to predict the graph structure at a future time point Kandanaarachchi (2025) <doi:10.48550/arXiv.2507.05806>. |
| Authors: | Sevvandi Kandanaarachchi [aut, cre] (ORCID: <https://orcid.org/0000-0002-0337-0395>), Stefan Westerlund [aut] |
| Maintainer: | Sevvandi Kandanaarachchi <[email protected]> |
| License: | GPL (>= 3) |
| Version: | 0.1.3 |
| Built: | 2026-05-22 07:57:01 UTC |
| Source: | https://github.com/sevvandi/netseer |
Generates a bigger graph using parameters for node and edge growth. If a sequence of graphs are created, the number of nodes in this sequence would exponentially increase.
generate_graph_exp( gr = NULL, del_edge = 0.1, new_nodes = 0.1, edge_increase = 0.1 )generate_graph_exp( gr = NULL, del_edge = 0.1, new_nodes = 0.1, edge_increase = 0.1 )
gr |
The input graph to generate the next graph. If set to |
del_edge |
The proportion of edges deleted from the input graph. Default
set to |
new_nodes |
The proportion of nodes added to the input graph. Default
set to |
edge_increase |
The proportion of edges added to the input graph. Default
set to |
A graph.
set.seed(1) gr <- generate_graph_exp() grset.seed(1) gr <- generate_graph_exp() gr
Generates a bigger graph using parameters for node and edge growth. If a sequence of graphs are created, the number of nodes would linearly increase.
generate_graph_linear( gr = NULL, del_edge = 1, new_nodes = 1, edge_increase = 1, edges_per_new_node = 3 )generate_graph_linear( gr = NULL, del_edge = 1, new_nodes = 1, edge_increase = 1, edges_per_new_node = 3 )
gr |
The input graph to generate the next graph. If set to |
del_edge |
The number of edges deleted from the input graph. Default
set to |
new_nodes |
The number of nodes added to the input graph. Default
set to |
edge_increase |
The number of edges added to the input graph. Default
set to |
edges_per_new_node |
The number of edges added to the new nodes. Default
set to |
A graph.
set.seed(1) gr <- generate_graph_linear() grset.seed(1) gr <- generate_graph_linear() gr
This function loads graphs from the file system into the R environment. There are two loading options: Loading all files from a directory. Loading individual graphs.
load_graphs(use_directory = NULL, use_list = NULL, format)load_graphs(use_directory = NULL, use_list = NULL, format)
use_directory |
The absolute path to a directory that contains graph files to load. |
use_list |
A list of absolute paths to individual graph files to load. |
format |
Formats supported by |
A list of graphs in igraph format.
## Not run: graph_dir_list <- list() path1 <- normalizePath("graph1.gml") path2 <- normalizePath("graph2.gml") graph_dir <- append(graph_dir_list, path1 ) graph_dir <- append(graph_dir_list, path2 ) grlist <- read_graph_list(graph_dir_list, "gml") grlist ## End(Not run)## Not run: graph_dir_list <- list() path1 <- normalizePath("graph1.gml") path2 <- normalizePath("graph2.gml") graph_dir <- append(graph_dir_list, path1 ) graph_dir <- append(graph_dir_list, path2 ) grlist <- read_graph_list(graph_dir_list, "gml") grlist ## End(Not run)
This function compares the predicted graph with the actual and comptues the node and edge error as a proportion
measure_error(actual, predicted)measure_error(actual, predicted)
actual |
The ground truth or actual graph. |
predicted |
The predicted graph. |
The node error and edge error as a proportion.
data(syngraphs) # Taking the 20th graph as the actual and the 19th graph as predicted. measure_error(syngraphs[[20]], syngraphs[[19]])data(syngraphs) # Taking the 20th graph as the actual and the 19th graph as predicted. measure_error(syngraphs[[20]], syngraphs[[19]])
This function predicts the graph at a future time step using a time series of graphs.
predict_graph( graphlist, formulation = 2, conf_level1 = NULL, conf_level2 = 90, dense_opt = 2, weights_opt = 8, weights_param = 0.001, h = 1 )predict_graph( graphlist, formulation = 2, conf_level1 = NULL, conf_level2 = 90, dense_opt = 2, weights_opt = 8, weights_param = 0.001, h = 1 )
graphlist |
A list of graphs in igraph format. |
formulation |
Formulation 2 includes an additional condition constraining total
edges by the predicted value. Formulation 1 does not have that constraint. Formulation 2
gives more realistic graphs due to that constraint. Default is set to |
conf_level1 |
A value between 50 and 100 denoting the confidence interval
for the number of predicted nodes in the graph. If set to |
conf_level2 |
The upper confidence bound for the degree distribution. Default
set to |
dense_opt |
If set to |
weights_opt |
Weights option ranging from 1 to 6 used for different edge weight
schemes. Weights option 1 uses uniform weights for all edges. Option 2 uses binary
weights. If the edge existed in a past graph, then weight is set to 1. Else set to
0. All possible new edges are assigned weight 1. Option 3 is a more selective
version. Option 4 uses proportional weights according to the history. Option 5 uses
proportional weights, but as the network is more in the past, it gives less weight.
Option 5 uses linearly decaying proportional weights. Option 6 uses harmonically decaying
weights. That is the network at |
weights_param |
The weight given for possible edges from new vertices. Default
set to |
h |
The prediction time step. Default is |
A list of predicted graphs. If conf_level1 is not NULL, then
3 graphs are returned one with the mean number of predicted nodes and the other 2
with the number of nodes equal to the lower and upper bound values of prediction.
If If conf_level1 is NULL, only the mean predicted graph is returned.
set.seed(2024) edge_increase_val <- new_nodes_val <- del_edge_val <- 0.1 graphlist <- list() graphlist[[1]] <- gr <- igraph::sample_pa(5, directed = FALSE) for(i in 2:15){ gr <- generate_graph_exp(gr, del_edge = del_edge_val, new_nodes = new_nodes_val, edge_increase = edge_increase_val ) graphlist[[i]] <- gr } grpred <- predict_graph(graphlist[1:15], conf_level2 = 90, weights_opt = 6) grpredset.seed(2024) edge_increase_val <- new_nodes_val <- del_edge_val <- 0.1 graphlist <- list() graphlist[[1]] <- gr <- igraph::sample_pa(5, directed = FALSE) for(i in 2:15){ gr <- generate_graph_exp(gr, del_edge = del_edge_val, new_nodes = new_nodes_val, edge_increase = edge_increase_val ) graphlist[[i]] <- gr } grpred <- predict_graph(graphlist[1:15], conf_level2 = 90, weights_opt = 6) grpred
This function saves a single graph or list of graphs to a specified location on the file system in a specified format.
save_graphs(graph, file_path, filetype = ".gml", format)save_graphs(graph, file_path, filetype = ".gml", format)
graph |
Either a single igraph graph, or a list of igraph graphs. |
file_path |
The Absolute path to save the graph/s to. |
filetype |
The filetype extension to append to the graph file name, e.g. ".gml" |
format |
Formats supported by |
A list of graphs in igraph format.
## Not run: library(igraph) sample_graph <- igraph::graph_from_literal(A-B, B-C) path <- "/path/to/save/to/" save_graphs(sample_graph, path, ".gml", "gml") ## End(Not run)## Not run: library(igraph) sample_graph <- igraph::graph_from_literal(A-B, B-C) path <- "/path/to/save/to/" save_graphs(sample_graph, path, ".gml", "gml") ## End(Not run)
This dataset contains a list of synthetic igraph objects
syngraphssyngraphs
A list of 20 igraph graphs
data(syngraphs) syngraphs[[1]]data(syngraphs) syngraphs[[1]]