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.