Skip to contents

Higher-order network analysis in R.

A network is higher-order when a relation reaches beyond a single pair of nodes at a single moment — either it binds more than two nodes at once, or it depends on more than the current node. The literature (Battiston et al. 2020; Bianconi 2021) organises that idea into three structure families. hypergraphs implements all three behind one taxonomy, plus a text family that reads a corpus as a hypergraph.

Family A relation is… Built from
Memory networks a state plus the memory of how it was reached categorical sequences
Simplicial complexes a set of nodes that are all mutually related, plus every subset a network, a distance matrix, or a memory network
Hypergraphs an arbitrary set of nodes bound as a unit network cliques, sliding windows over sequences, group membership, or embedding neighbours
Text hypergraphs a document bound to the words it contains (or a word to its documents) a corpus: bag of words, token windows, or sentence embeddings

Base R, ggplot2 and Matrix (with RSpectra for the sparse spectral paths). No Python, no NLP dependencies; the neural tier needs torch, the sentence embeddings sbert, both optional.

Verbs

Memory networks

Verb Method Reference
hon() Higher-order network with rule extraction (BuildHON+) Xu, Wickramarathne & Chawla (2016)
honem() Higher-order network embedding Saebi, Ciampaglia, Kaplan & Chawla (2020)
hypa() Hypergeometric path anomaly detection LaRock et al. (2020)
mogen() Multi-order generative model Scholtes (2017)
hg_centrality() PageRank / betweenness / closeness on the higher-order topology, projected to states Scholtes, Wider & Garas (2016)
hg_bootstrap() Bootstrap CIs + rule support Efron & Tibshirani (1993)
hg_compare() Two-sample permutation comparison of rules Good (2005)
markov_order() Permutation-based Markov order test Anderson & Goodman (1957)
hg_markov_stability() Persistence, stationary flow and first-passage times per state Kemeny & Snell (1976)
memory() Per-context order-k vs order-1 KL diagnostic Cover & Thomas (2006)

Simplicial complexes

Verb Method Reference
simplicial() Clique, Vietoris-Rips, or pathway complex, verified against igraph’s cliques and Euler-Poincaré on construction Hatcher (2002)
hg_betti(), hg_euler() Homology ranks and the Euler characteristic Hatcher (2002)
hg_homology() Betti curves and persistence diagrams over a filtration Edelsbrunner & Harer (2010)
hg_landscape(), hg_bottleneck(), hg_wasserstein() Comparable summaries of persistence diagrams Bubenik (2015); Cohen-Steiner et al. (2007); Kerber et al. (2017)
hg_degree(), hg_qanalysis() Higher-order degree and q-connectivity Atkin (1974)

Hypergraphs

Verb Method Reference
network_hypergraph() Hyperedges from a network’s cliques Burgio et al. (2020)
window_hypergraph() Hyperedges from sliding windows over sequences Ding et al. (2020)
group_hypergraph() Hyperedges from bipartite group membership Perc et al. (2013)
hg_centrality() Tensor eigenvector centralities (clique, Z, H) and EDVW PageRank Benson (2019); Chitra & Raphael (2019)
hg_measures() Structural measures (hyperdegree, overlap, density) —
hg_laplacian(), hg_cluster(), hg_joint_cluster(), hg_classify() Weighted normalised Laplacian; RDC-Spec, RDC-SymNMF, J-NMF and JS-NMF clustering; label spreading Zhou, Huang & Schölkopf (2006); Hayashi et al. (2020)
hg_pagerank() EDVW PageRank with personalization, sparse-capable Chitra & Raphael (2019); Page et al. (1999)
knn_hypergraph(), dual_hypergraph() Embedding nearest-neighbour hyperedges; vertex/hyperedge role swap —
pairwise_network(), hg_line_graph() Projections: the pairwise network (clique, association or citation weighting) as a network object, and the s-line graph Coupette, Hartung & Katz (2024); Aksoy et al. (2020)
temporal_hypergraph(), hg_snapshot(), hg_snapshots() Interval and contact hypergraphs in a standard vocabulary (node/group or from/to, alias detection, calendar clocks, observation bounds); active and cumulative snapshots on a step/window grid Coupette, Hartung & Katz (2024)
hg_edges(), hg_edge_centrality() Hyperedge distributions and s-betweenness/s-closeness Coupette, Hartung & Katz (2024); Aksoy et al. (2020)
hg_motifs() Induced Y/T/O census and configuration-model null profile Coupette, Hartung & Katz (2024)
hg_communities(), hg_community_quality() Repeated Infomap, AMI-medoid selection, coverage/performance/modularity/conductance (on a memory network: the map equation for memory networks) Coupette, Hartung & Katz (2024); Rosvall et al. (2014)
hg_embed() Spectral or symmetric-NMF node coordinates Zhou et al. (2006); Hayashi et al. (2020)
hg_null_test() Degree-preserving swap and configuration-model nulls Chodrow (2020)
hg_neural(), text_hypergat(), heterogeneous_hgat(), hg_hypergcn(), hg_hnhn(), hg_allset() HGNN, HyperGAT, heterogeneous HGAT, HyperGCN, HNHN, AllDeepSets and AllSetTransformer in native torch Feng et al. (2019); Linmei et al. (2019); Yadati et al. (2019); Ding et al. (2020); Dong et al. (2020); Chien et al. (2022)

Text hypergraphs

