Package

  • Fixed URL error in a vignette

Package

  • Dropped vignettes for now to ensure package makes it on to CRAN

Package

  • Fixed some URL issues for CRAN

Manipulation

  • Split to_*() functions into reformatting (changing properties) and transforming (changing dimensions) documentation

Package

  • Updated the DESCRIPTION and CITATION
  • Renamed edge_*() to tie_*() 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

Manipulation

  • Added methods for converting network.goldfish objects (and linked events and nodelists) to migraph-compatible objects (closed #96)
  • Renamed add_node_attributes() to add_node_attribute() and add_edge_attributes() to add_tie_attribute()

Marks

Measures

  • 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)

Motifs

  • Added print method for graph_motif (fixed #234)

Memberships

  • Equivalence examples now \dontrun

Models

Mapping

  • 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”

Data

  • 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 and mpn_cow_igo datasets (thanks @JaelTan)
  • Fixed non-unique names in mpn_elite_mex

Memberships

  • Further shortened equivalence examples

Measures

  • Added node_reach() for calculating reach centrality (closed #196)
  • Separated (again) centrality and centralisation documentation

Memberships

  • Shortened equivalence examples

Package

  • Reduced package dependencies by 5
  • Relabelled scripts to follow website function structure
    • Added @family tags for improved cross-referencing
    • Added a lot more references/sources
  • README elaborated, including listing functions and data in the package
  • Switched to S3 classes as outputs for most functions

Making

  • All create_ and generate_ functions now:
  • Some create_ functions can now take a membership vector or split into equal partitions by default
  • generate_random() now inherits attributes from any network

Manipulation

  • 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() and reduce_graph() are now deprecated
    • to_multilevel.igraph() now only works on two-mode networks; returns the original network if passed a one-mode network
  • Fixed some bugs in a number of is_ 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 networks
    • is_connected() now returns result for strong components if directed and weak components if undirected
  • as_igraph.data.frame() now infers third column as weight

Marks

Measures

  • A new "edge_measure" S3 class has been added, along with print() and plot() 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 results
    • graph_components() now calculates strong components for directed networks else weak components
    • print.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 new script for measuring structural holes, including node_constraint()
  • node_betweenness() no longer needs nobigint argument; just uses default from igraph

Motifs

  • Added "node_motif" S3 class for the output of node_*_census() functions
    • Added print.node_motif() for tibble-printing of census results
    • Added summary.node_motif() to summarise censuses by a membership vector, replacing group_tie_census() and group_triad_census(), which are now deprecated
  • Added "graph_motif" S3 class for the output of graph_*_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

Memberships

Models

  • A single "graph_test" S3 class replaces "cug_test" and "qap_test"
    • plot.graph_test() replaces plot.cug_test() and plot.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 replacing plot.block_model()

Mapping

Data

  • ison_algebra’s edge attributes now named “friends”, “social”, and “tasks”

Package

  • 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

Making

  • Folded m argument into p for generate_random(), p can now be passed an integer to indicate the number of ties the network should have

Manipulation

Mapping

  • Layouts now use times argument instead of maxiter

Measures

  • 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 and weights arguments have been removed and are now imputed, if this is undesired please use to_*() first
    • node_degree() now calculates strength centrality if network is weighted
    • node_eigenvector() and graph_eigenvector() both work with two-mode networks
    • Added edge_degree() and edge_eigenvector(), which both just apply the corresponding nodal measure to the edge graph
  • edge_mutual() renamed to edge_reciprocal()
  • Closed #225 by adding graph_assortativity()

Modelling

  • Closed #151 with blockmodel coloring for signed graphs

Data

  • Dropped weight from mpn_elite_mex
  • Dropped direction from ison_brandes

Package

  • Streamlined some examples to reduce testing time
  • Fixed a DOI URL for Ortmann and Brandes reference

Package

  • Streamlined some tests to reduce testing time

Manipulation

  • is_multiplex.igraph() and is_multiplex.tbl_graph() now checks for multiple edge attributes
  • Added strain() as wrapper for dplyr’s filter(), renamed to avoid conflicts with {stats}

Data

  • ison_algebra now unlabelled

Package

  • 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 the Dark2 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

Making

  • Moved to @describeIn documentation (closed #215)
  • Distinguished directed 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 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 edges
  • read_ucinet() now enjoys clearer documentation

Manipulation

  • All as_*() functions now retain weights where present; if you want an unweighted result, use is_unweighted() afterwards
    • as_edgelist.network() now better handles edge weights
    • as_matrix.igraph() now better handles edge signs
  • Pivoted to S3 methods for most manipulation functions for better dispatching and performance
  • Added to_edges() for creating adjacency matrices using a network’s edges as nodes
  • Renamed project_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 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

Mapping

Measures

  • Added new measure class and directed most node_*() 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)
  • Added several more measures of connectedness
  • Removed node_smallworld() and added graph_smallworld(), which works with both one- and two-mode networks (fixed #214)

Motifs

Models

  • Extended 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)
  • Added parallelisation to Monte Carlo based tests
  • Added broom S3 methods for netlm and netlogit class objects (closed #183)
    • tidy() extracts coefficients and related values
    • glance()extracts model-level values such as R^2
  • Added plot method for 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 coefficients
  • Added plot method for cug_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
  • Relabelled some classes to avoid loading conflicts with sna
    • print.block_model() replaces print.blockmodel()
    • plot.block_model() replaces plot.blockmodel()
  • Reduced the number of simulations used in tests, examples, and vignettes to avoid CRAN warnings

Data

  • Updated several names of datasets for consistency and conciseness
    • 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
  • Extended several datasets
    • mpn_elite_mex is extended with data from Pajek and with help from Frank Heber
    • ison_networkers becomes named with information from tnet
  • Elaborated documentation of most mpn_* and ison_* datasets, including references/sources

Modelling

Package

  • Closed #168 by adding patchwork to suggested packages in DESCRIPTION
  • Updated function reference page on website

Manipulation

  • 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()
  • Added is_ methods: is_multiplex(), is_uniplex(), is_acyclic()
  • Added edge_ functions to identify edges by properties: edge_mutual(), edge_multiple(), edge_loop()

Import and export

Package

Import and export

Manipulation

Package

  • Closed #139 by adding vignette on importing and connecting data

Import and export

  • Added read_ and write_ functions and updated documentation

Manipulation

  • Added is_graph() to check if an object is a graph or not
  • Extended as_network() to retain attributes
  • Fixed bugs in as_ and to_ 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
  • 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

Measures

Modelling

Visualisation

Package

  • Added start to network linear model part of practical 7 vignette
  • Thanks to @BBieri for adding many tests and working on igraph<->network interchange

Data

  • Added ison_eies dataset for use in practical 7 vignette

Manipulation

  • 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

Measures

  • Fixed bug where clusters were not being reported in the correct order in graph_blau_index()

Modelling

Package

  • Added new issue templates and refined the wording in existing templates
  • Improved documentation across many help pages
  • Closed #146 by adding vignette on homophily

Data

  • 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

Manipulation

  • Added mutate_edges() for adding new edges as attributes to existing edges in an object

Measures

Visualisation

Package

  • Closed #75 by updating the README

Manipulation

  • Added some functions for grabbing key information from objects
    • node_names() for quickly accessing node labels
    • node_attribute() for quickly accessing a certain nodal attribute
    • edge_weights() for quickly accessing edge weights
    • graph_nodes() for quickly accessing a count of nodes in the graph, note that for two-mode networks this will be a vector of length 2
    • graph_edges() for quickly accessing a count of edges in the graph
    • graph_dimensions() is currently a copy of graph_nodes()
  • Added some functions for adding key information to objects
    • add_node_attributes() for adding particular nodal attributes
    • add_edge_attributes() for adding edges from another graph
    • copy_edge_attributes() for copying all nodal attributes from another graph
  • Improved twomode and weighted handling of several functions

Measures

  • Added diversity functions

Modelling

Visualization

Package

  • Updated various URLs in the vignettes to pass CRAN tests
  • Reduce number of layout examples to avoid examples taking too long to run

Classes

  • 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 tripping blockmodel() on networks that are already one-mode
  • Added is_connected() to test whether network is connected, method = argument can be specified as weak or strong

Data

Measures

  • Added rounding to centralization measures, by default =2
  • Closed #109 by adding centrality vignette

Modelling

  • 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)

Visualization

  • Added ggdistrib() for easy plotting of degree and other node score distributions
  • Reexported ggsave(), xlab() and ylab() from ggplot2 for easier plot annotation

Package

  • Closed #108 by adding cohesion and community vignette

Classes

  • Fixed #122 by retaining edge weights from igraph in as_matrix() where available

Measures

Modelling

Visualization

Data

  • Fixed some ison_m182 documentation

Package

  • Fixed CRAN package check dependencies bug where ‘knitr’ and ‘rmarkdown’ were listed as Imports without being used in the package

Classes

  • 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

Models

  • Fixed bug where blockmodel() was not retaining node names in all parts of the object structure

Visualization

  • Closed #107 by choosing better brewer pallette (though note this is not a very deep pallette with only 9 colors)

Vignettes

  • Expanded on the blockmodelling vignette with more intro, discussion, interpretation clues

Package

  • Fixed codecov url bug
  • Removed several package dependencies by moving plot_releases() to another package
  • Made many dependencies more explicit
  • Entire package ‘linted’

Classes

  • 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 other to_ functions
  • Reexported activate() from tidygraph

Visualisation

  • Added sensible plotting defaults for signed networks in autographr()
  • Removed plot_releases() from this package

Measures

  • Refactored graph_balance() to be much faster, following David Schoch’s signnet package (see that package for further extensions)

Data

  • Updated the edge ‘sign’ attribute of ison_marvel_relationships to be a double (-1/1) to be compatible with the new graph_balance() and signnet

Classes

  • 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

Data

  • Added ison_mm, ison_mb, ison_bm, and ison_bb projection illustration data
  • Added ison_karateka community detection illustration data
  • Added ison_marvel_teams and ison_marvel_relationships datasets
  • Added ison_m182 dataset of friends, social and task ties between 16 anonymous students
  • Renamed adolescent_society dataset to ison_colemanfor consistency
  • Data now listed at the bottom of the website References page

Measures

Models

Visualization

  • 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 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
  • Fixed bug related to ggraph::theme_graph() present in a few different visualisation functions

Data

  • Added brandes dataset for teaching centrality measures
  • Added adolescent_society dataset for teaching friendship paradox
  • Added read_edgelist() for importing Excel-created edgelists directly

Visualization

  • 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

Manipulation

  • Added to_undirected() for symmetrising networks of all types
  • Made existing to_ functions S3 methods

Classes

  • Fixed Unicode char bug in coercion documentation

Classes

  • Closed #100 by converting as_ coercion functions to S3 methods

Visualisation

  • 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

Analysis

  • Added tidygraph lookups to node_ functions

Classes

  • 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

Visualisation

  • 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

Package

  • Removed unused package dependencies (R6, ggraph)
  • Avoided M1mac check issue by dropping sensitive netlm() test
  • Added some tests

Classes

Package

  • Extended R version dependence back to 3.6.*

Classes

  • Added binarise() for unweighting networks
  • Fixed bug in as_tidygraph() when passed a tbl_graph directly

Visualization

  • Added plot_releases() for more general use
  • Fixed bug in plot.igraph() with layouts and one-mode graphs

Package

  • Updated README

    • Updated installation instructions for CRAN
    • Added package functions overview
  • Added CITATION details

Classes

  • 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

Data

Models

  • Added test for print.blockmodel()

2021-04-13

Package

  • 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

Package

  • Closed #21 by elaborating DESCRIPTION file in preparation for CRAN submission
  • Updated several old URLs in documentation

Classes

  • 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

Package

  • Moved package’s Github repository from jhollway/ to snlab-ch/ organisation
  • Trimmed some package dependencies and added others

Data

  • 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

Measures

Models

  • 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

2021-02-06

Package

  • Closed #81 by making migraph depend on R versions 4.0 or above
  • Updated PR template

Classes

  • Added functions for class conversion between migraph-consistent graph formats
  • as_matrix() function to coerce objects into an adjacency or incidence matrix class
  • as_igraph() function to coerce objects into an igraph graph class
  • as_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

Data

  • Renamed 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

Measures

  • Renamed centrality_ functions with node_ prefix and ensured they all also wrapped one-mode measures

  • 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

  • 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

Models

  • 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() for netlm() regressions

Visualization

  • Closed #82 by re-adding a version plot.igraph() with sensible defaults for two-mode networks

2021-01-11

Package

  • pkgdown now deploys after release
  • Reexported a number of igraph and tidygraph functions for internal use
  • Completed some convert_ and project_ documentation

Data

  • Updated mpn_ data source references

Analysis

  • 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()

2021-01-08

Package

  • Package name change from roctopus to migraph

    • Closed #50 with new logo
  • Now builds Linux binary too

Manipulation

  • Added 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 format
  • Closed #30 with conversion from different data frame formats, e.g. weighted and unweighted edgelists, into an incidence matrix with as_incidence_matrix()

Data

  • Renamed data related to the book “Multimodal Political Networks” with “mpn_” prefix