This release fixes a large number of bugs found in a full code review. Several of them change numerical results for code that ran without errors before, hence the major version.
These change results without an error. Please re-check analyses that use them.
indirect_relations() ignores an edge attribute weight for all types except "weights" and warns
when it does so. Previously "dist_sp", "dist_resist" and "dist_lf" used weights silently, while all
other types ignored them (and with igraph >= 3.0 the adjacency-based types would have picked them up too,
giving meaningless values for "depend_curflow"). For weighted shortest path distances use
igraph::distances(g) directly, for the weighted adjacency matrix type = "weights".indirect_relations(type = "depend_rspn") counted every edge twice and omitted the 1/2 net flow factor.
Values are now 1/4 of the previous ones and, as documented, converge to "depend_curflow" for
rspxparam -> 0. Rankings are unaffected. Multiply by 4 to obtain the old values.indirect_relations(type = "depend_rsps") now match the documented definition
(expected number of visits on absorbing randomized shortest paths). Their row sums, the RSP
betweenness, and hence rankings are unchanged. The old entries were wrong and cannot be restored.walks_uptok() includes the j = 0 (identity) term, as documented. Use
FUN = function(x, ...) walks_uptok(x, ...) - 1 for the old behaviour.majorization_gap(norm = TRUE) on disconnected graphs divides the sum of the gaps of all components by
the total number of edges, so the value stays in [0, 1]. Previously the normalised gaps of the components
were added up.exact_rank_prob() and mcmc_rank_prob()
compute the expected ranks exactly (equivalent nodes are tied at the highest rank of their class, as for
linear orders). Previously a heuristic was used.mcmc_rank_prob() was biased (rejected moves were not counted as samples), so its estimates change.Other changes that may require changes to code:
P share one input validation: non-square input and NA are
errors, and a non-zero diagonal is set to 0 with a warning (previously crashes, NAs or silently wrong
results).indirect_relations() errors for relations that are only defined on connected graphs
("dist_resist", "depend_curflow", "dist_rwalk", "depend_exp", "depend_rsps", "depend_rspn",
and "depend_netflow" with netflowmode = "frac") instead of failing in LAPACK or returning NaNs.compare_ranks() and is_preserved() error on NA (compare_ranks() counted such pairs as ties).neighborhood_inclusion() simplifies graphs with loops or multiple edges with a warning (these gave a
wrong preorder).hyperbolic_index() and spectral_gap() reject directed graphs.plot_rank_intervals(). Use plot(rank_intervals(P)).indirect_relations(type = "depend_sp") overflowed on graphs with many shortest paths.positional_dominance(type = "two-mode") failed for matrices with column names and ignored benefit
and map; with map = FALSE non-square one-mode input read out of bounds.swan_combinatory() only removed k nodes (the number of repetitions)
instead of all nodes, and failed for k > n.majorization_gap() recycled vectors for disconnected graphs.transitive_reduction() returned an empty matrix for reflexive input.compare_ranks() overflowed for more than 65536 elements.mcmc_rank_prob() evaluated the default rp after collapsing structurally equivalent nodes and
silently did nothing for rp beyond the integer range.indirect_relations(type = "depend_exp") ignored edges with multiplicity > 1.hyperbolic_index() returned NaN for isolated nodes, spectral_gap() complex numbers for directed
graphs.index_builder(): fixed the generated code for "dist_walk" (used the log forest parameter) and
without pipes (ignored the network name), the alpha sliders (duplicated input ids) and presets resetting
the transformation.aggregate_positions(type = "self") failed on Matrix objects.Matrix input failed in approx_rank_expected(),
approx_rank_relative(), mcmc_rank_prob() and positional_dominance().par() on error and failed for a single index or more than 15 indices."depend_sp" (2000 nodes: 128s -> 0.8s), "dist_rwalk" (300 nodes: 3.2s -> 0.01s),
"depend_rspn" (~3x, far less memory), mcmc_rank_prob() (O(1) instead of O(n^2) per step),
neighborhood_inclusion() (2-4x), "depend_netflow" (half the maximum flows), swan_combinatory() and
swan_connectivity() (components instead of all shortest paths), vectorised "loof1"/"loof2".type/method arguments and input of threshold_graph(),
spectral_gap(), swan_*().get_rankings() returns the single ranking for linear orders.print.netrankr_interval() returns its input invisibly.index_builder() checks for all required packages."depend_exp", the behaviour of swan_efficiency() on disconnected
graphs and the handling of edge weights.attr argument deprecated in igraph 3.0.igraph graph versions #23data-rawhcl.colors due to backward compatibility for R <3.6 (#9)neighborhood_inclusion() can return a sparse matrix (Matrix package now imported)summary method for netrankr_full objectsas.matrix method for netrankr_full objects to extract probability distributionson.exit(par(op)) in plot functionsnetrankr_full objectsnetrankr_mcmc objectsnetrankr_interval objects to be more colorblind friendlynetrankr_full (result of exact_rank_prob()) with print and plot functions (#8)netrankr_interval (result of rank_intervals()) with print and plot functions (#8)netrankr_mcmc (result of mcmc_rank_prob()) with print and plot functions (#8)dbces11 graph (smallest graph with 5 different centers)plot_rank_intervals() is now deprecatedmajorization_gap() to unconnected graphsincomparable_pairs()index_builder which prevented the building of self defined indicestransitive_reduction()type = weights in indirect_relations()type = "identity" in indirect_relations() is now deprecated. Use type = "adjacency" instead.type = "weight" added to indirect_relations() to return the weighted adjacency matrixindirect_relations() and
exact_rank_prob().indirect_relations()indirect_relations()indirect_relations()require to library in examplestransitive_reduction()exact_rank_prob()browseVignettes("netrankr")plot_rank_intervals()initial builds, predominantely written in R.