Verb Method Reference
text_hypergraph() Corpus to weighted document-word hypergraph: bag of words with smoothed tf-idf, token windows, or embedding kNN Hayashi et al. (2020); Ding et al. (2020); Manning, Raghavan & Schütze (2008)
hg_measures(), hg_centrality() Structural measures and tensor centralities as tidy tables Benson (2019)
hg_cluster(), hg_keywords() Spectral or symmetric-NMF topic clustering and per-cluster keywords Zhou, Huang & Schölkopf (2006); Hayashi et al. (2020)
hg_stability(), hg_agreement(), hg_seeds() Subsampling cluster stability (per-cluster Jaccard) with the eigengap, partition agreement (ARI/AMI/NMI), seed selection Hennig (2007); von Luxburg (2007); Hubert & Arabie (1985); Vinh et al. (2010)
hg_topic_quality() Topic coherence (UMass, NPMI) and FREX exclusivity, as in stm; scores external topic word lists too Mimno et al. (2011); Lau, Newman & Baldwin (2014); Roberts, Stewart & Tingley (2019)
hg_cocluster() Spectral co-clustering of documents and words together Dhillon (2001)
hg_classify() Few-label transductive classification, with class-mass normalization Zhou et al. (2006); Zhu, Ghahramani & Lafferty (2003)

A text_hypergraph is a net_hg, so every hypergraph verb takes it. Constructors are nouns (hon(), mogen(), simplicial(), <source>_hypergraph()); every other verb is hg_*(). Bundled data: covid_abstracts (165 abstracts) and covid_embeddings.

The taxonomy

The same naming rules hold in every family, so a verb from one reads like a verb from another:

hg_get(net)                                # the rules of a memory network
hg_get(net, what = "nodes")                # its higher-order nodes
hg_get(net, what = "pathways")             # its higher-order pathways
hg_get(mg,  what = "paths", k = 3)         # path counts of a MOGen model
hg_get(ph,  what = "betti")                # Betti curves, not the diagram
hg_get(hg,  what = "memberships")          # one row per node in a hyperedge

Every sequence-taking verb reads a long event table (action =, actor =, time =, session =), a wide data frame, a list of sequences, or a network model object carrying its sequences.

Crossing between families

The families are entry points into one another, not islands. The same coded sessions can be read all three ways:

library(hypergraphs)

# memory network: what follows what, given how you got here
net <- hon(human_long, action = "code", actor = "session_id",
           time = "timestamp", max_order = 3)
hg_centrality(net, sort_by = "pagerank")

# simplicial complex: the same sessions as a pathway complex
sc <- simplicial(net, type = "pathway")
hg_betti(sc)

# hypergraph: each session as one multi-way interaction over its codes
hg <- group_hypergraph(human_long, node = "code", hyperedge = "session_id")
hg_centrality(hg, type = "pagerank")

# text: a corpus as a document-word hypergraph, clustered into topics
thg <- text_hypergraph(covid_abstracts, column = "abstract", id = "doc",
                       weight = "tfidf", stop_words = stop_words_en(),
                       min_count = 3L)
topics <- hg_cluster(thg, k = 4, type = "random_walk", seed = 1)
hg_keywords(thg, topics, n = 5, collapse = TRUE)                    # tf-idf mass
hg_keywords(thg, topics, n = 5, type = "ctfidf", collapse = TRUE)  # BERTopic's c-TF-IDF
hg_keywords(thg, topics, n = 5, type = "centrality", collapse = TRUE)

pairwise_network() projects a hypergraph back to a pairwise network that any first-order tool accepts; hg_get(net, what = "pathways") hands sequence-derived path strings from the memory family to the other two.

Bundled data: human_long, ai_long (coded human-AI pair-programming sessions); covid_abstracts, covid_embeddings (COVID-19 education research abstracts and their sentence embeddings).

Vignettes

The package ships one vignette, vignette("hypergraphs"). The other walkthroughs are articles on the package website: hypergraph analysis of a text corpus, the constructions of a text hypergraph, document classification, the topic structure and mixed-membership topics of the COVID-19 education literature, legal hypergraphs, the Argentina tribunals example and the benchmarks.

Provenance

hypergraphs is the home package for higher-order structure in its family of network packages, alongside psychnets (cross-sectional psychometric networks) and idiographic (person-specific temporal models). The memory-network and simplicial-complex estimators are imported from a sibling estimation package and returned unchanged under hypergraphs’ names, so every number is that estimator’s own; identity is proven by exact identical() tests. The text family arrived in 0.3.0 (2026-09-01) from the retired texthypergraph package. See NEWS.md for every rename.

The inherited external-equivalence suites (pyHON, pathpy multi-order models, Wallenius / Monte-Carlo HYPA references, igraph, HyperNetX) live in local_testing_and_equivalence/, which is build-ignored and gated:

NOT_CRAN=true HYPERNETS_EQUIV_TESTS=true Rscript -e \
  'library(hypergraphs); testthat::test_dir("local_testing_and_equivalence")'

Installation

# from CRAN
install.packages("hypergraphs")

# development version, from r-universe
install.packages("hypergraphs",
                 repos = c("https://mohsaqr.r-universe.dev", "https://cloud.r-project.org"))

References

Battiston, F., Cencetti, G., Iacopini, I., Latora, V., Lucas, M., Patania, A., Young, J.-G., & Petri, G. (2020). Networks beyond pairwise interactions: Structure and dynamics. Physics Reports, 874, 1-92.

Bianconi, G. (2021). Higher-Order Networks. Cambridge University Press.