2024-09-04
test_permutation()
now uses
manynet::to_permuted()
instead of the older
manynet::generate_permutation()
syntax2024-07-19
{tidyr}
, see
below)network_reg()
renamed to net_regression()
for consistency{tidyr}
dependency for pivoting longer and wider2024-07-18
.data
and
.graph_context
{manynet}
{manynet}
> v1.0.0 for more detailstest_distribution()
to test whether two
vectors/distributions are from the same distributiontest_gof()
renamed to test_fit()
to
improve readability
test_fit()
no longer measures fit against steps where
there is no covariancetest_random()
where parameters were passed
to manynet::generate_random()
instead of the original
object, which is processed more intuitively within
manynet::generate_random()
(thanks @RWKrause)test_random()
returns results on
edge-conditioned uniform graphs, not sizeggplot2::scale_y_discrete()
network_reg()
now ignores
absent ego terms for undirected networks2024-03-07
2024-03-06
node_brokering_activity()
and
node_brokering_exclusivity()
from Hamilton et al
(2020)node_degree()
now returns strength centrality (alpha =
1) for weighted networks by defaultnode_redundancy()
now works for weighted onemode and
twomode networks (closed #292)
node_effsize()
now works for weighted onemode and
twomode networks
network_equivalency()
now normalises weighted twomode
networks (closed #291)node_brokering()
for identifying brokering roles
from brokering activity and exclusivitynode_roulette()
now optimises group diversity based on
historical interactions (Lai and Hao 2016)
2024-01-25
network_scalefree()
to work even when P scores
are not availablenode_fluid()
to work with different versions of
{igraph}
2024-01-24
over_*()
now reverts future plan on exitnode_brokerage_census()
and
network_brokerage_census()
now treat two-mode networks
correctly (closed #35)test_random()
now reverts future plan on exittest_permutation()
now reverts future plan on exitnetwork_reg()
now reverts future plan on exit2024-01-24
{manynet}
network_change()
to measure the Hamming distance
between two or more networksnetwork_stability()
to measure the Jaccard index
between two or more networksnetwork_spatial()
to measure spatial association
(Moran’s I, closes #209)node_deg()
for a non-normalised version of
node_degree()
node_degree()
now normalises strength centralitynode_induced()
to measure nodes’ induced
betweenness centralitiesnode_flow()
to measure nodes’ flow betweenness
centralities (closes #195)node_information()
to measure nodes’ information
or current-flow closeness centralities (closes #194)node_multidegree()
to measure the ratio of one
type of tie in a multiplex network to anothernode_posneg()
measures the PN centrality of
signed networksnode_tie_census()
and
node_triad_census()
work with the new multiplex format in
{manynet}
(which relies on a “type” tie attribute rather
than multiple tie attributes)
node_structural_equivalence()
and
node_regular_equivalence()
node_fluid()
community detection algorithmnode_roulette()
for identifying groups of nodes
that haven’t interacted beforeplay_*()
functions to {manynet}
,
including as_diffusion()
and the diffusion tutorialnetwork_reg()
so that
specifications that include a ‘sim’ or ‘same’ effect for a variable are
encouraged to also include more elementary ‘ego’ and ‘alter’
effectsnetwork_reg()
now ignores the LHS of the formula for
uniplex networks2023-12-17
node_adoption_time()
2023-12-17
node_is_infected()
to identify infected nodes at
given timenode_is_latent()
to identify infected nodes at
given timenode_is_recovered()
to identify infected nodes at
given timenode_is_fold()
for identifying nodes that are
occupying structural foldsis_*()
functions from migraph to avoid
unnecessary conflicts with manynet at startupnetwork_hazard()
for calculating the hazard rate
for each time point of a diff_model objectnode_adoption_time()
now works with incomplete
diffusions
node_exposure()
now uses
node_is_infected()
for more flexibilitynode_thresholds()
now works with incomplete diffusions
node_adopter()
now correctly identifies
non-adoptersplay_diffusion()
node_is_exposed()
and
node_exposure()
internallyplay_diffusion()
2023-12-13
node_is_exposed()
function to mark nodes
(logical) that are currently exposed to diffusion content in a
network.network_reproduction()
function that
calculates the R-nought value.network_immunity()
function to calculate the Herd
Immunity Threshold for the network.node_exposure()
function to calculate the number
of infected/adopting nodes to which each susceptible node is
exposed.node_*()
and network_*()
measures.as_diffusion()
function to convert a diffusion
event table into a diff_model
object.test_gof()
function for testing goodness-of-fit
in diffusion models.autographs()
and
autographd()
for diff_model
objects.2023-12-06
node_thresholds()
so that it infers nodes’
thresholds from the amount of exposure they had when they became
infected or exposed.node_adoption_time()
and
node_adopter()
to return node_member
and
node_measure
objects, which makes printing and summarising
better.node_member
class.node_member
class.diff_model
object to carry original network
data for plotting.play_diffusion()
to forward exposure/contact
information to the events table.autographs()
and autographd()
.2023-11-15
node_is_mentor()
for indicating nodes with high
indegree.play_segregation()
to
sample randomly from those unoccupied options less than the desired
threshold.2023-11-08
network_transmissability()
,
node_infection_length()
,
network_infection_length()
,
network_reproduction()
, node_adoption_time()
,
node_adopter()
, node_thresholds()
.play_diffusion()
.autographs()
and elaboration for
tutorial 7.2023-11-02
summary.node_member()
node_census()
2023-11-01
print.node_mark()
and print.tie_mark()
now
allow infinite ‘n’ widthprint.node_measure()
and
print.tie_measure()
now allow infinite ‘n’ width
print.node_member()
now prints the vector
summary.node_member()
2023-10-25
network_richclub()
to return a network’s
rich-club coefficient (closed #223)node_core()
now offers eigenvector centrality-based
rank selection in addition to degree-centrality
method = "eigenvector"
network_connectedness()
network_efficiency()
network_upperbound()
node_eccentricity()
, which wraps
igraph::eccentricity()
node_neighbours_degree()
, which wraps
igraph::knn()
tie_cohesion()
to measure how embedded ties
arenode_louvain()
community detection algorithmnode_leiden()
community detection algorithm
2023-10-18
purl = FALSE
argument2023-10-11
plot.node_measure()
node_optimal()
, node_infomap()
,
node_spinglass()
, and node_leading_eigen()
to
extend the community detection options available in the packagenode_outdegree()
, node_indegree()
,
network_outdegee()
, and network_indegree()
wrappersnetwork_reach()
node_harmonic()
and
network_harmonic()
node_pagerank()
plot.node_measure()
now returns a single plot for
one-mode networks with a frequency histogram and a density overlaynode_closeness()
and
node_betweenness()
in preparation for an
{igraph}
deprecation (merci @maelle)test_random()
and
test_permutation()
rely on graph dimensions rather than
graph order (thank you finding this @rabenton){manynet}
create_*()
and generate_*()
functions
are now in {manynet}
read_*()
and write_*()
functions are
now in {manynet}
as_*()
and to_*()
functions are now in
{manynet}
is_*()
functions are now in
{manynet}
add_*()
and join_*()
functions are now
in {manynet}
network_nodes()
, node_names()
, and
tie_weights()
, are now in {manynet}
autograph*()
functions are now in
{manynet}
{manynet}
is now a Depends, but many dependencies
removed or moved to {manynet}
.data
as their first
argument; previously it was object
{manynet}
over_time()
and over_waves()
to
measure (potentially parallelised) over split graphs
network_measures
objectnode_alpha()
for calculating alpha centrality,
mostly just a wrapper for igraph::alpha_centrality()
node_power()
for calculating beta or Bonacich
centrality, mostly just a wrapper for
igraph::power_centrality()
, though also correctly accounts
for two-mode networksnode_homophily()
to
node_heterophily()
, which is more accurate and in line with
the scale’s direction
node_heterophily()
now calculates EI indices in a
faster, vectorised form, instead of the older, slower solution that
calculated network_homophily()
over all ego networksnetwork_homophily()
to
network_heterophily()
network_heterophily()
now ignores missing valuesnetwork_congruency()
is now more explicit about its
data expectationsk_strict()
, k_elbow()
and
k_silhouette()
are now exported and documentedplay_segregation()
for playing Schelling
segregation models with various parametersdiff_model
and diffs_model
plotting irregularitiescluster_concor()
ison_
data to {manynet}
read_matrix()
for importing CSVs of
adjacency/incidence matricesread_dynetml()
for importing DynetML .xml files
(closed #261)as_tidygraph()
for merging
nodelists and edgelists
as_siena()
read_pajek()
where multiple networks/ties
were causing an issue for partition assignmentplay_diffusion()
relating to latency
inversionis_aperiodic()
for testing whether a network is
aperiodic (the greatest common divisor for all cycles in the network is
1)
node_is_max()
and node_is_min()
now take a
“rank” argument for selecting more than the first ranked maxima or
minimato_components()
to return the components of a
network as a list of networksto_egos()
to return the ego networks of a network
as a list of networksto_subgraphs()
to return attribute-based
subgraphs as a list of networksnetwork_richness()
and
node_richness()
for calculating the richness (a common
diversity measure) of an attribute in a networkplay_diffusion()
to include more compartment
and transition options
play_diffusions()
for running a diffusion model
multiple times
{furrr}
and so a multicore
or multisession strategy can be used for parallelisation (but this only
makes sense for many simulations)play_learning()
for running a DeGroot learning
model
network_reg()
now declares the reference category for
nominal variablesautographs()
for autoplotting lists of
networksmutate()
now works with igraph objectsnode_is_random()
for selecting n nodes at
randomplay_diffusion()
model
generate_random()
to_mode1()
and to_mode2()
)to_redirected.igraph()
where routing
through an edgelist caused problemsnetwork_scalefree()
for returning power law
alpha/exponent
ison_lotr
dataset for examples using interactions
among Lord of the Rings characters in the booksnode_brokerage_census()
and
network_brokerage_census()
for counting Gould-Fernandez
brokerage rolescreate_lattice()
now conforms to other
create_*()
functions in how it interprets "n"
"n"
for a one-mode network, it will
create a transitive lattice of as even dimensions as possibleis_eulerian()
for a logical expression of whether
the network has an Eulerian pathnetwork_smallworld()
now takes a method argument for
different ways of calculating a small-world coefficient
node_diversity()
for calculating heterogeneity
among each nodes’ ego networknode_homophily()
for calculating homophilous ties
among each nodes’ ego networknode_reciprocity()
for calculating each node’s
reciprocitynode_transitivity()
for calculating each node’s
transitivity/clusteringnode_walktrap()
node_edge_betweenness()
node_fast_greedy()
to_twomode()
now returns an undirected networkto_anti()
for obtaining the complement of the
given network
{igraph}
, this
respects two-mode constructionsis_perfect_matching()
for a logical expression of
whether the maximum matching of a network is also perfectnode_is_core()
for a logical vector of which
nodes are members of the corenode_degree()
now has an additional parameter for
trading off between degree and strength in the case of weighted
networksnode_power()
for Bonacich power centrality for
both one- and two-mode networks (closed #193)autographr()
tests to work with new version of
{ggraph}
(closed #247, thanks @henriquesposito)graph_*()
functions now renamed to
network_*()
for terminological consistencyp2visualization
vignette
{patchwork}
functionalitygraph_blau_index()
to
graph_diversity()
graph_ei_index()
to
graph_homophily()
autographr()
’s “node_group”
argumentas_graphAM()
methods for all migraph-consistent
object classes so {Rgraphviz}
can be used effectivelyas_igraph()
, as_tidygraph()
, and
as_network()
methods for {RSiena}
sienaData
objects (thanks @JaelTan, closed #94)as_edgelist()
and as_matrix()
methods for network.goldfish
class objects"twomode"
argument in as_matrix()
is
now NULL
by default, allowing both one-mode and two-mode
coercionto_mode1()
and to_mode2()
now take an
extra argument to produce weighted projections by different “similarity”
measures
to_matching()
methods to transform a two-mode
network or network with some other (binary) “mark” attribute into a
network of matching tiesto_main_component()
to to_giant()
to be more space efficient
to_blocks()
(closed
#242)
to_blocks()
where NA blocks couldn’t be
subsequently coercedto_blocks()
, to_subgraph()
, and
to_ties()
are now S3 methods, returning objects of the same
class as givento_onemode()
method for matricesto_twomode()
methods for igraph, tidygraph, and
networkto_named()
,
to_redirected()
, to_uniplex()
, and
to_unsigned()
to_undirected()
and
to_uniplex()
to_uniplex()
to_unweighted()
didn’t respect the
“threshold” specifiednode_mode()
couldn’t
produce a “mark” class objectis_twomode()
where labelling information
was being ignoredgraph_core()
now runs node_core()
(see
below) if no “membership” vector is providednode_core()
for partitioning nodes into core and
periphery membershipsk_strict()
network_reg()
network_reg()
autographr()
to improve future debugging
and developmentautographr()
now rotates labels for partitioning
layouts, including “concentric”, so that they are readable and overlap
lessgglineage()
to use “alluvial” layout and better
position nodes on the x-axismpn_cow_igo
now includes “polity2” scoresison_
and
mpn_
data documentation (closed #237)to_*()
functions into reformatting (changing
properties) and transforming (changing dimensions) documentationedge_*()
to tie_*()
to offer more
(SNA) consistent vocabularynetwork.goldfish
objects
(and linked events and nodelists) to migraph-compatible objects (closed
#96)add_node_attributes()
to
add_node_attribute()
and add_edge_attributes()
to add_tie_attribute()
is_*()
are now considered graph-level ‘marks’node_is_isolate()
for marking isolatesnode_is_max()
, node_is_min()
,
tie_is_max()
, tie_is_min()
for converting
‘measures’ into ‘marks’graph_motif
(fixed #234)\dontrun
cluster_concor()
and
cluster_hierarchical()
are now exportedautographr()
no longer requires “highlight_measure” and
“identify_function” arguments as users can now convert ‘measures’ to
‘marks’ and use these for “node_color” or “edge_color”@format
for more
consistent documentationison_brandes2
dataset, a two-mode version of the
original one-mode datasetmpn_cow_trade
and mpn_cow_igo
datasets (thanks @JaelTan)mpn_elite_mex
node_reach()
for calculating reach centrality
(closed #196){concaveman}
, {ggdendro}
,
{oaqc}
are now Suggests; the user is prompted to install
them when required in autographr()
,
plot.member()
, and node_quad_census()
respectively{stringr}
and {tibble}
replaced with base
or other code and therefore no longer necessary@family
tags for improved cross-referencingprint()
, plot()
,
summary()
, have been added for them (see appropriate
sections below)create_
and generate_
functions now:
n
passed an existing networkcreate_tree()
,
generate_smallworld()
,
generate_scalefree()
create_
functions can now take a membership vector
or split into equal partitions by default
create_components()
no longer accepts a number of
components, instead relying on the membership vectorcreate_core()
for creating core-periphery
graphsgenerate_random()
now inherits attributes from any
networkto_
functions useful for working with
networks of different types
to_redirected()
for adding or swapping direction
to networks (closed #219)to_blocks()
for reducing a network down by a
membership vector; blockmodel()
and
reduce_graph()
are now deprecatedto_multilevel.igraph()
now only works on two-mode
networks; returns the original network if passed a one-mode networkis_
functions
is_signed.data.frame()
and
is_signed.matrix()
now rely on new helper
is.wholenumber()
rather than misleading
is.integer()
is_directed.igraph()
and
is_directed.matrix()
now return FALSE for two-mode
networksis_connected()
now returns result for strong components
if directed and weak components if undirectedas_igraph.data.frame()
now infers third column as
weightedge_multiple()
, edge_loop()
,
edge_reciprocal()
moved from measuresedge_bridges()
"edge_measure"
S3 class has been added, along
with print()
and plot()
methodssummary.node_measure()
method for printing a
summary by a membership vector; summarise_statistics()
is
now deprecated"graph_measure"
class results
graph_components()
now calculates strong components for
directed networks else weak componentsprint.graph_measure()
now correctly labels two-mode
results where a vector is givengraph_smallworld()
graph_core()
for calculating correlation of an
observed network to a core-periphery network of the same dimensions
(closed #39)graph_factions()
for calculating correlation of
an observed network to a component network of the same dimensions
(closed #40)graph_modularity()
for calculating modularity of
an observed network, including modularity for two-mode networks (closed
#144)node_constraint()
node_bridges()
, node_redundancy()
,
node_effsize()
, node_efficiency()
,
node_hierarchy()
node_betweenness()
no longer needs
nobigint
argument; just uses default from
{igraph}
"node_motif"
S3 class for the output of
node_*_census()
functions
print.node_motif()
for tibble-printing of census
resultssummary.node_motif()
to summarise censuses by a
membership vector, replacing group_tie_census()
and
group_triad_census()
, which are now deprecated"graph_motif"
S3 class for the output of
graph_*_census()
functionsnode_path_census()
for returning the shortest
distances from each node to every other node (closed #222)node_tie_census()
now creates unique column names"node_member"
S3 class for vectors of nodes’
cluster memberships
plot.node_member()
replaces ggtree()
node_equivalence()
for identifying nodes’
membership in classes equivalent with respect to some arbitrary motif
census
"hierarchical"
and "concor"
now options
for cluster
within node_equivalence()
;
blockmodel_concor()
is now deprecated (closed #123)"elbow"
now an option for k
selection
within node_equivalence()
;
ggidentify_clusters()
is now deprecated"silhouette"
and "strict"
options
for k
selection (closed #197)k
to be defineddistance
passed to
stats::dist
that defines the distance metric (closed
#36)range
constrains the number of
k
evaluated by "elbow"
and
"silhouette"
to improve parsimony and avoid long elapsed
timesnode_automorphic_equivalence()
for identifying
nodes’ membership in automorphically-equivalent classes (closed
#187)node_structural_equivalence()
replaces
cluster_structural_equivalence()
node_regular_equivalence()
replaces
cluster_regular_equivalence()
node_kernaghinlin()
for identifying nodes’
membership in communities based on the Kernaghin-Lin algorithm (thank
you, @jaeltan, closed
#198)node_coreness()
for nodes’ k-core score
(closed #200)node_strong_components()
and
node_weak_components()
for more direct calls;
node_components()
now calculates strong components for
directed networks else weak components"graph_test"
S3 class replaces
"cug_test"
and "qap_test"
plot.graph_test()
replaces plot.cug_test()
and plot.qap_test()
print.graph_test()
methodplot.matrix()
now plots adjacency/incidence matrices
with sorting and horizontal/vertical lines if a membership vector is
provided, effectively replacing plot.block_model()
autographr()
can highlight nodes that max (by default)
some measure (thank you, @BBieri, closed #224)layout_tbl_graph_stressgrid()
as an extra
optionggatyear()
is deprecatedison_algebra
’s edge attributes now named “friends”,
“social”, and “tasks”{roxytest}
m
argument into p
for
generate_random()
, p
can now be passed an
integer to indicate the number of ties the network should haveto_edges()
to be ~26 times faster on
averageto_edges()
to_subgraph()
now instead of
dplyr::filter()
or strain()
times
argument instead of
maxiter
"measure"
class "node_measure"
and
added "graph_measure"
class with print methodnormalized
is now the second argumentdirected
and weights
arguments have been
removed and are now imputed, if this is undesired please use
to_*()
firstnode_degree()
now calculates strength centrality if
network is weightednode_eigenvector()
and graph_eigenvector()
both work with two-mode networksedge_degree()
and
edge_eigenvector()
, which both just apply the corresponding
nodal measure to the edge graphedge_mutual()
renamed to
edge_reciprocal()
graph_assortativity()
mpn_elite_mex
ison_brandes
is_multiplex.igraph()
and
is_multiplex.tbl_graph()
now checks for multiple edge
attributesstrain()
as wrapper for {dplyr}
’s
filter()
, renamed to avoid conflicts with
{stats}
ison_algebra
now unlabelled{readxl}
is now suggested, but required if
importing from an Excel sheet{patchwork}
replaces {gridExtra}
to make
for more concise multiplot visualisations{dplyr}
also serves to export {magrittr}
’s
pipe{RColorBrewer}
has been dropped and the
Dark2
discrete set of colors is now internaldirected
and direction
arguments in some functions; whereas directed
is always
logical (TRUE/FALSE), direction
expects a character string,
e.g. “in”, “out”, or “undirected”generate_permutation()
now has an additional logical
argument, with_attr
, that indicates whether any attributes
from the original data should be passed to the permuted objectcreate_*()
functions now accept existing objects as
their first argument and will create networks with the same
dimensionsread_pajek()
now imports nodal attributes alongside the
main edgesread_ucinet()
now enjoys clearer documentationas_*()
functions now retain weights where present;
if you want an unweighted result, use is_unweighted()
afterwards
as_edgelist.network()
now better handles edge
weightsas_matrix.igraph()
now better handles edge signsis_twomode()
, is_directed()
,
is_weighted()
, is_labelled()
,
is_signed()
, is_multiplex()
,
is_complex()
, and is_graph()
as_edgelist()
, and
to_unweighted()
, and improved the data.frame method for
as_matrix()
to_named()
and
to_unsigned()
to_edges()
for creating adjacency matrices using
a network’s edges as nodesproject_rows()
and project_cols()
functions to to_mode1()
and to_mode2()
, which
is both more consistent with other functions naming conventions and more
generic by avoiding the matrix-based row/column distinctionnode_mode()
, which returns a vector of the mode
assignments of the nodes in a networkedge_signs()
, which returns a vector of the sign
assignments of the edges in a networkautographr()
works and how {ggraph}
extends
thisautographr()
now incorporates ggidentify()
functionality (closed #150){patchwork}
is now used to assemble multiple plots
togetherggatyear()
measure
class and directed most
node_*()
functions to create objects of this class
ggdistrib()
and offers “hist”
and “dens” methods for histograms and density plots respectivelyedge_betweenness()
wraps {igraph}
’s
function of the same nameedge_closeness()
measures the closeness centrality of
nodes in an edge adjacencynode_cuts()
identifies articulation points (nodes) in a
networkedge_bridges()
identifies edges that serve as bridges
in a networkgraph_cohesion()
measures how many nodes would need to
be removed to increase the number of components (closed #192)graph_adhesion()
measures how many edges would need to
be removed to increase the number of componentsgraph_length()
measures the average path lengthgraph_diameter()
measures the longest path lengthnode_smallworld()
and added
graph_smallworld()
, which works with both one- and two-mode
networks (fixed #214)node_quad_census()
network_reg()
’s formula-based system
network_reg()
can now handle binary and multiple
categorical variables (factors and characters, closed #211);network_reg()
can now manage interactions specified in
the common syntax; var1 * var2
expands to
var1 + var2 + var1:var2
(closed #163)dist()
and sim()
effects have been added
(closed #207)network_reg()
now employs logistic regression to
estimate a binary outcome and linear regression to estimate a continuous
outcome (closed #184)network_reg()
now uses Dekker et al’s semi-partialling
procedure by default for multivariate specifications (closed #206),
defaulting to y-permutations in the case of a single predictor
(closed #208)network_reg()
, relying on
{furrr}
for potential parallelisation and
{progressr}
for progress reports (closed #185, #186)test_random()
and
test_permutation()
, relying on {furrr}
for
potential parallelisation and {progressr}
for progress
reports; note that nSim
argument now times
(closed #199){broom}
S3 methods for netlm
and
netlogit
class objects (closed #183)
tidy()
extracts coefficients and related valuesglance()
extracts model-level values such as
R^2
netlm
and netlogit
class objects (closed #216), which plots the empirical distribution for
each test statistic, indicates percentiles relating to common critical
values, and superimposes the observed coefficientscug_test
and
qap_test
class objects, which plots the empirical
distribution, highlighting tails beyond some critical value (closed
#213), and superimposing the observed coefficient and, possibly, 0{sna}
print.block_model()
replaces
print.blockmodel()
plot.block_model()
replaces
plot.blockmodel()
ison_southern_women
instead of
southern_women
ison_brandes
instead of brandes
ison_networkers
instead of ison_eies
ison_algebra
instead of ison_m182
ison_adolescents
instead of
ison_coleman
mpn_elite_mex
is extended with data from Pajek and with
help from Frank Heberison_networkers
becomes named with information from
{tnet}
mpn_*
and
ison_*
datasets, including references/sourcescluster_structural_equivalence()
for isolates
{patchwork}
to suggested packages
in DESCRIPTIONadd_
functions
mutate_edges()
add_node_attributes()
is_
methods: is_multiplex()
,
is_uniplex()
, is_acyclic()
edge_
functions to identify edges by properties:
edge_mutual()
, edge_multiple()
,
edge_loop()
read_nodelist()
and read_edgelist()
as_network()
method to convert
correctly form an {igraph}
to a {network}
object.ggraphgrid()
documentationread_edgelist()
and
read_nodelist()
to readxl to avoid Java dependencywrite_edgelist()
and
write_nodelist()
to avoid Java dependency
as_network()
,
as_igraph()
, and is_directed()
read_
and write_
functions and
updated documentation
read_edgelist()
for importing
edgelists from Excel and csv filesread_pajek()
for importing .net
and .paj fileswrite_edgelist()
, write_nodelist
,
write_pajek()
, and write_ucinet()
for
exporting into various file formats (Excel, csv, Pajek, and UCINET)is_graph()
to check if an object is a graph or
notas_network()
to retain attributesas_
and to_
functions
as_
functions to convert from dataframes
instead of tibblesas_igraph()
functionto_undirected()
function to work with
network objectsto_main_component()
function so that it
retains vertex attributes in network objectsedge_attribute()
to grab a named edge attribute
from a graph/networkto_unweighted()
to prevent conversion of
network object into igraph object when deleting weightssummarise_statistics()
network_reg()
exampleautographr()
ison_eies
dataset for use in practical 7
vignetteas_matrix()
method for networks now works with
two-mode and weighted networksas_igraph()
method for matrices now checks for
weights independently of coercionas_igraph()
method for networks now works with
two-mode and weighted networksas_network()
method for matrices now works with
two-mode and weighted networksas_network()
method for edgelists, igraph, and
tidygraphs now works with weighted networksto_unnamed()
method for edge liststo_simplex()
method for matricesto_main_component()
method for networksto_multilevel()
method for matricesmutate_edges()
now coalesces rows of edgesgraph_blau_index()
generate_permutation()
and thus
test_permutation()
netlm()
to network_reg()
to avoid
frustrating conflicts
network_reg()
now accepts migraph-consistent
objectsnetwork_reg()
now accepts formula terms such as
ego()
, alter()
, and same()
generate_permutation()
which takes an object and
returns an object with the edges permuted, but retaining all nodal
attributesgenerate_random()
also work with an existing
object as input, in which it will return a random graph with the same
dimensions and densitymutate_edges()
for adding new edges as attributes
to existing edges in an objectgraph_blau_index()
graph_ei_index()
test_random()
(defunct test_cug()
)autographr()
arguments take variable names in quotation marksnode_names()
for quickly accessing node labelsnode_attribute()
for quickly accessing a certain nodal
attributeedge_weights()
for quickly accessing edge weightsgraph_nodes()
for quickly accessing a count of nodes in
the graph, note that for two-mode networks this will be a vector of
length 2graph_edges()
for quickly accessing a count of edges in
the graphgraph_dimensions()
is currently a copy of
graph_nodes()
add_node_attributes()
for adding particular nodal
attributesadd_edge_attributes()
for adding edges from another
graphcopy_edge_attributes()
for copying all nodal attributes
from another graphgraph_blau_index()
for summarising diversity of an
attribute in a network or groupgraph_ei_index()
for summarising diversity of an
attribute over a network’s tiesnode_quad_census()
, especially
useful for two-mode blockmodellinggraph_mixed_census()
test_random()
carries out a conditional uniform graph
(CUG) testtest_permutation()
carries out a quadratic assignment
procedure (QAP) testaes()
from
{ggplot2}
node_shape
option to
autographr()
as_edgelist()
methods for
converting other objects into edgelists
to_unnamed()
on ‘network’ objects now operates on
them directlyto_
documentation significantlyto_onemode()
that was tripping
blockmodel()
on networks that are already one-modeis_connected()
to test whether network is
connected, method =
argument can be specified as
weak
or strong
create_tree()
and create_lattice()
,
and made create_star()
a bit faster for one-mode
networksgenerate_smallworld()
and
generate_scalefree()
, though only for one-mode networks
currently=2
graph_dyad_census()
for more graph profile
optionsblockmodel_concor()
when an object was
of class ‘igraph’ but not ‘tbl_graph’blockmodel()
was treating two-mode
networks"elbow"
and
"strict"
methods for k-identification
ggidentify_clusters()
for
speed
ggdistrib()
for easy plotting of degree and other
node score distributionsggsave()
, xlab()
and
ylab()
from {ggplot2}
for easier plot
annotationas_matrix()
where availablegraph_equivalency()
into the same for two-mode
networks and graph_congruency()
for three-mode (two
two-mode) networksgraph_reciprocity()
methodgraph_components()
and
node_components()
node_tie_census()
output so
that it’s consistent with node_triad_census()
and future
node_census functionscluster_triad_census()
to
group_triad_census()
group_tie_census()
autographr()
for plotting
convex/concave hullsggraphgrid()
a set of layout
functions:
layout_tbl_graph_frgrid()
or
autographr(object, "frgrid")
for snapping
Fruchterman-Reingold to a gridlayout_tbl_graph_kkgrid()
or
autographr(object, "kkgrid")
for snapping Kamada-Kawai to a
gridlayout_tbl_graph_gogrid()
or
autographr(object, "gogrid")
for snapping graph
optimisation to a gridggraphgrid()
has been deprecatedison_m182
documentationas_igraph()
to_uniplex()
was not returning a
weighted graphblockmodel()
was not retaining node
names in all parts of the object structureplot_releases()
to another packageis_signed()
to logically test whether the network
is a signed networkto_unsigned()
for extracting networks of either
“positive” or “negative” ties from a signed networktbl_graph
methods for all other to_
functionsactivate()
from
{tidygraph}
autographr()
plot_releases()
from this packagegraph_balance()
to be much faster, following
David Schoch’s {signnet}
package (see that package for
further extensions)ison_marvel_relationships
to be a double
(-1
/1
) to be compatible with the new
graph_balance()
and {signnet}
{igraph}
from data frames and updated
read scriptto_main_component()
to extract the main component
of a networkto_onemode()
for moving to multimodal igraph
objectsto_uniplex()
method to delete edge types and
their edges from multiplex networksto_simplex()
method to delete loops from a
networkto_named()
method for randomly naming unlabeled
networksison_mm
, ison_mb
,
ison_bm
, and ison_bb
projection illustration
dataison_karateka
community detection illustration
dataison_marvel_teams
and
ison_marvel_relationships
datasetsison_m182
dataset of friends, social and task
ties between 16 anonymous studentsadolescent_society
dataset to
ison_coleman
for consistencygraph_eigenvector()
for one mode networksgraph_balance()
for measuring structural
balancenode_tie_census()
,
node_triad_census()
, cluster_triad_census()
,
and graph_triad_census()
graph_clustering()
into the cohesion
measures graph_density()
, graph_reciprocity()
,
graph_transitivity()
, and
graph_equivalence()
node_smallworld()
to use separated cohesion
measuresblockmodel()
which masks its {sna}
namesake but has the advantages of working with two-mode networks and
retaining node names where available
cluster_structural_equivalence()
and
cluster_regular_equivalence()
as bases for
blockmodellingreduce_graph()
for creating a network from a
blockmodelautographr()
for plotting graphs with sensible
defaults
ggraphlabel()
since core functionality now
provided by autographrggidentify()
to identify the node
with the highest value of a specified node-level measureggatyear()
for subsetting and plotting edgelists
at yeargglineage()
to return a graph colored according
to lineage
ggtree()
for neatly visualising hierarchical
clustersggidentify_clusters()
for identifying which
number of clusters is most appropriate following the elbow methodggraph::theme_graph()
present in a
few different visualisation functionsbrandes
dataset for teaching centrality
measuresadolescent_society
dataset for teaching
friendship paradoxread_edgelist()
for importing Excel-created
edgelists directlyggraphlabel()
for one-function (1F) plotting
label-based network graphsggevolution()
for 1F-plotting begin/end graph
comparisonsggraphgrid()
for 1F snap-to-grid graph layouts
based on Fruchterman-Reingold or Kamada-Kawaiggidentify()
for 1F identifying nodes with
maximum scores based on some arbitrary functionto_undirected()
for symmetrising networks of all
typesto_
functions S3 methodsClosed #100 by converting as_
coercion functions to
S3 methods
as_matrix()
weightingas_tidygraph()
gglineage()
for graphing a
citation network through timeggevolution()
for graphing two
timepoints of the same network side by sideggraphgrid()
for locking a graph
to a gridplot.igraph()
defaultsnode_
functionsFixed bug in as_matrix()
with frame matrix by
dropping (rarely necessary) functionality
as_
functionsFixed bugs in plot_releases()
with more graceful
handling of http errors
{R6}
,
{ggraph}
)netlm()
testbinarise()
to to_unweighted()
to_unnamed()
for unlabelling networksbinarise()
for unweighting networksas_tidygraph()
when passed a tbl_graph
directlyplot_releases()
for more general useplot.igraph()
with layouts and one-mode
graphsUpdated README
Added CITATION
details
Separated coercion (previously conversion) and manipulation
Added some more inter-class coercion tests
Fixed bug in how as_network()
sometimes coerced
two-mode networks into much larger dimension matrices
Added more is_
tests for class-independent property
tests
is_weighted()
is_directed()
is_labelled()
Added @csteglich ’s read_ucinet()
and write_ucinet()
functions
read_ucinet()
offers a file-picker when file path
unknownread_ucinet()
now imports to an igraph-class object by
default, with an argument to allow other alternativeswrite_ucinet()
works with all migraph-compatible
objectsUpdated mpn_bristol
documentation
Added create_star()
function
directed =
argumentcreate_
documentationRenamed sample_affiliation()
to
generate_random()
generate_random()
to be able to generate random
one- or two-mode networksprint.blockmodel()
2021-04-13
usethis::use_mit_license("James Hollway")
. MIT
License file now contains only the standard two lines.\dontrun
from examples. netlm()
now runs in <5 seconds.2021-04-11
as_network()
to coerce objects
into network class2021-03-03
jhollway/
to
snlab-ch/
organisationElaborated documentation for the remainder of the datasets
graph_degree()
where data was hard-coded
inClosed #18 by adding blockmodel_concor()
for
employing the CONCOR algorithm to blockmodel both one-mode and two-mode
networks
print.blockmodel()
method in the {sna}
package
that also prints blockmodel results for two-mode networks
consistently{ggplot2}
for pretty plotting and that better
inherits names from the underlying object2021-02-06
{migraph}
depend on R versions 4.0
or aboveas_matrix()
function to coerce objects into an
adjacency or incidence matrix classas_igraph()
function to coerce objects into an
{igraph}
graph classas_tidygraph()
function to coerce objects into an
{tidygraph}
tbl_graph classis_twomode()
function to check
whether network is two-mode on all object typesRenamed several datasets and elaborated their documentation
mpn_mexicanpower
was renamed to
mpn_elite_mex
mpn_powerelite
was renamed to
mpn_elite_usa_advice
mpn_opensecrets
was renamed to
mpn_elite_usa_money
Reconstructed several creation functions to take universal
(one-mode/two-mode) input: specifying n = 5
creates a
one-mode network, while specifying n = c(5, 5)
creates a
two-mode network
create_empty()
create_complete()
create_ring()
to create rings
of varying breadthcreate_components()
(renamed
from create_silos()
) to create networks with varying
numbers of componentssample_affiliation()
for random two-mode
networkscreate_match()
and
create_nest()
Renamed centrality_
functions with
node_
prefix and ensured they all also wrapped one-mode
measures
centrality_degree()
renamed to
node_degree()
centrality_closeness()
renamed to
node_closeness()
centrality_betweenness()
renamed to
node_betweenness()
node_eigenvector()
Re-added node_constraint()
for calculating Burt’s
constraint measure for one- and two-mode networks
Re-added node_smallworld()
for calculating
Watts-Strogatz measure of small-worldness for two-mode networks
Closed #32 by re-adding centralization functions for one- and two-mode networks
graph_degree()
for degree centralizationgraph_closeness()
for closeness centralizationgraph_betweenness()
for betweenness centralizationRe-added graph_clustering()
for calculating (see
Knoke et al 2021):
Re-added netlm()
for performing linear regression
for multimodal network data
netlm()
to accept a
formula-based inputprint.summary.netlm()
for
netlm()
regressionsplot.igraph()
with
sensible defaults for two-mode networks2021-01-11
{igraph}
and
{tidygraph}
functions for internal useconvert_
and project_
documentationAdded centrality measures that take (and if necessary return) matrix, igraph, or tidygraph objects, and offer a correct normalization for two-mode networks
centrality_degree()
centrality_closeness()
centrality_betweenness()
2021-01-08
Package name change from roctopus to {migraph}
Now builds Linux binary too
project_rows()
and project_cols()
to
make it easier to project two-mode networks in different formats
(matrix, igraph, tidygraph) into projected versions in the same
formatas_incidence_matrix()
2020-11-06
Data creation updated for {tidygraph}
defaults
create_lattice()
to create_chain()
to avoid conflicts with tidygraph::create_lattice()
create_poles()
to
create_silos()
create_random()
to play_twomode()
to avoid conflicts with tidygraph::play_bipartite()
create_
and
play_
functions as tbl_graph
(default),
igraph
, and base matrixcreate_
and play_
function namesPackaged data updated for {tidygraph}
defaults
mpn_
2020-08-18
twomode_netlm()
to netlm2()
netlm2()
netlm2()
create_random()
opensecrets
datapowerelite
data2020-07-21
create_()
functionscontext()
declarationcreate_nest()
now exports matrix object2020-07-20
row_project()
and col_project()
functions to make it easier to remember project directions2020-07-19
mexicanpower
datasetsenate112
datasetsevs
datasets to matricesdf_to_mat()
function for converting regular
adjacency and incidence data frames into matrices2020-07-17
ryanair
dataset from Christopoulos 20062020-07-03
evs
datasets from Knoke et al 20202020-06-30
bristol
dataset from Knoke et al 20202018-12-20
twomode_modularity()
to calculate modularity in
two-mode networksplot_multilevel()
that rotates a force-directed
igraph
plot in three dimensions to reveal multilevel
structureplot_globalnet()
to map a multilevel network on
to a javascript, rotatable global2018-08-25
twomode_smallworld()
to calculate
observed/expected clustering, observed/expected path-length, and the
observed/expected clustering ratiotwomode_2x2()
to identify dominance and coherence
values for networks over timetwomode_coherence()
to allow for introduction
of second-mode attributestwomode_fragmentation()
to
twomode_components()
plot_2x2()
to plot values through a two-by-two
matrix2018-08-14
roctopus
twomode_fragmentation()
to calculate number of
components in two-mode networks and identify their membershiptwomode_dominance()
to allow an nodal attribute
to be passed to the function to weight the centralization measuretwomode_coherence()
to calculate Jaccard
similarityAdded plot_twomode()
, which wraps
plot(igraph::graph_from_incidence_matrix())
with some
useful defaults
2018-07-30
README.md
file with instructions on how to
install packageLICENSE
file and pointed to bug/issue
trackerNEWS.md
file to track changes to the
packagetwomode_clustering()
to calculate percentage of
three-paths closed by four-pathstwomode_lattice()
to create two-mode
latticestwomode_centralization_degree()
to calculate
degree centralization in two-mode networks, for rows, columns, or
bothtwomode_centralization_between()
to calculate
betweenness centralization in two-mode networkstwomode_constraint()
to calculate network
constraint in two-mode networksarrange.vars()
to rearrange variables by
position