2024-11-30
- Fixed dependency issue
2024-11-29
- Updated github actions
- Updated
net_regression()
- It now works (better) with unweighted networks
- Added print methods that combine
tidy()
andglance()
- Fixed effect naming error
- Updated
same()
to work for two-mode networks - Updated specification advice for testing for homophily in two-mode networks
2024-11-06
- Using different github actions for renaming and releasing binaries (thanks @auzaheta)
- Updated manynet dependence to >=1.0.5
- Added
test_configuration()
- Updated
mpn_bristol
with info - Updated
mpn_ryanair
with info - Updated
mpn_elite_mex
with info - Updated
mpn_elite_usa
- Updated
mpn_senate
- Updated
mpn_cow
- Updated diversity tutorial
- More elaborate start
- Broader figure widths
- Dropped
alter(Discipline)
fromnet_regression()
call
2024-09-03
- Using github actions download artifact v4 to address dependabot security warning
test_permutation()
now usesmanynet::to_permuted()
instead of the oldermanynet::generate_permutation()
syntax
2024-07-19
- Made package title Title Case in DESCRIPTION
- Added alttext to icons used in pkgdown site
- Added CRAN link in pkgdown site
- Removed unnecessary reexports
- Dropped 6 Suggests dependencies
- Dropped 4 Imports dependencies (including
{tidyr}
, see below)
network_reg()
renamed tonet_regression()
for consistency- Refactored several functions to avoid
{tidyr}
dependency for pivoting longer and wider
2024-07-18
- Updated migraph logo with stocnet address, colorsafe colorway, and larger nodes and ties
- Copied thisRequires() helper into migraph from manynet
- testthat tests now parallelised
- Fixed precision issues in testthat tests
- Declared global variables
.data
and.graph_context
- All measures, motifs, and memberships have migrated to
{manynet}
- see
{manynet}
> v1.0.0 for more details
- see
- Added
test_distribution()
to test whether two vectors/distributions are from the same distribution test_gof()
renamed totest_fit()
to improve readability- Split tests documentation into two
test_fit()
no longer measures fit against steps where there is no covariance
- Fixed bug in
test_random()
where parameters were passed tomanynet::generate_random()
instead of the original object, which is processed more intuitively withinmanynet::generate_random()
(thanks @RWKrause) - Corrected that
test_random()
returns results on edge-conditioned uniform graphs, not size - Reexported
ggplot2::scale_y_discrete()
- Specification advice in
network_reg()
now ignores absent ego terms for undirected networks
- Added descriptions to tutorials
- Renamed regression tutorial the diversity tutorial
2024-03-07
- Fixed DOI issue for Burchard/Cornwell paper
2024-03-06
- Added
node_brokering_activity()
andnode_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)- Matrix operations bring an approximately sixfold speed increase compared to vapply
node_effsize()
now works for weighted onemode and twomode networks- Matrix operations bring an approximately sixfold speed increase compared to vapply
network_equivalency()
now normalises weighted twomode networks (closed #291)
- Added
node_brokering()
for identifying brokering roles from brokering activity and exclusivity node_roulette()
now optimises group diversity based on historical interactions (Lai and Hao 2016)- Added more documentation about maximally diverse grouping problem
- Matrix operations bring an approximately threefold speed increase compared to vapply
- Perturbation helpers can be used also for blockmodelling (closed #38)
2024-01-25
- Updated
network_scalefree()
to work even when P scores are not available
- Updated
node_fluid()
to work with different versions of{igraph}
2024-01-24
- Completed significant documentation updates
over_*()
now reverts future plan on exit
node_brokerage_census()
andnetwork_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 exit
2024-01-24
- Migrated package repository to 'stocnet' organisation
- Significant documentation updates
- Migrated remaining marks functions to
{manynet}
- Added
network_change()
to measure the Hamming distance between two or more networks - Added
network_stability()
to measure the Jaccard index between two or more networks - Added
network_spatial()
to measure spatial association (Moran's I, closes #209) - Added
node_deg()
for a non-normalised version ofnode_degree()
node_degree()
now normalises strength centrality- Added
node_induced()
to measure nodes' induced betweenness centralities - Added
node_flow()
to measure nodes' flow betweenness centralities (closes #195) - Added
node_information()
to measure nodes' information or current-flow closeness centralities (closes #194) - Added
node_multidegree()
to measure the ratio of one type of tie in a multiplex network to another - Added
node_posneg()
measures the PN centrality of signed networks
- Fixed #287 by making
node_tie_census()
andnode_triad_census()
work with the new multiplex format in{manynet}
(which relies on a "type" tie attribute rather than multiple tie attributes)- This restores functionality to
node_structural_equivalence()
andnode_regular_equivalence()
- Incidental speed improvements
- This restores functionality to
- Added
node_fluid()
community detection algorithm - Added
node_roulette()
for identifying groups of nodes that haven't interacted before
- Migrated
play_*()
functions to{manynet}
, includingas_diffusion()
and the diffusion tutorial - Added specification advice to
network_reg()
so that specifications that include a 'sim' or 'same' effect for a variable are encouraged to also include more elementary 'ego' and 'alter' effects network_reg()
now ignores the LHS of the formula for uniplex networks
2023-12-17
- Fixed documentation issues in
node_adoption_time()
2023-12-17
- Added
node_is_infected()
to identify infected nodes at given time - Added
node_is_latent()
to identify infected nodes at given time - Added
node_is_recovered()
to identify infected nodes at given time - Added
node_is_fold()
for identifying nodes that are occupying structural folds - Dropped last
is_*()
functions from migraph to avoid unnecessary conflicts with manynet at startup - Improved 'mark_nodes' documentation
- Added
network_hazard()
for calculating the hazard rate for each time point of a diff_model object node_adoption_time()
now works with incomplete diffusions- Fixed bug with named vectors
node_exposure()
now usesnode_is_infected()
for more flexibilitynode_thresholds()
now works with incomplete diffusions- Adds exposure data where not provided
node_adopter()
now correctly identifies non-adopters
play_diffusion()
- Now records only the first exposure event until susceptible again
- Now uses
node_is_exposed()
andnode_exposure()
internally - Made play_diffusion() code easier to understand and debug
- Added some tests for
play_diffusion()
2023-12-13
- Added
node_is_exposed()
function to mark nodes (logical) that are currently exposed to diffusion content in a network.
- Fixed bugs for
network_reproduction()
function that calculates the R-nought value. - Added
network_immunity()
function to calculate the Herd Immunity Threshold for the network. - Added
node_exposure()
function to calculate the number of infected/adopting nodes to which each susceptible node is exposed. - Added documentation for diffusion measures, separating documentation for
node_*()
andnetwork_*()
measures.
- Added
as_diffusion()
function to convert a diffusion event table into adiff_model
object. - Added
test_gof()
function for testing goodness-of-fit in diffusion models.
- Updates to tutorial 7 (diffusion):
- Added section on R-nought and Herd Immunity.
- Fixed layouts for plots using
autographs()
andautographd()
fordiff_model
objects.
2023-12-06
- Fixed bugs in diffusion measures.
- Fixed
node_thresholds()
so that it infers nodes' thresholds from the amount of exposure they had when they became infected or exposed. - Updated
node_adoption_time()
andnode_adopter()
to returnnode_member
andnode_measure
objects, which makes printing and summarising better. - Updated node_infection_length() and network_infection_length() which measures the average length nodes remain infected.
- Fixed
- Added printing of membership class names if available in print method for
node_member
class. - Added distributional statistics of the vector if no membership vector is assigned in summary method for
node_member
class.
- Updated
diff_model
object to carry original network data for plotting. - Updated
play_diffusion()
to forward exposure/contact information to the events table.
- Added plots for diffusion models in tutorial 7 using
autographs()
andautographd()
.
2023-11-15
- Added diffusion measures to website.
- Fixed documentation issues for diffusion measures.
- Added
node_is_mentor()
for indicating nodes with high indegree.
- Added 'minimising' distance option for segregation model choice.
- Changed 'satisficing' option in
play_segregation()
to sample randomly from those unoccupied options less than the desired threshold.
- Added multi-choice questions to tutorial 8.
2023-11-08
- Added first drafts of various diffusion measures:
network_transmissability()
,node_infection_length()
,network_infection_length()
,network_reproduction()
,node_adoption_time()
,node_adopter()
,node_thresholds()
.
- Fixed documentation for
play_diffusion()
. - Fixed bug in labelling in plot results for SIR models.
- Added plots using
autographs()
and elaboration for tutorial 7.
2023-11-02
- Fixed documentation issue with
summary.node_member()
- Fixed documentation issue with
node_census()
2023-11-01
print.node_mark()
andprint.tie_mark()
now allow infinite 'n' width
print.node_measure()
andprint.tie_measure()
now allow infinite 'n' width- Digit rounding is now fixed in print and summary methods
print.node_member()
now prints the vector- Previous functionality is now available in
summary.node_member()
- Previous functionality is now available in
2023-10-25
- Fixed bug in network setup in 'tutorial4' (Community)
- Fixed bug in blockmodelling interpretation in 'tutorial5' (Position)
- Added more to core-periphery section to 'tutorial6' (Topology)
- Added network resilience section to 'tutorial6' (Topology)
- Added
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- This can be selected with the argument
method = "eigenvector"
- This can be selected with the argument
- Added Krackhardt's graph theoretic dimensions of hierarchy measures, including
network_connectedness()
network_efficiency()
network_upperbound()
- Added
node_eccentricity()
, which wrapsigraph::eccentricity()
- Added
node_neighbours_degree()
, which wrapsigraph::knn()
- Added
tie_cohesion()
to measure how embedded ties are
- Added
node_louvain()
community detection algorithm - Added
node_leiden()
community detection algorithm- Note that this function optimises the Constant Potts Model rather than modularity
2023-10-18
- Added more code annotations in 'tutorial4' (Community)
- Elaborated 'tutorial5' (was named Equivalence, now Position)
- Chunks in tutorials that are incremental now hidden upon extraction using
purl = FALSE
argument
- Improved printing of node_members and node_measures objects
2023-10-11
- Added more questions to the Centrality tutorial (3)
- Added more instruction and more questions to the Community tutorial (4)
- Fixed scale, labelling, and other issues in
plot.node_measure()
- Added
node_optimal()
,node_infomap()
,node_spinglass()
, andnode_leading_eigen()
to extend the community detection options available in the package
- Added Macports option to the README (closes #274, thank you @barracuda156)
- Updates to the Centrality tutorial
- Added
node_outdegree()
,node_indegree()
,network_outdegee()
, andnetwork_indegree()
wrappers - Added
network_reach()
- Added
node_harmonic()
andnetwork_harmonic()
- Added
node_pagerank()
plot.node_measure()
now returns a single plot for one-mode networks with a frequency histogram and a density overlay
- Upgraded all old igraph data to work with most recent version
- Fixed backends in
node_closeness()
andnode_betweenness()
in preparation for an{igraph}
deprecation (merci @maelle)
- Fixed #272 by making
test_random()
andtest_permutation()
rely on graph dimensions rather than graph order (thank you finding this @rabenton)
- Fixed some defunct function names
- Breaking changes by moving the making, manipulating, and mapping functions to
{manynet}
- All
create_*()
andgenerate_*()
functions are now in{manynet}
- All
read_*()
andwrite_*()
functions are now in{manynet}
- All
as_*()
andto_*()
functions are now in{manynet}
- Most
is_*()
functions are now in{manynet}
- All
add_*()
andjoin_*()
functions are now in{manynet}
- Functions that grab metadata from network objects,
e.g.
network_nodes()
,node_names()
, andtie_weights()
, are now in{manynet}
- All
autograph*()
functions are now in{manynet}
{manynet}
is now a Depends, but many dependencies removed or moved to{manynet}
- All
- Most functions now expect
.data
as their first argument; previously it wasobject
- Moved data vignette (now a tutorial) and visualisation tutorial to
{manynet}
- Updated README and pkgdown structure accordingly
- Added
over_time()
andover_waves()
to measure (potentially parallelised) over split graphs- Added class construction and a plot method for resulting
network_measures
object
- Added class construction and a plot method for resulting
- Each of the four main types of centrality now get their own page of documentation
- Added
node_alpha()
for calculating alpha centrality, mostly just a wrapper forigraph::alpha_centrality()
- Added
node_power()
for calculating beta or Bonacich centrality, mostly just a wrapper forigraph::power_centrality()
, though also correctly accounts for two-mode networks - Renamed
node_homophily()
tonode_heterophily()
, which is more accurate and in line with the scale's directionnode_heterophily()
now calculates EI indices in a faster, vectorised form, instead of the older, slower solution that calculatednetwork_homophily()
over all ego networks
- Renamed
network_homophily()
tonetwork_heterophily()
network_heterophily()
now ignores missing values
network_congruency()
is now more explicit about its data expectations
k_strict()
,k_elbow()
andk_silhouette()
are now exported and documented- Added
play_segregation()
for playing Schelling segregation models with various parameters - Fixed some
diff_model
anddiffs_model
plotting irregularities - Fixed bug in how merges were constructed as a distance matrix in
cluster_concor()
- Moved
ison_
data to{manynet}
- Updated README with better structuring and explanation
- Also improved figure quality
- Added
read_matrix()
for importing CSVs of adjacency/incidence matrices - Added
read_dynetml()
for importing DynetML .xml files (closed #261)
- Added list method for
as_tidygraph()
for merging nodelists and edgelists- Note that a named list is expected, with names "nodes" and "ties"
- Added igraph method for
as_siena()
- Note that this is a WIP proof of concept, and will currently only create the DV
- Added hints, solutions, comments, and questions to equivalence and centrality tutorials
- Changed theme across all tutorials
- Fixed bug in
read_pajek()
where multiple networks/ties were causing an issue for partition assignment
- Fixed bug in
play_diffusion()
relating to latency inversion
- Added hints and questions to community tutorial
- Added diffusion tutorial
- Added
is_aperiodic()
for testing whether a network is aperiodic (the greatest common divisor for all cycles in the network is 1)- Note that for computational efficiency, this will check only up to a specified path length (by default 4)
node_is_max()
andnode_is_min()
now take a "rank" argument for selecting more than the first ranked maxima or minima
- Added several new functions for splitting networks into a list of networks
- Added
to_components()
to return the components of a network as a list of networks - Added
to_egos()
to return the ego networks of a network as a list of networks - Added
to_subgraphs()
to return attribute-based subgraphs as a list of networks
- Added
- Added
network_richness()
andnode_richness()
for calculating the richness (a common diversity measure) of an attribute in a network
- Extended
play_diffusion()
to include more compartment and transition options- The print method now tabulates the compartment sums per step
- The summary method now presents the diffusion event list
- The plot method now:
- plots lines for S and I compartments, as blue and red lines respectively, if available or informs the user if no diffusion could be simulated
- plots lines for E and R compartments, as orange and green lines respectively, if relevant
- plots a bar graph behind showing the number of new infections per step
- Added "transmissibility" parameter to allow for more probabilistic contagion, by default 1 (all contacts over the threshold result in contagion)
- Added "latency" parameter to allow for an Exposed compartment to be included, by default 0 (no incubation period)
- Added "recovery" rate parameter to allow for a Recovered compartment to be included, by default 0 (no recovery)
- Added "waning" parameter to allow for returns to the Susceptible compartment, by default 0 (any recovered have lifelong immunity)
- Added "immune" parameter to allow for issuing of targetted vaccinations or related
- "thresholds" can now be proportions, in which case they are interpreted as complex
- "seeds" is now 1 by default
- Added
play_diffusions()
for running a diffusion model multiple times- Note for accelerating documentation and tutorials, this is 5 by default, but for publication quality results this should be increased
- A print method tabulates the compartment sums per step per simulation
- A summary method tabulates the steps until complete infection (or recovery) for each simulation
- A plot method visualises the loess for each compartment across all simulations
- Note that this function uses
{furrr}
and so a multicore or multisession strategy can be used for parallelisation (but this only makes sense for many simulations)
- Added
play_learning()
for running a DeGroot learning model- A print method tabulates nodes beliefs at each step
- A summary method informs how many steps it took until convergence or whether there was no convergence after t steps
- A plot method visualises the belief trajectories for each node
network_reg()
now declares the reference category for nominal variables
- Added
autographs()
for autoplotting lists of networks
- Changed tutorial naming structure to numeric
- Made all existing tutorials solution oriented
- Converted visualisation vignette into tutorial
- Added further instruction as to how to change e.g. node_color colors
- Converted centrality vignette into tutorial
- Converted regression vignette into tutorial
- Added a lot more interactivity to regression tutorial
- Deleted vignette instructions off of the README
- Added some core/coreness aspects to topology tutorial
mutate()
now works with igraph objects
- Added
node_is_random()
for selecting n nodes at random
- Added first draft of (SI)
play_diffusion()
model- Added diff_model class, together with print, summary, and plot methods
- Added topology tutorial
- Fixed integer recognition bug in
generate_random()
- Added more similarity options for projection (
to_mode1()
andto_mode2()
) - Fixed bug in
to_redirected.igraph()
where routing through an edgelist caused problems
- Elaborated documentation on modularity
- Added
network_scalefree()
for returning power law alpha/exponent- A message is given if the KS p-value is less than 0.05
- Added
ison_lotr
dataset for examples using interactions among Lord of the Rings characters in the books
- Converted 'visualisation' vignette to a learnr tutorial
- Deleted troublesome URLs to correlatesofwar.org
- Brokerage census gets their own documentation page
- Converted 'community' vignette to a learnr tutorial
- Converted 'equivalence' vignette to a learnr tutorial
- Added node names to node_motif class where available
- Added
node_brokerage_census()
andnetwork_brokerage_census()
for counting Gould-Fernandez brokerage roles
- Fixed several typos in the centrality vignette and reexported figures
- Added community detection vignette
create_lattice()
now conforms to othercreate_*()
functions in how it interprets"n"
- from an inferred
"n"
for a one-mode network, it will create a transitive lattice of as even dimensions as possible - for a two-mode network, this depends on how balanced the two modes are, and is still a work in progress... (WIP)
- from an inferred
- Added
is_eulerian()
for a logical expression of whether the network has an Eulerian path
network_smallworld()
now takes a method argument for different ways of calculating a small-world coefficient- "omega" (the new default) offers a better range, 0 to 1, than the previous (now "sigma") metric.
- "SWI" is also included and offers a 0 to 1 range, but where 1 may not be realisable
- Added
node_diversity()
for calculating heterogeneity among each nodes' ego network - Added
node_homophily()
for calculating homophilous ties among each nodes' ego network - Added
node_reciprocity()
for calculating each node's reciprocity - Added
node_transitivity()
for calculating each node's transitivity/clustering
- Added wrappers for several community detection algorithms from igraph,
unlike tidygraph these can operate on objects directly
- Added
node_walktrap()
- Added
node_edge_betweenness()
- Added
node_fast_greedy()
- Added
- Reversed blue/red colour assignment for binary variables
to_twomode()
now returns an undirected network- Added
to_anti()
for obtaining the complement of the given network- Note that unlike the implementation in
{igraph}
, this respects two-mode constructions
- Note that unlike the implementation in
- Added
is_perfect_matching()
for a logical expression of whether the maximum matching of a network is also perfect - Added
node_is_core()
for a logical vector of which nodes are members of the core
node_degree()
now has an additional parameter for trading off between degree and strength in the case of weighted networks- Added
node_power()
for Bonacich power centrality for both one- and two-mode networks (closed #193) - Tie centrality measures now have their own help page (WIP)
- Fixed
autographr()
tests to work with new version of{ggraph}
(closed #247, thanks @henriquesposito)
graph_*()
functions now renamed tonetwork_*()
for terminological consistency- Added
p2visualization
vignette- more motivation re Tufte and Brandes et al
- an overview on key multimodal layouts
- a few demonstrations of
{patchwork}
functionality
- Added igraph/migraph layout comparison to README
- Fixed CRAN LaTeX issue relating to underscores in manual figures
- Fixed bug in plotting space coordinates for named two-mode networks
- Suppressed messages relating to 'graph' class being defined by multiple packages
- Filled in some further documentation
- Dropped some older defunct functions
- Renamed
graph_blau_index()
tograph_diversity()
- Renamed
graph_ei_index()
tograph_homophily()
- Fixed bug with
autographr()
's "node_group" argument
- Fixed documentation issues (URLs, equations)
- Reference and articles tabs on package website now called "Function Overview" and "Practical Lessons" respectively
- Reinstated equivalence and blockmodelling vignettes
- All vignettes now precompiled to avoid CRAN issues
- Added
as_graphAM()
methods for all migraph-consistent object classes so{Rgraphviz}
can be used effectively - Added
as_igraph()
,as_tidygraph()
, andas_network()
methods for{RSiena}
sienaData objects (thanks @JaelTan, closed #94) - Added
as_edgelist()
andas_matrix()
methods fornetwork.goldfish
class objects - The
"twomode"
argument inas_matrix()
is nowNULL
by default, allowing both one-mode and two-mode coercion to_mode1()
andto_mode2()
now take an extra argument to produce weighted projections by different "similarity" measures- "count" (the default) returns a raw count of the coincidence of nodes in the specified mode with nodes of the other mode
- "jaccard" (Jaccard index) offers a measure of opportunity weighted by participation
- "rand" (Simple Matching Coefficient) offers a measure of behavioral mirroring
- "pearson" (Pearson's correlation) and "yule" (Yule's Q) offer correlation coefficients for valued and binary data, respectively
- These options work for edgelists, matrices, igraph and tidygraph, and network objects
- Added
to_matching()
methods to transform a two-mode network or network with some other (binary) "mark" attribute into a network of matching ties - Renamed
to_main_component()
toto_giant()
to be more space efficient- Added methods for edgelists and matrices
- Added two-mode application for
to_blocks()
(closed #242)- Fixed bug in
to_blocks()
where NA blocks couldn't be subsequently coerced
- Fixed bug in
- Filled in a number of S3 methods
to_blocks()
,to_subgraph()
, andto_ties()
are now S3 methods, returning objects of the same class as given- Added
to_onemode()
method for matrices - Added
to_twomode()
methods for igraph, tidygraph, and network - Added network methods for
to_named()
,to_redirected()
,to_uniplex()
, andto_unsigned()
- Added edgelist methods for
to_undirected()
andto_uniplex()
- Added matrix method for
to_uniplex()
- Fixed bug where
to_unweighted()
didn't respect the "threshold" specified
- Fixed eternal loop bug where
node_mode()
couldn't produce a "mark" class object - Fixed bug where node names/labels were not being added to mark objects
- Fixed bug in
is_twomode()
where labelling information was being ignored
graph_core()
now runsnode_core()
(see below) if no "membership" vector is provided
- Added
node_core()
for partitioning nodes into core and periphery memberships - Fixed floating point bug in
k_strict()
- Added "tertius" effect for
network_reg()
- "ego" and "alter" effects now work better for two-mode networks in
network_reg()
- Added "hierarchy" and "alluvial" layout methods
- Added "railway" and "ladder" layout methods (closed #125)
- Added "concentric" layout method
- Restructured
autographr()
to improve future debugging and development autographr()
now rotates labels for partitioning layouts, including "concentric", so that they are readable and overlap less- Fixed
gglineage()
to use "alluvial" layout and better position nodes on the x-axis
mpn_cow_igo
now includes "polity2" scores- Added visualisations to some
ison_
andmpn_
data documentation (closed #237)
- Fixed URL error in a vignette
- Dropped vignettes for now to ensure package makes it on to CRAN
- Fixed some URL issues for CRAN
- Split
to_*()
functions into reformatting (changing properties) and transforming (changing dimensions) documentation
- Updated the DESCRIPTION and CITATION
- Renamed
edge_*()
totie_*()
to offer more (SNA) consistent vocabulary - Added DOIs to as much data and documentation as possible (closed #236, thanks @JaelTan)
- Some further rationalisation of the documentation
- Dropped visualization vignette for now
- Added methods for converting
network.goldfish
objects (and linked events and nodelists) to migraph-compatible objects (closed #96) - Renamed
add_node_attributes()
toadd_node_attribute()
andadd_edge_attributes()
toadd_tie_attribute()
- All
is_*()
are now considered graph-level 'marks' - Added 'node_mark' and 'tie_mark' classes with printing methods (closed #233)
- Added
node_is_isolate()
for marking isolates - Added
node_is_max()
,node_is_min()
,tie_is_max()
,tie_is_min()
for converting 'measures' into 'marks'
- Printing 'node_measure' class objects now is prettier, extending the width of the console, indicating how many additional observations, and separates out each mode (closed #232)
- Added print method for
graph_motif
(fixed #234)
- Equivalence examples now
\dontrun
cluster_concor()
andcluster_hierarchical()
are now exported
autographr()
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"
- Added prints of each data object to
@format
for more consistent documentation - Added
ison_brandes2
dataset, a two-mode version of the original one-mode dataset - Added
mpn_cow_trade
andmpn_cow_igo
datasets (thanks @JaelTan) - Fixed non-unique names in
mpn_elite_mex
- Further shortened equivalence examples
- Added
node_reach()
for calculating reach centrality (closed #196) - Separated (again) centrality and centralisation documentation
- Shortened equivalence examples
- Reduced package dependencies by 5
{concaveman}
,{ggdendro}
,{oaqc}
are now Suggests; the user is prompted to install them when required inautographr()
,plot.member()
, andnode_quad_census()
respectively{stringr}
and{tibble}
replaced with base or other code and therefore no longer necessary
- Relabelled scripts to follow website function structure
- Added
@family
tags for improved cross-referencing - Added a lot more references/sources
- Added
- README elaborated, including listing functions and data in the package
- Switched to S3 classes as outputs for most functions
- Several methods, e.g.
print()
,plot()
,summary()
, have been added for them (see appropriate sections below)
- Several methods, e.g.
- All
create_
andgenerate_
functions now:- work when
n
passed an existing network - work with two-mode networks, including
create_tree()
,generate_smallworld()
,generate_scalefree()
- return undirected network by default
- work when
- Some
create_
functions can now take a membership vector or split into equal partitions by defaultcreate_components()
no longer accepts a number of components, instead relying on the membership vector- Added
create_core()
for creating core-periphery graphs
generate_random()
now inherits attributes from any network
- Added a couple of
to_
functions useful for working with networks of different types- Added
to_redirected()
for adding or swapping direction to networks (closed #219) - Added
to_blocks()
for reducing a network down by a membership vector;blockmodel()
andreduce_graph()
are now deprecated to_multilevel.igraph()
now only works on two-mode networks; returns the original network if passed a one-mode network
- Added
- Fixed some bugs in a number of
is_
functionsis_signed.data.frame()
andis_signed.matrix()
now rely on new helperis.wholenumber()
rather than misleadingis.integer()
is_directed.igraph()
andis_directed.matrix()
now return FALSE for two-mode networksis_connected()
now returns result for strong components if directed and weak components if undirected
as_igraph.data.frame()
now infers third column as weight
- Added new set of functions that return logical vectors for nodes and edges:
edge_multiple()
,edge_loop()
,edge_reciprocal()
moved from measures- Added
edge_bridges()
- A new
"edge_measure"
S3 class has been added, along withprint()
andplot()
methods - Added
summary.node_measure()
method for printing a summary by a membership vector;summarise_statistics()
is now deprecated - All cohesion, connection, and diversity measures now return
"graph_measure"
class resultsgraph_components()
now calculates strong components for directed networks else weak componentsprint.graph_measure()
now correctly labels two-mode results where a vector is given
- Added new script for measuring features, including
graph_smallworld()
- Added
graph_core()
for calculating correlation of an observed network to a core-periphery network of the same dimensions (closed #39) - Added
graph_factions()
for calculating correlation of an observed network to a component network of the same dimensions (closed #40) - Added
graph_modularity()
for calculating modularity of an observed network, including modularity for two-mode networks (closed #144)
- Added
- Added new script for measuring structural holes, including
node_constraint()
- Added several additional measures of structural holes:
node_bridges()
,node_redundancy()
,node_effsize()
,node_efficiency()
,node_hierarchy()
- Added several additional measures of structural holes:
node_betweenness()
no longer needsnobigint
argument; just uses default from{igraph}
- Added
"node_motif"
S3 class for the output ofnode_*_census()
functions- Added
print.node_motif()
for tibble-printing of census results - Added
summary.node_motif()
to summarise censuses by a membership vector, replacinggroup_tie_census()
andgroup_triad_census()
, which are now deprecated
- Added
- Added
"graph_motif"
S3 class for the output ofgraph_*_census()
functions - Added
node_path_census()
for returning the shortest distances from each node to every other node (closed #222) node_tie_census()
now creates unique column names
- Added new
"node_member"
S3 class for vectors of nodes' cluster memberships- The class hides a hierarchical clustering object as an attribute, so
plot.node_member()
replacesggtree()
- The class hides a hierarchical clustering object as an attribute, so
- Moved to an equivalence identification scheme that hides many of the technical aspects from users when unnecessary
- Added
node_equivalence()
for identifying nodes' membership in classes equivalent with respect to some arbitrary motif census"hierarchical"
and"concor"
now options forcluster
withinnode_equivalence()
;blockmodel_concor()
is now deprecated (closed #123)"elbow"
now an option fork
selection withinnode_equivalence()
;ggidentify_clusters()
is now deprecated- Added
"silhouette"
and"strict"
options fork
selection (closed #197) - Added option for
k
to be defined - There is now an argument
distance
passed tostats::dist
that defines the distance metric (closed #36) - The argument
range
constrains the number ofk
evaluated by"elbow"
and"silhouette"
to improve parsimony and avoid long elapsed times
- Added
node_automorphic_equivalence()
for identifying nodes' membership in automorphically-equivalent classes (closed #187) node_structural_equivalence()
replacescluster_structural_equivalence()
node_regular_equivalence()
replacescluster_regular_equivalence()
- Added
- Added community identification scheme that mirrors equivalence identification in many respects
- Added
node_kernaghinlin()
for identifying nodes' membership in communities based on the Kernaghin-Lin algorithm (thank you, @jaeltan, closed #198)
- Added
- Added connected identification scheme that mirrors equivalence identification in many respects
- Added
node_coreness()
for nodes' k-core score (closed #200) - Added
node_strong_components()
andnode_weak_components()
for more direct calls;node_components()
now calculates strong components for directed networks else weak components
- Added
- A single
"graph_test"
S3 class replaces"cug_test"
and"qap_test"
plot.graph_test()
replacesplot.cug_test()
andplot.qap_test()
- Added
print.graph_test()
method
plot.matrix()
now plots adjacency/incidence matrices with sorting and horizontal/vertical lines if a membership vector is provided, effectively replacingplot.block_model()
autographr()
can highlight nodes that max (by default) some measure (thank you, @BBieri, closed #224)- Added
layout_tbl_graph_stressgrid()
as an extra option ggatyear()
is deprecated
ison_algebra
's edge attributes now named "friends", "social", and "tasks"
- Trialling
{roxytest}
- Updated favicons
- Updated several vignettes
- Closed #154 by building out data vignette
- Updated centrality vignette with more modern plotting
- Added some more informative documentation families
- Folded
m
argument intop
forgenerate_random()
,p
can now be passed an integer to indicate the number of ties the network should have
- Refactored
to_edges()
to be ~26 times faster on average - Corrected edge labelling in
to_edges()
- Using
to_subgraph()
now instead ofdplyr::filter()
orstrain()
- Layouts now use
times
argument instead ofmaxiter
- Renamed
"measure"
class"node_measure"
and added"graph_measure"
class with print method - Overhaul of centrality measures
- Centrality and centralization measures now return normalized scores by default,
normalized
is now the second argument directed
andweights
arguments have been removed and are now imputed, if this is undesired please useto_*()
firstnode_degree()
now calculates strength centrality if network is weightednode_eigenvector()
andgraph_eigenvector()
both work with two-mode networks- Added
edge_degree()
andedge_eigenvector()
, which both just apply the corresponding nodal measure to the edge graph
- Centrality and centralization measures now return normalized scores by default,
edge_mutual()
renamed toedge_reciprocal()
- Closed #225 by adding
graph_assortativity()
- Closed #151 with blockmodel coloring for signed graphs
- Dropped weight from
mpn_elite_mex
- Dropped direction from
ison_brandes
- Streamlined some examples to reduce testing time
- Fixed a DOI URL for Ortmann and Brandes reference
- Streamlined some tests to reduce testing time
is_multiplex.igraph()
andis_multiplex.tbl_graph()
now checks for multiple edge attributes- Added
strain()
as wrapper for{dplyr}
'sfilter()
, renamed to avoid conflicts with{stats}
ison_algebra
now unlabelled
- Recognised contributors Henrique Sposito and Jael Tan
- Updated dependencies
{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 theDark2
discrete set of colors is now internal
- README has been updated and now compiles from a .Rmd file
- Changed website theme to 'superhero'
- All prior deprecated functions have been removed
- Increased testing to ~80% (closed #126, #212)
- CITATION has been updated too
- Moved to @describeIn documentation (closed #215)
- Distinguished
directed
anddirection
arguments in some functions; whereasdirected
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 object- All
create_*()
functions now accept existing objects as their first argument and will create networks with the same dimensions read_pajek()
now imports nodal attributes alongside the main edgesread_ucinet()
now enjoys clearer documentation
- All
as_*()
functions now retain weights where present; if you want an unweighted result, useis_unweighted()
afterwardsas_edgelist.network()
now better handles edge weightsas_matrix.igraph()
now better handles edge signs
- Pivoted to S3 methods for most manipulation functions for better dispatching and performance
- Added matrix, data.frame, network, igraph, and tbl_graph methods for
is_twomode()
,is_directed()
,is_weighted()
,is_labelled()
,is_signed()
,is_multiplex()
,is_complex()
, andis_graph()
- Added data.frame methods for
as_edgelist()
, andto_unweighted()
, and improved the data.frame method foras_matrix()
- Added data.frame and matrix methods for
to_named()
andto_unsigned()
- Added matrix, data.frame, network, igraph, and tbl_graph methods for
- Added
to_edges()
for creating adjacency matrices using a network's edges as nodes - Renamed
project_rows()
andproject_cols()
functions toto_mode1()
andto_mode2()
, which is both more consistent with other functions naming conventions and more generic by avoiding the matrix-based row/column distinction - Added
node_mode()
, which returns a vector of the mode assignments of the nodes in a network - Added
edge_signs()
, which returns a vector of the sign assignments of the edges in a network
- Added 'visualization' vignette that starts to introduce how
autographr()
works and how{ggraph}
extends this autographr()
now incorporatesggidentify()
functionality (closed #150){patchwork}
is now used to assemble multiple plots together- Fixed #204 layout issues with
ggatyear()
- Added new
measure
class and directed mostnode_*()
functions to create objects of this class- A print method for this class prints an abbreviated vector (the full vector is always still contained within the object) and prints elements from both modes in the event that the original object was two-mode (closed #202)
- A plot method replaces
ggdistrib()
and offers "hist" and "dens" methods for histograms and density plots respectively
- Added some edge-based centrality measures (closed #165)
edge_betweenness()
wraps{igraph}
's function of the same nameedge_closeness()
measures the closeness centrality of nodes in an edge adjacency
- Added several more measures of connectedness
node_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 length
- Removed
node_smallworld()
and addedgraph_smallworld()
, which works with both one- and two-mode networks (fixed #214)
- Added some guidance to the naming convention used in
node_quad_census()
- Extended
network_reg()
's formula-based systemnetwork_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 tovar1 + var2 + var1:var2
(closed #163)dist()
andsim()
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)- Added parallelisation to Monte Carlo based tests
- Refactored
network_reg()
, relying on{furrr}
for potential parallelisation and{progressr}
for progress reports (closed #185, #186) - Refactored
test_random()
andtest_permutation()
, relying on{furrr}
for potential parallelisation and{progressr}
for progress reports; note thatnSim
argument nowtimes
(closed #199)
- Refactored
- Added
{broom}
S3 methods fornetlm
andnetlogit
class objects (closed #183)tidy()
extracts coefficients and related valuesglance()
extracts model-level values such asR^2
- Added plot method for
netlm
andnetlogit
class objects (closed #216), which plots the empirical distribution for each test statistic, indicates percentiles relating to common critical values, and superimposes the observed coefficients - Added plot method for
cug_test
andqap_test
class objects, which plots the empirical distribution, highlighting tails beyond some critical value (closed #213), and superimposing the observed coefficient and, possibly, 0 - Relabelled some classes to avoid loading conflicts with
{sna}
print.block_model()
replacesprint.blockmodel()
plot.block_model()
replacesplot.blockmodel()
- Reduced the number of simulations used in tests, examples, and vignettes to avoid CRAN warnings
- Updated several names of datasets for consistency and conciseness
ison_southern_women
instead ofsouthern_women
ison_brandes
instead ofbrandes
ison_networkers
instead ofison_eies
ison_algebra
instead ofison_m182
ison_adolescents
instead ofison_coleman
- Extended several datasets
mpn_elite_mex
is extended with data from Pajek and with help from Frank Heberison_networkers
becomes named with information from{tnet}
- Elaborated documentation of most
mpn_*
andison_*
datasets, including references/sources
- Closed #149 by adding extra column to node_tie_census in
cluster_structural_equivalence()
for isolates- Note that this renders all isolates structurally equivalent
- Closed #168 by adding
{patchwork}
to suggested packages in DESCRIPTION - Updated function reference page on website
- Updated
add_
functions- Closed #178 by adding name to existing edges when further edges added in
mutate_edges()
- Closed #179 by inferring an attribute vector is for one of the two modes where possible in
add_node_attributes()
- Closed #178 by adding name to existing edges when further edges added in
- Added
is_
methods:is_multiplex()
,is_uniplex()
,is_acyclic()
- Added
edge_
functions to identify edges by properties:edge_mutual()
,edge_multiple()
,edge_loop()
- Fixed #172 by removing redundant header argument in
read_nodelist()
andread_edgelist()
- Fixed #173 by extending
as_network()
method to convert correctly form an{igraph}
to a{network}
object. - Removed
ggraphgrid()
documentation
- Replaced xlsx dependency in
read_edgelist()
andread_nodelist()
to readxl to avoid Java dependency - Replaced xlsx dependency in
write_edgelist()
andwrite_nodelist()
to avoid Java dependency- Note that these functions will now export to .csv rather than .xlsx
- Fixed direction recognition bug in
as_network()
,as_igraph()
, andis_directed()
- Closed #139 by adding vignette on importing and connecting data
- Added
read_
andwrite_
functions and updated documentation- Closed #137 by adding
read_edgelist()
for importing edgelists from Excel and csv files - Closed #170 by adding
read_pajek()
for importing .net and .paj files - Added
write_edgelist()
,write_nodelist
,write_pajek()
, andwrite_ucinet()
for exporting into various file formats (Excel, csv, Pajek, and UCINET) - Closed #140 by adding links to further data resources
- Closed #137 by adding
- Added
is_graph()
to check if an object is a graph or not - Extended
as_network()
to retain attributes - Fixed bugs in
as_
andto_
functions- Fixed bug in
as_
functions to convert from dataframes instead of tibbles - Fixed bug in conversion from network to igraph object in
as_igraph()
function - Fixed bug in
to_undirected()
function to work with network objects - Fixed bug in
to_main_component()
function so that it retains vertex attributes in network objects
- Fixed bug in
- Added
edge_attribute()
to grab a named edge attribute from a graph/network - Updated
to_unweighted()
to prevent conversion of network object into igraph object when deleting weights
- Closed #143 by adding nodal summary by cluster function
summarise_statistics()
- Fixed
network_reg()
example
- Closed #117 by updating the node/edge/arrow size limits in
autographr()
- Added start to network linear model part of practical 7 vignette
- Thanks to @BBieri for adding many tests and working on igraph<->network interchange
- Added
ison_eies
dataset for use in practical 7 vignette
- The
as_matrix()
method for networks now works with two-mode and weighted networks - The
as_igraph()
method for matrices now checks for weights independently of coercion - The
as_igraph()
method for networks now works with two-mode and weighted networks - The
as_network()
method for matrices now works with two-mode and weighted networks - The
as_network()
method for edgelists, igraph, and tidygraphs now works with weighted networks - Added
to_unnamed()
method for edge lists - Added
to_simplex()
method for matrices - Added
to_main_component()
method for networks - Added
to_multilevel()
method for matrices mutate_edges()
now coalesces rows of edges
- Fixed bug where clusters were not being reported in the correct order in
graph_blau_index()
- Fixed one-mode bug with
generate_permutation()
and thustest_permutation()
- Renamed
netlm()
tonetwork_reg()
to avoid frustrating conflictsnetwork_reg()
now accepts migraph-consistent objectsnetwork_reg()
now accepts formula terms such asego()
,alter()
, andsame()
- Added new issue templates and refined the wording in existing templates
- Improved documentation across many help pages
- Closed #146 by adding vignette on homophily
- Added
generate_permutation()
which takes an object and returns an object with the edges permuted, but retaining all nodal attributes - Made
generate_random()
also work with an existing object as input, in which it will return a random graph with the same dimensions and density - Consolidated data scripts
- Added
mutate_edges()
for adding new edges as attributes to existing edges in an object
- Closed #159 by fixing bug in
graph_blau_index()
- Closed #157 by fixing bug in
graph_ei_index()
- Closed #156 and #158 by fixing bugs with
test_random()
(defuncttest_cug()
)
- Closed #148 and #153 by making all
autographr()
arguments take variable names in quotation marks
- Closed #75 by updating the README
- Added some functions for grabbing key information from objects
node_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 ofgraph_nodes()
- Added some functions for adding key information to objects
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 graph
- Improved twomode and weighted handling of several functions
- Added diversity functions
graph_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 ties
- Closed #119 by adding
node_quad_census()
, especially useful for two-mode blockmodelling - Closed #95 and #120 by adding
graph_mixed_census()
- Closed #97 by adding test functions
test_random()
carries out a conditional uniform graph (CUG) testtest_permutation()
carries out a quadratic assignment procedure (QAP) test
- Closed #135 by reexporting
aes()
from{ggplot2}
- Added
node_shape
option toautographr()
- Updated various URLs in the vignettes to pass CRAN tests
- Reduce number of layout examples to avoid examples taking too long to run
- Closed #128 by adding
as_edgelist()
methods for converting other objects into edgelists- Note that this currently returns a tibble
- Using
to_unnamed()
on 'network' objects now operates on them directly - Elaborated
to_
documentation significantly - Fixed bug in
to_onemode()
that was trippingblockmodel()
on networks that are already one-mode - Added
is_connected()
to test whether network is connected,method =
argument can be specified asweak
orstrong
- Added
create_tree()
andcreate_lattice()
, and madecreate_star()
a bit faster for one-mode networks - Added
generate_smallworld()
andgenerate_scalefree()
, though only for one-mode networks currently
- Added rounding to centralization measures, by default
=2
- Closed #109 by adding centrality vignette
- Added
graph_dyad_census()
for more graph profile options - Fixed bug with
blockmodel_concor()
when an object was of class 'igraph' but not 'tbl_graph' - Fixed bug in how
blockmodel()
was treating two-mode networks - Closed #116 by offering both
"elbow"
and"strict"
methods for k-identification- Fixed bug in elbow method that biased heavily bipartitioned data
- Closed #131 by refactoring
ggidentify_clusters()
for speed- Takes now roughly half the time (see issue for details)
- Added
ggdistrib()
for easy plotting of degree and other node score distributions - Reexported
ggsave()
,xlab()
andylab()
from{ggplot2}
for easier plot annotation
- Closed #108 by adding cohesion and community vignette
- Fixed #122 by retaining edge weights from igraph in
as_matrix()
where available
- Split
graph_equivalency()
into the same for two-mode networks andgraph_congruency()
for three-mode (two two-mode) networks - Added option for
graph_reciprocity()
method - Added
graph_components()
andnode_components()
- Fixed #113 by retaining node labels through census functions
- Closed #114 by transposing
node_tie_census()
output so that it's consistent withnode_triad_census()
and future node_census functions - Closed #121 by renaming
cluster_triad_census()
togroup_triad_census()
- Added
group_tie_census()
- Added option to
autographr()
for plotting convex/concave hulls - Closed #124 by making
ggraphgrid()
a set of layout functions:layout_tbl_graph_frgrid()
orautographr(object, "frgrid")
for snapping Fruchterman-Reingold to a gridlayout_tbl_graph_kkgrid()
orautographr(object, "kkgrid")
for snapping Kamada-Kawai to a gridlayout_tbl_graph_gogrid()
orautographr(object, "gogrid")
for snapping graph optimisation to a gridggraphgrid()
has been deprecated
- Fixed some
ison_m182
documentation
- Fixed CRAN package check dependencies bug where 'knitr' and 'rmarkdown' were listed as Imports without being used in the package
- Fixed bug where bipartite edge lists were not being recognised as a twomode network by
as_igraph()
- Fixed bug where
to_uniplex()
was not returning a weighted graph
- Fixed bug where
blockmodel()
was not retaining node names in all parts of the object structure
- Closed #107 by choosing better brewer pallette (though note this is not a very deep pallette with only 9 colors)
- Expanded on the blockmodelling vignette with more intro, discussion, interpretation clues
- Fixed codecov url bug
- Removed several package dependencies by moving
plot_releases()
to another package - Made many dependencies more explicit
- Entire package 'linted'
- Added
is_signed()
to logically test whether the network is a signed network - Added
to_unsigned()
for extracting networks of either "positive" or "negative" ties from a signed network - Added
tbl_graph
methods for all otherto_
functions - Reexported
activate()
from{tidygraph}
- Added sensible plotting defaults for signed networks in
autographr()
- Removed
plot_releases()
from this package
- Refactored
graph_balance()
to be much faster, following David Schoch's{signnet}
package (see that package for further extensions)
- Updated the edge 'sign' attribute of
ison_marvel_relationships
to be a double (-1
/1
) to be compatible with the newgraph_balance()
and{signnet}
- Fixed coercion to
{igraph}
from data frames and updated read script - Added
to_main_component()
to extract the main component of a network - Added
to_onemode()
for moving to multimodal igraph objects - Added
to_uniplex()
method to delete edge types and their edges from multiplex networks - Added
to_simplex()
method to delete loops from a network - Added
to_named()
method for randomly naming unlabeled networks
- Added
ison_mm
,ison_mb
,ison_bm
, andison_bb
projection illustration data - Added
ison_karateka
community detection illustration data - Added
ison_marvel_teams
andison_marvel_relationships
datasets - Added
ison_m182
dataset of friends, social and task ties between 16 anonymous students - Renamed
adolescent_society
dataset toison_coleman
for consistency - Data now listed at the bottom of the website References page
- Added
graph_eigenvector()
for one mode networks - Added
graph_balance()
for measuring structural balance - Added
node_tie_census()
,node_triad_census()
,cluster_triad_census()
, andgraph_triad_census()
- Separated out
graph_clustering()
into the cohesion measuresgraph_density()
,graph_reciprocity()
,graph_transitivity()
, andgraph_equivalence()
- Fixed
node_smallworld()
to use separated cohesion measures
- Added
blockmodel()
which masks its{sna}
namesake but has the advantages of working with two-mode networks and retaining node names where available- Added
cluster_structural_equivalence()
andcluster_regular_equivalence()
as bases for blockmodelling - Added
reduce_graph()
for creating a network from a blockmodel
- Added
- Added first vignette on structural holes, structural equivalence and regular equivalence blockmodelling
- Added
autographr()
for plotting graphs with sensible defaults- Uses a more contrastive discrete palette when some nodal attribute is given
- Uses an alpha for edges, and edges will now be sized by edge weight, where available
- Uses node labels, sans borders, where available
- Uses different shaped nodes, and different fonts, for different node sets
- Removed
ggraphlabel()
since core functionality now provided by autographr
- Added ability for
ggidentify()
to identify the node with the highest value of a specified node-level measure - Added a couple of more specific visualization functions
- Added
ggatyear()
for subsetting and plotting edgelists at year - Updated
gglineage()
to return a graph colored according to lineage- Added tick marks
- Added
- Added several more specific functions for diagnosing and visualising blockmodels
- Added
ggtree()
for neatly visualising hierarchical clusters - Added
ggidentify_clusters()
for identifying which number of clusters is most appropriate following the elbow method
- Added
- Fixed bug related to
ggraph::theme_graph()
present in a few different visualisation functions
- Added
brandes
dataset for teaching centrality measures - Added
adolescent_society
dataset for teaching friendship paradox - Added
read_edgelist()
for importing Excel-created edgelists directly
- Added
ggraphlabel()
for one-function (1F) plotting label-based network graphs - Added
ggevolution()
for 1F-plotting begin/end graph comparisons - Added
ggraphgrid()
for 1F snap-to-grid graph layouts based on Fruchterman-Reingold or Kamada-Kawai - Added
ggidentify()
for 1F identifying nodes with maximum scores based on some arbitrary function
- Added
to_undirected()
for symmetrising networks of all types - Made existing
to_
functions S3 methods
- Fixed Unicode char bug in coercion documentation
-
Closed #100 by converting
as_
coercion functions to S3 methods- Added a little more readable documentation
- Fixed bug with
as_matrix()
weighting - Fixed bug with
as_tidygraph()
- Closed #92 by adding
gglineage()
for graphing a citation network through time - Closed #99 by adding
ggevolution()
for graphing two timepoints of the same network side by side - Closed #102 by adding
ggraphgrid()
for locking a graph to a grid - Slight improvements to
plot.igraph()
defaults
- Added tidygraph lookups to
node_
functions
-
Fixed bug in
as_matrix()
with frame matrix by dropping (rarely necessary) functionality- Improved handling of weights column in three-column edgelists
- Improved documentation of
as_
functions
-
Fixed bugs in
plot_releases()
with more graceful handling of http errors- Added online condition to example in documentation
- Specified encoding for more silent operation
- Removed unused package dependencies (
{R6}
,{ggraph}
) - Avoided M1mac check issue by dropping sensitive
netlm()
test - Added some tests
- Renamed
binarise()
toto_unweighted()
- Added
to_unnamed()
for unlabelling networks
- Extended R version dependence back to 3.6.*
- Added
binarise()
for unweighting networks - Fixed bug in
as_tidygraph()
when passed a tbl_graph directly
- Added
plot_releases()
for more general use - Fixed bug in
plot.igraph()
with layouts and one-mode graphs
-
Updated README
- Updated installation instructions for CRAN
- Added package functions overview
-
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- Added
is_weighted()
- Added
is_directed()
- Added
is_labelled()
- Added
-
Added @csteglich 's
read_ucinet()
andwrite_ucinet()
functionsread_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 objects
-
Updated
mpn_bristol
documentation -
Added
create_star()
function- Added in-star/out-star option via
directed =
argument - Updated
create_
documentation
- Added in-star/out-star option via
-
Renamed
sample_affiliation()
togenerate_random()
- Rewrote
generate_random()
to be able to generate random one- or two-mode networks - Updated documentation
- Rewrote
- Added test for
print.blockmodel()
2021-04-13
- Reran
usethis::use_mit_license("James Hollway")
. MIT License file now contains only the standard two lines. - Removed
\dontrun
from examples.netlm()
now runs in <5 seconds. - Fixed missing website item
2021-04-11
- Closed #21 by elaborating DESCRIPTION file in preparation for CRAN submission
- Updated several old URLs in documentation
- Closed #85 by adding
as_network()
to coerce objects into network class - Modified other coercion functions to also work with network class objects
2021-03-03
- Moved package's Github repository from
jhollway/
tosnlab-ch/
organisation - Trimmed some package dependencies and added others
-
Elaborated documentation for the remainder of the datasets
- Now all datasets in this package are titled with whether they are one-mode, two-mode, or three-mode
- Fixed bug in
graph_degree()
where data was hard-coded in
-
Closed #18 by adding
blockmodel_concor()
for employing the CONCOR algorithm to blockmodel both one-mode and two-mode networks- Added a new print method for "blockmodel"-class objects based on the
print.blockmodel()
method in the{sna}
package that also prints blockmodel results for two-mode networks consistently - Added a new plot method for "blockmodel"-class objects that leverages
{ggplot2}
for pretty plotting and that better inherits names from the underlying object
- Added a new print method for "blockmodel"-class objects based on the
2021-02-06
- Closed #81 by making
{migraph}
depend on R versions 4.0 or above - Updated PR template
- Added functions for class conversion between migraph-consistent graph formats
as_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 class- Closed #79 by adding
is_twomode()
function to check whether network is two-mode on all object types
-
Renamed several datasets and elaborated their documentation
mpn_mexicanpower
was renamed tompn_elite_mex
mpn_powerelite
was renamed tompn_elite_usa_advice
mpn_opensecrets
was renamed tompn_elite_usa_money
-
Reconstructed several creation functions to take universal (one-mode/two-mode) input: specifying
n = 5
creates a one-mode network, while specifyingn = c(5, 5)
creates a two-mode network- Added
create_empty()
- Added
create_complete()
- Closed #65 by extending
create_ring()
to create rings of varying breadth - Closed #66 by extending
create_components()
(renamed fromcreate_silos()
) to create networks with varying numbers of components - Added
sample_affiliation()
for random two-mode networks - Removed
create_match()
andcreate_nest()
- Added
-
Renamed
centrality_
functions withnode_
prefix and ensured they all also wrapped one-mode measurescentrality_degree()
renamed tonode_degree()
centrality_closeness()
renamed tonode_closeness()
centrality_betweenness()
renamed tonode_betweenness()
- Closed #31 by adding
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 centralization
-
Re-added
graph_clustering()
for calculating (see Knoke et al 2021):- transitivity on one-mode networks
- shared four-cycles on two-mode networks
- congruent four-cycles on three-mode networks
-
Re-added
netlm()
for performing linear regression for multimodal network data- Closed #76 by changing
netlm()
to accept a formula-based input - Closed #77 by adding
print.summary.netlm()
fornetlm()
regressions
- Closed #76 by changing
- Closed #82 by re-adding a version
plot.igraph()
with sensible defaults for two-mode networks
2021-01-11
- pkgdown now deploys after release
- Reexported a number of
{igraph}
and{tidygraph}
functions for internal use - Completed some
convert_
andproject_
documentation
- Updated mpn_ data source references
-
Added centrality measures that take (and if necessary return) matrix, igraph, or tidygraph objects, and offer a correct normalization for two-mode networks
- Added
centrality_degree()
- Added
centrality_closeness()
- Added
centrality_betweenness()
- Added
2021-01-08
-
Package name change from roctopus to
{migraph}
- Closed #50 with new logo
-
Now builds Linux binary too
- Added
project_rows()
andproject_cols()
to make it easier to project two-mode networks in different formats (matrix, igraph, tidygraph) into projected versions in the same format - Closed #30 with conversion from different data frame formats, e.g. weighted and unweighted edgelists, into an incidence matrix with
as_incidence_matrix()
- Renamed data related to the book "Multimodal Political Networks" with "mpn_" prefix
2020-11-06
-
Data creation updated for
{tidygraph}
defaults- Renamed
create_lattice()
tocreate_chain()
to avoid conflicts withtidygraph::create_lattice()
- Renamed
create_poles()
tocreate_silos()
- Renamed
create_random()
toplay_twomode()
to avoid conflicts withtidygraph::play_bipartite()
- Added export options for all
create_
andplay_
functions astbl_graph
(default),igraph
, and base matrix - Updated tests for new
create_
andplay_
function names
- Renamed
-
Packaged data updated for
{tidygraph}
defaults- Renamed packaged data from book to
mpn_
- Renamed packaged data from book to
2020-08-18
- Renamed
twomode_netlm()
tonetlm2()
- Fixed various printing issues with
netlm2()
- Added tests for
netlm2()
- Added tests for
create_random()
- Added
opensecrets
data - Added
powerelite
data
2020-07-21
- Renamed data documentation scripts
- Added tests for most
create_()
functions - Renamed test scripts and removed
context()
declaration create_nest()
now exports matrix object
2020-07-20
- Added
row_project()
andcol_project()
functions to make it easier to remember project directions
2020-07-19
- Added
mexicanpower
dataset - Added
senate112
datasets - Updated
evs
datasets to matrices
- Added
df_to_mat()
function for converting regular adjacency and incidence data frames into matrices
2020-07-17
- Added
ryanair
dataset from Christopoulos 2006
- Split workflow into pull-request and merge/push prompted actions
- Added codecov calculation to workflows
2020-07-03
- Added
evs
datasets from Knoke et al 2020
2020-06-30
- Added
bristol
dataset from Knoke et al 2020
2018-12-20
- Added hex sticker
- Updated README with more detailed installation information
- Pkgdown exports to https://jhollway.bitbucket.io/roctopus/
- Added
twomode_modularity()
to calculate modularity in two-mode networks
- Added
plot_multilevel()
that rotates a force-directedigraph
plot in three dimensions to reveal multilevel structure - Added
plot_globalnet()
to map a multilevel network on to a javascript, rotatable global
2018-08-25
- Added
twomode_smallworld()
to calculate observed/expected clustering, observed/expected path-length, and the observed/expected clustering ratio - Added
twomode_2x2()
to identify dominance and coherence values for networks over time - Updated
twomode_coherence()
to allow for introduction of second-mode attributes - Renamed
twomode_fragmentation()
totwomode_components()
- Added
plot_2x2()
to plot values through a two-by-two matrix
2018-08-14
- Renamed package to
roctopus
- Added two-mode @family tag to documentation
- Added
twomode_fragmentation()
to calculate number of components in two-mode networks and identify their membership - Added
twomode_dominance()
to allow an nodal attribute to be passed to the function to weight the centralization measure - Added
twomode_coherence()
to calculate Jaccard similarity
-
Added
plot_twomode()
, which wrapsplot(igraph::graph_from_incidence_matrix())
with some useful defaults- coloured grayscale by default, with green/blue option
- shaped circles and squares by default
2018-07-30
- Initialised package
- Added
README.md
file with instructions on how to install package - Added
LICENSE
file and pointed to bug/issue tracker - Added a
NEWS.md
file to track changes to the package
- Added
twomode_clustering()
to calculate percentage of three-paths closed by four-paths - Added
twomode_lattice()
to create two-mode lattices - Added
twomode_centralization_degree()
to calculate degree centralization in two-mode networks, for rows, columns, or both - Added
twomode_centralization_between()
to calculate betweenness centralization in two-mode networks - Added
twomode_constraint()
to calculate network constraint in two-mode networks - Added
arrange.vars()
to rearrange variables by position