                 Changes in version 1.7.2 (2026-09-17)                  

Package

  - Fixed the attach-time version check so that it no longer leaves
    stale messages for up to a week

Models

  - Fixed play_diffusions() so that it drops, with a warning, runs where
    nothing spreads beyond the seed, instead of stopping with "arguments
    imply differing number of rows"
  - Set a seed in the test_fit() test so that it does not fail at random

Tutorials

  - Updated intro tutorial
      - Added sections on types, missing data, indexing with [, [[, and
        $, changing data frames with mutate() and filter(), random
        numbers and seeds, reading errors and writing reproducible
        examples, and files and projects
      - Moved packages to a closing "Where next" section that points to
        the {manynet} tutorials
      - Replaced dead links, removed T/F shorthand, and fixed typos

                        Changes in version 1.7.1                        

Package

  - Raised the minimum required version of {netrics} to 1.0.1

Tutorials

  - Updated intro tutorial

                 Changes in version 1.7.0 (2026-08-30)                  

Package

  - Raised the minimum versions of the stocnet dependencies:
    manynet 2.3.1 and autograph 1.2.2
  - Updated CONTRIBUTING
  - Fixed the attach-time version check by parsing version strings with
    package_version()

Models

  - Fixed play_diffusions() for stocnet input via initial coercion (re
    stocnet/manynet#172)

Data

  - Converted every mpn_* dataset to the stocnet class, in line with
    {manynet}
  - Removed the weight tie attribute from the datasets that are not
    weighted
  - Merged mpn_cow
      - This combines interstate trade and IGO membership into one
        multilevel network of 116 "states" and 40 "IGOs", with trade and
        membership tie layers
      - mpn_cow_trade and mpn_cow_igo are retained, because {manynet}
        currently reads a network with two named modes as undirected,
        which symmetrises the trade layer of mpn_cow, and because
        to_layer() does not recover that layer either
        (stocnet/manynet#170, stocnet/manynet#171)
      - Fixed mpn_cow_trade missing-data coding from -9 (759 cells) to
        NA
      - Added a scope node attribute to the IGOs in mpn_cow and
        mpn_cow_igo, recording whether an organisation is "global" or
        "regional"
  - Merged mpn_senate
      - This combines the 112th Congress data into one multilevel
        network of 93 senators, 78 PACs, and 25 bills
      - mpn_senate_dem and mpn_senate_rep are not party networks but
        record two communities of one network and their intersection;
        the community node attribute holds "A", "B", or "both"
      - Cells that neither community covers were never observed, and are
        recorded as missing rather than as absent ties
      - Where the two communities disagree, in 9 of their 640 shared
        cells, community A governs, since it agrees with the overlap
        file in all 640
      - mpn_senate_dem, mpn_senate_rep, and mpn_senate_over are
        deprecated and will be removed in 1.8.0
  - Merged mpn_evs_ita, mpn_evs_deu, and mpn_evs_gbr
      - These combine each country's European Values Study data for 1990
        and 2008 into one two-mode network, with the year recorded in
        the time tie attribute
      - These are repeated cross-sections, not a panel, so use
        over_time() not over_waves()
      - The six year-by-country datasets are deprecated and will be
        removed in 1.8.0
  - Converted mpn_elite_mex
  - Converted mpn_elite_usa_advice
      - It now names its two modes, "directors" and "think tanks"
  - Converted mpn_elite_usa_money
      - It now names its three modes, "elites", "organisations", and
        "candidates"
  - Converted mpn_bristol
      - It now names its three modes, "individuals", "organisations",
        and "events"
  - Converted mpn_ryanair

                        Changes in version 1.6.9                        

Package

  - Improved stocnet version check, consolidating into {migraph} so that
    it runs once rather than three times
      - Also consults each package's GitHub repository, so a fix that is
        released but not yet published on CRAN is reported; where both
        sources agree, CRAN is recommended, since it needs no compiler
        or {remotes}
      - Results are cached for seven days in
        tools::R_user_dir("migraph", "cache"), so most sessions make no
        network request at all
      - Check is skipped in non-interactive sessions, fails silently
        when offline or when no repository is configured, and can be
        disabled with options(snet_check_version = FALSE)

Learning

  - Improved empty run_tute() listing of tutorials to suggest
    manynet>autograph>netrics>migraph sequence

                 Changes in version 1.6.8 (2026-07-31)                  

2026-07-31

Package

  - Replaced all remaining uses of the magrittr pipe %>% with the native
    pipe |>, in package code, tests, examples, and tutorials
      - This fixes the predict(), net_regression(), and test_*()
        examples, which still called %>% after the re-export was removed
        in 1.6.3 and so were relying on {dplyr} being attached
      - %>% is no longer imported from {dplyr}
      - The pipes section of tutorial0 now teaches |> only, noting %>%
        as something readers may encounter in older code

Models

  - Substantially accelerated net_regression() (by about 35x), resolving
    the CRAN NOTE about the running time of the predict() examples
      - Permutations now operate directly on the matrices rather than
        coercing to and from a network object each time, deferring to
        manynet::to_permuted() again once manynet gains a method for
        matrix input
      - Vectorising the matrix list for each fit now uses base
        operations rather than constructing a data frame
      - Results are unchanged: for a given seed, the same permutations
        are drawn and the same coefficients, test statistics, and
        p-values are returned

                        Changes in version 1.6.7                        

2026-07-31

Package

  - Updated version dependencies
  - Updated CONTRIBUTING to reflect current architecture
  - Updated Github Actions workflows
      - Updated action versions in prchecks and pushrelease workflows
      - Added PR metadata checks to prchecks workflow, for the
        DESCRIPTION version bump and the PR title and description
        conventions
      - Moved development dependencies from Suggests into
        Config/Needs/build, Config/Needs/check, and Config/Needs/website
  - Updated pull request template to drop the items now checked
    automatically
  - Removed manynet and autograph tutorial testing

                 Changes in version 1.6.6 (2026-06-24)                  

2026-06-23

Package

  - Improved goodpractices
  - Dropped netrics tutorial testing

                        Changes in version 1.6.5                        

2026-06-22

Package

  - Updated netrics dependency to 0.3.1 to fix reverse dependency issue

                        Changes in version 1.6.4                        

2026-06-22

Package

  - Updated manynet dependency to 1.2.1 to fix reverse dependency issue
  - Updated pull request template
  - Updated README to make reference to {netrics} too

                        Changes in version 1.6.3                        

2026-06-19

Package

  - Removed %>% reexport plumbing and refreshed generated reexport docs
    accordingly

Testing

  - Updated diffusion goodness-of-fit logic (test_fit()) and its tests
    to use the newer diffusion representation (notably t)

                 Changes in version 1.6.2 (2026-04-17)                  

2026-04-17

Testing

  - Fixed namespace issues

Tutorials

  - Added function testing for migraph tutorials
  - Added function testing for manynet tutorials (> v2.0.2)
  - Updated examples in solutions in migraph tutorials where errors
    could creep in
  - Skipped extracting some solutions in migraph where errors could
    creep in
  - Removed test_tutorials() from the public API; use run_tute() and
    extract_tute() for supported tutorial execution and extraction
    workflows

                        Changes in version 1.6.1                        

2026-04-14

Package

  - Fixed logo sizing and location
  - Added tests for predict() methods
  - Added testing for {netrics} tutorials

Tutorials

  - Fixed run_tute() and extract_tute() to identify and use tutorials in
    {netrics}
  - Updated diversity tutorial with new netrics names
  - Updated diffusion tutorial with new netrics names
  - Updated ergm tutorial with new netrics names

Testing

  - Fixed how test_fit() handles diffusion models and non-equal length
    step results

                 Changes in version 1.6.0 (2026-04-04)                  

2026-04-04

Package

  - Updated logo
  - Now Depends on {netrics}
  - Fixed generic arguments and rely on dplyr::tibble() instead of
    tibble::tibble() internally

Testing

  - Fixed test_permutation() to use netrics::net_by_density()
  - Fixed net_regression() to use manynet::to_permuted()

Tutorials

  - Moved run_tute() and extract_tute() from {manynet} to here
  - Fixed fict_marvel example
  - Fixed diversity tutorial to work with fict_marvel
  - Fixed ergm tutorial to work with {netrics}
  - Moved tutorial0/data from {manynet}
  - Added tutorial testing, with a quiet option
  - Tutorials are highlighted in the README

                        Changes in version 1.5.7                        

  - Using fict_marvel in tests
  - Added tidy(), glance(), and summary() methods for sienaFit class
    objects
  - Added summary.ergm()

                 Changes in version 1.5.6 (2025-11-19)                  

2025-11-19

Tutorials

  - Updated diffusion tutorial moving from grapht() to graphs() in
    places
  - Added gifs to diffusion tutorial

                        Changes in version 1.5.5                        

2025-11-12

Modelling

  - Added tidy() and glance() methods for ergm objects
  - Added predict() methods for netlm and netlogit objects

Tutorials

  - Added ergm tutorial

                        Changes in version 1.5.4                        

2025-11-05

Testing

  - Added 'over_memb' class construction for over_membership() results

                 Changes in version 1.5.3 (2025-10-27)                  

2025-10-27

Testing

  - Fixed how test_configuration() was generating configuration networks
  - Added testing for test_configuration()
  - Added testing for over_waves() and over_membership()

Data

  - Fixed png width specifications from percentage-based to fixed pixel
    dimensions for HTML documentation for mpn_elite_mex and
    mpn_elite_usa
  - Fixed reference formatting and moved references from @source to
    @references tag

                 Changes in version 1.5.2 (2025-09-12)                  

2025-09-12

Package

  - Fixed note where {autograph} was unused

Regression

  - Fixed note for net_regression() where specification advice was not
    printed

                        Changes in version 1.5.1                        

2025-09-10

Package

  - {migraph} now depends on {autograph}, so loading {migraph} will load
    all related packages
  - Updated codecov call in workflows with org secret

Diffusion

  - Fixed bug in play_diffusions() where it expected diff_model output
  - Added print and summary methods for diffusions
  - Fixed bug in over_waves()

Regression

  - Added test for multivariate specifications
  - Improved specification advice to use manynet::snet_info(), making it
    silenceable

Data

  - Dropped whorulesamerica url, which kept getting redirected

                 Changes in version 1.5.0 (2025-06-20)                  

2025-06-19

Meta

  - Moved over_*() functions over from {manynet}
  - Moved play_diffusions() over from {manynet}

Models

  - Fixed division of/by zero bug for net_regression(~ same(), ...)

                 Changes in version 1.4.5 (2024-12-02)                  

2024-11-30

Package

  - Fixed dependency issue

                        Changes in version 1.4.4                        

2024-11-29

Package

  - Updated github actions

Models

  - Updated net_regression()
      - It now works (better) with unweighted networks
      - Added print methods that combine tidy() and glance()
      - Fixed effect naming error
      - Updated same() to work for two-mode networks
      - Updated specification advice for testing for homophily in
        two-mode networks

                 Changes in version 1.4.3 (2024-11-06)                  

2024-11-06

Package

  - Using different github actions for renaming and releasing binaries
    (thanks @auzaheta)
  - Updated manynet dependence to >=1.0.5

Models

  - Added test_configuration()

Data

  - 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

Tutorial

  - Updated diversity tutorial
      - More elaborate start
      - Broader figure widths
      - Dropped alter(Discipline) from net_regression() call

                 Changes in version 1.4.2 (2024-09-04)                  

2024-09-03

Package

  - Using github actions download artifact v4 to address dependabot
    security warning

Models

  - test_permutation() now uses manynet::to_permuted() instead of the
    older manynet::generate_permutation() syntax

                 Changes in version 1.4.1 (2024-07-19)                  

2024-07-19

Package

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

Models

  - network_reg() renamed to net_regression() for consistency
  - Refactored several functions to avoid {tidyr} dependency for
    pivoting longer and wider

                        Changes in version 1.4.0                        

2024-07-18

Package

  - 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

Measures, Motifs, and Memberships

  - All measures, motifs, and memberships have migrated to {manynet}
      - see {manynet} > v1.0.0 for more details

Models

  - Added test_distribution() to test whether two vectors/distributions
    are from the same distribution
  - test_gof() renamed to test_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 to
    manynet::generate_random() instead of the original object, which is
    processed more intuitively within manynet::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

Tutorials

  - Added descriptions to tutorials
  - Renamed regression tutorial the diversity tutorial

                 Changes in version 1.3.4 (2024-03-07)                  

2024-03-07

Measures

  - Fixed DOI issue for Burchard/Cornwell paper

                        Changes in version 1.3.3                        

2024-03-06

Measures

  - Added node_brokering_activity() and node_brokering_exclusivity()
    from Hamilton et al (2020)
  - node_degree() now returns strength centrality (alpha = 1) for
    weighted networks by default
  - node_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)

Members

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

                 Changes in version 1.3.2 (2024-01-25)                  

2024-01-25

Measures

  - Updated network_scalefree() to work even when P scores are not
    available

Members

  - Updated node_fluid() to work with different versions of {igraph}

                        Changes in version 1.3.1                        

2024-01-24

Package

  - Completed significant documentation updates

Measures

  - over_*() now reverts future plan on exit

Motifs

  - node_brokerage_census() and network_brokerage_census() now treat
    two-mode networks correctly (closed #35)

Models

  - test_random() now reverts future plan on exit
  - test_permutation() now reverts future plan on exit
  - network_reg() now reverts future plan on exit

                        Changes in version 1.3.0                        

2024-01-24

Package

  - Migrated package repository to 'stocnet' organisation
  - Significant documentation updates

Marks

  - Migrated remaining marks functions to {manynet}

Measures

  - 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 of node_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

Members

  - Fixed #287 by making node_tie_census() and node_triad_census() work
    with the new multiplex format in {manynet} (which relies on a "type"
    tie attribute rather than multiple tie attributes)
      - This restores functionality to node_structural_equivalence() and
        node_regular_equivalence()
      - Incidental speed improvements
  - Added node_fluid() community detection algorithm
  - Added node_roulette() for identifying groups of nodes that haven't
    interacted before

Models

  - Migrated play_*() functions to {manynet}, including as_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

                 Changes in version 1.2.1 (2023-12-17)                  

2023-12-17

Measures

  - Fixed documentation issues in node_adoption_time()

                        Changes in version 1.2.0                        

2023-12-17

Marks

  - 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

Measures

  - 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 uses node_is_infected() for more flexibility
  - node_thresholds() now works with incomplete diffusions
      - Adds exposure data where not provided

Members

  - node_adopter() now correctly identifies non-adopters

Models

  - play_diffusion()
      - Now records only the first exposure event until susceptible
        again
      - Now uses node_is_exposed() and node_exposure() internally
      - Made play_diffusion() code easier to understand and debug
      - Added some tests for play_diffusion()

                        Changes in version 1.1.9                        

2023-12-13

Marks

  - Added node_is_exposed() function to mark nodes (logical) that are
    currently exposed to diffusion content in a network.

Measures

  - 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_*() and network_*() measures.

Models

  - Added as_diffusion() function to convert a diffusion event table
    into a diff_model object.
  - Added test_gof() function for testing goodness-of-fit in diffusion
    models.

Tutorials

  - Updates to tutorial 7 (diffusion):
      - Added section on R-nought and Herd Immunity.
      - Fixed layouts for plots using autographs() and autographd() for
        diff_model objects.

                        Changes in version 1.1.8                        

2023-12-06

Measures

  - 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() and node_adopter() to return
        node_member and node_measure objects, which makes printing and
        summarising better.
      - Updated node_infection_length() and network_infection_length()
        which measures the average length nodes remain infected.

Members

  - 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.

Models

  - Updated diff_model object to carry original network data for
    plotting.
  - Updated play_diffusion() to forward exposure/contact information to
    the events table.

Tutorials

  - Added plots for diffusion models in tutorial 7 using autographs()
    and autographd().

                        Changes in version 1.1.7                        

2023-11-15

Package

  - Added diffusion measures to website.

Measures

  - Fixed documentation issues for diffusion measures.

Marks

  - Added node_is_mentor() for indicating nodes with high indegree.

Models

  - 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.

Tutorials

  - Added multi-choice questions to tutorial 8.

                        Changes in version 1.1.6                        

2023-11-08

Measures

  - Added first drafts of various diffusion measures:
    network_transmissability(), node_infection_length(),
    network_infection_length(), network_reproduction(),
    node_adoption_time(), node_adopter(), node_thresholds().

Models

  - Fixed documentation for play_diffusion().
  - Fixed bug in labelling in plot results for SIR models.

Tutorials

  - Added plots using autographs() and elaboration for tutorial 7.

                 Changes in version 1.1.5 (2023-11-02)                  

2023-11-02

Members

  - Fixed documentation issue with summary.node_member()

Motifs

  - Fixed documentation issue with node_census()

                        Changes in version 1.1.4                        

2023-11-01

Marks

  - print.node_mark() and print.tie_mark() now allow infinite 'n' width

Measures

  - print.node_measure() and print.tie_measure() now allow infinite 'n'
    width
      - Digit rounding is now fixed in print and summary methods

Members

  - print.node_member() now prints the vector
      - Previous functionality is now available in summary.node_member()

                        Changes in version 1.1.3                        

2023-10-25

Tutorials

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

Measures

  - 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"
  - Added Krackhardt's graph theoretic dimensions of hierarchy measures,
    including
      - network_connectedness()
      - network_efficiency()
      - network_upperbound()
  - Added node_eccentricity(), which wraps igraph::eccentricity()
  - Added node_neighbours_degree(), which wraps igraph::knn()
  - Added tie_cohesion() to measure how embedded ties are

Members

  - Added node_louvain() community detection algorithm
  - Added node_leiden() community detection algorithm
      - Note that this function optimises the Constant Potts Model
        rather than modularity

                        Changes in version 1.1.2                        

2023-10-18

Tutorials

  - 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

Members

  - Improved printing of node_members and node_measures objects

                        Changes in version 1.1.1                        

2023-10-11

Package

  - Added more questions to the Centrality tutorial (3)
  - Added more instruction and more questions to the Community tutorial
    (4)

Measures

  - Fixed scale, labelling, and other issues in plot.node_measure()

Members

  - Added node_optimal(), node_infomap(), node_spinglass(), and
    node_leading_eigen() to extend the community detection options
    available in the package

                 Changes in version 1.1.0 (2023-10-04)                  

Package

  - Added Macports option to the README (closes #274, thank you
    @barracuda156)
  - Updates to the Centrality tutorial

Measures

  - Added node_outdegree(), node_indegree(), network_outdegee(), and
    network_indegree() wrappers
  - Added network_reach()
  - Added node_harmonic() and network_harmonic()
  - Added node_pagerank()
  - plot.node_measure() now returns a single plot for one-mode networks
    with a frequency histogram and a density overlay

Data

  - Upgraded all old igraph data to work with most recent version

                 Changes in version 1.0.1 (2023-07-20)                  

Measures

  - Fixed backends in node_closeness() and node_betweenness() in
    preparation for an {igraph} deprecation (merci @maelle)

Models

  - Fixed #272 by making test_random() and test_permutation() rely on
    graph dimensions rather than graph order (thank you finding this
    @rabenton)

Tutorials

  - Fixed some defunct function names

                 Changes in version 1.0.0 (2023-06-15)                  

Package

  - Breaking changes by moving the making, manipulating, and mapping
    functions to {manynet}
      - All create_*() and generate_*() functions are now in {manynet}
      - All read_*() and write_*() functions are now in {manynet}
      - All as_*() and to_*() functions are now in {manynet}
      - Most is_*() functions are now in {manynet}
      - All add_*() and join_*() functions are now in {manynet}
      - Functions that grab metadata from network objects, e.g.
        network_nodes(), node_names(), and tie_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}
  - Most functions now expect .data as their first argument; previously
    it was object
  - Moved data vignette (now a tutorial) and visualisation tutorial to
    {manynet}
  - Updated README and pkgdown structure accordingly

Measures

  - Added over_time() and over_waves() to measure (potentially
    parallelised) over split graphs
      - Added class construction and a plot method for resulting
        network_measures object
  - 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 for igraph::alpha_centrality()
  - Added node_power() for calculating beta or Bonacich centrality,
    mostly just a wrapper for igraph::power_centrality(), though also
    correctly accounts for two-mode networks
  - Renamed node_homophily() to node_heterophily(), which is more
    accurate and in line with the scale's direction
      - node_heterophily() now calculates EI indices in a faster,
        vectorised form, instead of the older, slower solution that
        calculated network_homophily() over all ego networks
  - Renamed network_homophily() to network_heterophily()
      - network_heterophily() now ignores missing values
  - network_congruency() is now more explicit about its data
    expectations

Models

  - k_strict(), k_elbow() and k_silhouette() are now exported and
    documented
  - Added play_segregation() for playing Schelling segregation models
    with various parameters
  - Fixed some diff_model and diffs_model plotting irregularities
  - Fixed bug in how merges were constructed as a distance matrix in
    cluster_concor()

Data

  - Moved ison_ data to {manynet}

                 Changes in version 0.13.2 (2022-12-20)                 

Package

  - Updated README with better structuring and explanation
      - Also improved figure quality

Makes

  - Added read_matrix() for importing CSVs of adjacency/incidence
    matrices
  - Added read_dynetml() for importing DynetML .xml files (closed #261)

Manipulations

  - 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

                       Changes in version 0.13.1                        

Package

  - Added hints, solutions, comments, and questions to equivalence and
    centrality tutorials
  - Changed theme across all tutorials

Makes

  - Fixed bug in read_pajek() where multiple networks/ties were causing
    an issue for partition assignment

Models

  - Fixed bug in play_diffusion() relating to latency inversion

                 Changes in version 0.13.0 (2022-11-30)                 

Package

  - Added hints and questions to community tutorial
  - Added diffusion tutorial

Marks

  - 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() and node_is_min() now take a "rank" argument for
    selecting more than the first ranked maxima or minima

Manipulations

  - 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

Measures

  - Added network_richness() and node_richness() for calculating the
    richness (a common diversity measure) of an attribute in a network

Models

  - 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

Mapping

  - Added autographs() for autoplotting lists of networks

                       Changes in version 0.12.6                        

Package

  - 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

Manipulations

  - mutate() now works with igraph objects

Marks

  - Added node_is_random() for selecting n nodes at random

Models

  - Added first draft of (SI) play_diffusion() model
      - Added diff_model class, together with print, summary, and plot
        methods

                       Changes in version 0.12.5                        

Package

  - Added topology tutorial

Makes

  - Fixed integer recognition bug in generate_random()

Manipulating

  - Added more similarity options for projection (to_mode1() and
    to_mode2())
  - Fixed bug in to_redirected.igraph() where routing through an
    edgelist caused problems

Measures

  - 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

Data

  - Added ison_lotr dataset for examples using interactions among Lord
    of the Rings characters in the books

                       Changes in version 0.12.4                        

Package

  - Converted 'visualisation' vignette to a learnr tutorial
  - Deleted troublesome URLs to correlatesofwar.org
  - Brokerage census gets their own documentation page

                       Changes in version 0.12.3                        

Package

  - Converted 'community' vignette to a learnr tutorial
  - Converted 'equivalence' vignette to a learnr tutorial

Motifs

  - Added node names to node_motif class where available
  - Added node_brokerage_census() and network_brokerage_census() for
    counting Gould-Fernandez brokerage roles

                       Changes in version 0.12.2                        

Package

  - Fixed several typos in the centrality vignette and reexported
    figures
  - Added community detection vignette

Make

  - create_lattice() now conforms to other create_*() 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)

Marks

  - Added is_eulerian() for a logical expression of whether the network
    has an Eulerian path

Measures

  - 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

Memberships

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

Mapping

  - Reversed blue/red colour assignment for binary variables

                 Changes in version 0.12.1 (2022-10-04)                 

Manipulations

  - 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

Marks

  - 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

Measures

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

Mapping

  - Fixed autographr() tests to work with new version of {ggraph}
    (closed #247, thanks @henriquesposito)

                 Changes in version 0.12.0 (2022-09-27)                 

Package

  - graph_*() functions now renamed to network_*() 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

                       Changes in version 0.11.4                        

Package

  - Added igraph/migraph layout comparison to README

                 Changes in version 0.11.3 (2022-09-13)                 

Package

  - Fixed CRAN LaTeX issue relating to underscores in manual figures

Mapping

  - Fixed bug in plotting space coordinates for named two-mode networks
  - Suppressed messages relating to 'graph' class being defined by
    multiple packages

                       Changes in version 0.11.2                        

Package

  - Filled in some further documentation
  - Dropped some older defunct functions

Measures

  - Renamed graph_blau_index() to graph_diversity()
  - Renamed graph_ei_index() to graph_homophily()

Mapping

  - Fixed bug with autographr()'s "node_group" argument

                       Changes in version 0.11.1                        

Package

  - Fixed documentation issues (URLs, equations)

                       Changes in version 0.11.0                        

Package

  - 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

Manipulation

  - Added as_graphAM() methods for all migraph-consistent object classes
    so {Rgraphviz} can be used effectively
  - Added as_igraph(), as_tidygraph(), and as_network() methods for
    {RSiena} sienaData objects (thanks @JaelTan, closed #94)
  - Added as_edgelist() and as_matrix() methods for network.goldfish
    class objects
  - The "twomode" argument in as_matrix() is now NULL by default,
    allowing both one-mode and two-mode coercion
  - to_mode1() and to_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() to to_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
  - Filled in a number of S3 methods
      - to_blocks(), to_subgraph(), and to_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(), and to_unsigned()
      - Added edgelist methods for to_undirected() and to_uniplex()
      - Added matrix method for to_uniplex()
  - Fixed bug where to_unweighted() didn't respect the "threshold"
    specified

Marks

  - 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

Measures

  - graph_core() now runs node_core() (see below) if no "membership"
    vector is provided

Membership

  - Added node_core() for partitioning nodes into core and periphery
    memberships
  - Fixed floating point bug in k_strict()

Models

  - Added "tertius" effect for network_reg()
  - "ego" and "alter" effects now work better for two-mode networks in
    network_reg()

Mapping

  - 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

Data

  - mpn_cow_igo now includes "polity2" scores
  - Added visualisations to some ison_ and mpn_ data documentation
    (closed #237)

                 Changes in version 0.10.6 (2022-07-03)                 

Package

  - Fixed URL error in a vignette

                       Changes in version 0.10.5                        

Package

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

                       Changes in version 0.10.4                        

Package

  - Fixed some URL issues for CRAN

Manipulation

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

                       Changes in version 0.10.3                        

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

  - 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'

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

  - cluster_concor() and cluster_hierarchical() are now exported

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

                       Changes in version 0.10.2                        

Memberships

  - Further shortened equivalence examples

                       Changes in version 0.10.1                        

Measures

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

Memberships

  - Shortened equivalence examples

                       Changes in version 0.10.0                        

Package

  - Reduced package dependencies by 5
      - {concaveman}, {ggdendro}, {oaqc} are now Suggests; the user is
        prompted to install them when required in autographr(),
        plot.member(), and node_quad_census() respectively
      - {stringr} and {tibble} replaced with base or other code and
        therefore no longer necessary
  - 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
      - Several methods, e.g. print(), plot(), summary(), have been
        added for them (see appropriate sections below)

Making

  - All create_ and generate_ 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
  - Some create_ functions can now take a membership vector or split
    into equal partitions by default
      - create_components() no longer accepts a number of components,
        instead relying on the membership vector
      - Added create_core() for creating core-periphery graphs
  - 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

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

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()
      - Added several additional measures of structural holes:
        node_bridges(), node_redundancy(), node_effsize(),
        node_efficiency(), node_hierarchy()
  - 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

  - 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() replaces ggtree()
  - 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 for cluster within
            node_equivalence(); blockmodel_concor() is now deprecated
            (closed #123)
          - "elbow" now an option for k selection within
            node_equivalence(); ggidentify_clusters() is now deprecated
          - Added "silhouette" and "strict" options for k selection
            (closed #197)
          - Added option for k to be defined
          - There is now an argument distance passed to stats::dist that
            defines the distance metric (closed #36)
          - The argument range constrains the number of k 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() replaces
        cluster_structural_equivalence()
      - node_regular_equivalence() replaces
        cluster_regular_equivalence()
  - 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 connected identification scheme that mirrors equivalence
    identification in many respects
      - Added node_coreness() for nodes' k-core score (closed #200)
      - Added node_strong_components() and node_weak_components() for
        more direct calls; node_components() now calculates strong
        components for directed networks else weak components

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

  - 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

Data

  - ison_algebra's edge attributes now named "friends", "social", and
    "tasks"

                 Changes in version 0.9.3 (2022-04-14)                  

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

  - Refactored to_edges() to be ~26 times faster on average
  - Corrected edge labelling in to_edges()
  - Using to_subgraph() now instead of dplyr::filter() or strain()

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

                 Changes in version 0.9.2 (2022-03-31)                  

Package

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

                        Changes in version 0.9.1                        

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

                        Changes in version 0.9.0                        

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 matrix, data.frame, network, igraph, and tbl_graph methods
        for is_twomode(), is_directed(), is_weighted(), is_labelled(),
        is_signed(), is_multiplex(), is_complex(), and is_graph()
      - Added data.frame methods for as_edgelist(), and to_unweighted(),
        and improved the data.frame method for as_matrix()
      - Added data.frame and matrix methods for to_named() and
        to_unsigned()
  - 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

  - Added 'visualization' vignette that starts to introduce how
    autographr() works and how {ggraph} extends this
  - autographr() now incorporates ggidentify() functionality (closed
    #150)
  - {patchwork} is now used to assemble multiple plots together
  - Fixed #204 layout issues with ggatyear()

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)
      - edge_betweenness() wraps {igraph}'s function of the same name
      - edge_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 network
      - edge_bridges() identifies edges that serve as bridges in a
        network
      - graph_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 components
      - graph_length() measures the average path length
      - graph_diameter() measures the longest path length
  - Removed node_smallworld() and added graph_smallworld(), which works
    with both one- and two-mode networks (fixed #214)

Motifs

  - Added some guidance to the naming convention used in
    node_quad_census()

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
      - Refactored network_reg(), relying on {furrr} for potential
        parallelisation and {progressr} for progress reports (closed
        #185, #186)
      - Refactored test_random() and test_permutation(), relying on
        {furrr} for potential parallelisation and {progressr} for
        progress reports; note that nSim argument now times (closed
        #199)
  - 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

                 Changes in version 0.8.13 (2021-12-19)                 

Modelling

  - Closed #149 by adding extra column to node_tie_census in
    cluster_structural_equivalence() for isolates
      - Note that this renders all isolates structurally equivalent

                       Changes in version 0.8.12                        

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

                       Changes in version 0.8.11                        

Import and export

  - Fixed #172 by removing redundant header argument in read_nodelist()
    and read_edgelist()

Package

  - Fixed #173 by extending as_network() method to convert correctly
    form an {igraph} to a {network} object.
  - Removed ggraphgrid() documentation

                       Changes in version 0.8.10                        

Import and export

  - Replaced xlsx dependency in read_edgelist() and read_nodelist() to
    readxl to avoid Java dependency
  - Replaced xlsx dependency in write_edgelist() and write_nodelist() to
    avoid Java dependency
      - Note that these functions will now export to .csv rather than
        .xlsx

Manipulation

  - Fixed direction recognition bug in as_network(), as_igraph(), and
    is_directed()

                        Changes in version 0.8.9                        

Package

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

Import and export

  - Added read_ and write_ 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(), and
        write_ucinet() for exporting into various file formats (Excel,
        csv, Pajek, and UCINET)
      - Closed #140 by adding links to further data resources

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

  - Closed #143 by adding nodal summary by cluster function
    summarise_statistics()

Modelling

  - Fixed network_reg() example

Visualisation

  - Closed #117 by updating the node/edge/arrow size limits in
    autographr()

                        Changes in version 0.8.8                        

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

  - Fixed one-mode bug with generate_permutation() and thus
    test_permutation()
  - Renamed netlm() to network_reg() to avoid frustrating conflicts
      - network_reg() now accepts migraph-consistent objects
      - network_reg() now accepts formula terms such as ego(), alter(),
        and same()

                        Changes in version 0.8.7                        

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

  - 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() (defunct
    test_cug())

Visualisation

  - Closed #148 and #153 by making all autographr() arguments take
    variable names in quotation marks

                        Changes in version 0.8.6                        

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
      - graph_blau_index() for summarising diversity of an attribute in
        a network or group
      - graph_ei_index() for summarising diversity of an attribute over
        a network's ties

Modelling

  - 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) test
      - test_permutation() carries out a quadratic assignment procedure
        (QAP) test

Visualization

  - Closed #135 by reexporting aes() from {ggplot2}
  - Added node_shape option to autographr()

                 Changes in version 0.8.5 (2021-10-30)                  

Package

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

                        Changes in version 0.8.4                        

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

  - Added create_tree() and create_lattice(), and made create_star() a
    bit faster for one-mode networks
  - Added generate_smallworld() and generate_scalefree(), though only
    for one-mode networks currently

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

                        Changes in version 0.8.3                        

Package

  - Closed #108 by adding cohesion and community vignette

Classes

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

Measures

  - Split graph_equivalency() into the same for two-mode networks and
    graph_congruency()for three-mode (two two-mode) networks
  - Added option for graph_reciprocity() method
  - Added graph_components() and node_components()

Modelling

  - Fixed #113 by retaining node labels through census functions
  - Closed #114 by transposing node_tie_census() output so that it's
    consistent with node_triad_census() and future node_census functions
  - Closed #121 by renaming cluster_triad_census() to
    group_triad_census()
  - Added group_tie_census()

Visualization

  - Added option to autographr() for plotting convex/concave hulls
  - Closed #124 by making ggraphgrid() a set of layout functions:
      - layout_tbl_graph_frgrid() or autographr(object, "frgrid") for
        snapping Fruchterman-Reingold to a grid
      - layout_tbl_graph_kkgrid() or autographr(object, "kkgrid") for
        snapping Kamada-Kawai to a grid
      - layout_tbl_graph_gogrid() or autographr(object, "gogrid") for
        snapping graph optimisation to a grid
      - ggraphgrid() has been deprecated

Data

  - Fixed some ison_m182 documentation

                 Changes in version 0.8.2 (2021-10-25)                  

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

                 Changes in version 0.8.1 (2021-10-22)                  

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}

                        Changes in version 0.8.0                        

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

  - Added graph_eigenvector() for one mode networks
  - Added graph_balance() for measuring structural balance
  - Added node_tie_census(), node_triad_census(),
    cluster_triad_census(), and graph_triad_census()
  - Separated out graph_clustering() into the cohesion measures
    graph_density(), graph_reciprocity(), graph_transitivity(), and
    graph_equivalence()
  - Fixed node_smallworld() to use separated cohesion measures

Models

  - 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() and
        cluster_regular_equivalence() as bases for blockmodelling
      - Added reduce_graph() for creating a network from a blockmodel
  - Added first vignette on structural holes, structural equivalence and
    regular equivalence blockmodelling

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

                        Changes in version 0.7.2                        

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

                 Changes in version 0.7.1 (2021-09-25)                  

Classes

  - Fixed Unicode char bug in coercion documentation

                        Changes in version 0.7.0                        

Classes

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

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

                 Changes in version 0.6.6 (2021-05-13)                  

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

                 Changes in version 0.6.5 (2021-05-10)                  

Package

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

Classes

  - Renamed binarise() to to_unweighted()
  - Added to_unnamed() for unlabelling networks

                        Changes in version 0.6.4                        

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

                 Changes in version 0.6.3 (2021-04-26)                  

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
    
      - Added is_weighted()
      - Added is_directed()
      - Added is_labelled()

Data

  - Added @csteglich 's read_ucinet() and write_ucinet() functions
    
      - read_ucinet() offers a file-picker when file path unknown
      - read_ucinet() now imports to an igraph-class object by default,
        with an argument to allow other alternatives
      - write_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

  - Renamed sample_affiliation() to generate_random()
    
      - Rewrote generate_random() to be able to generate random one- or
        two-mode networks
      - Updated documentation

Models

  - Added test for print.blockmodel()

                 Changes in version 0.6.2 (2021-04-15)                  

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

                        Changes in version 0.6.1                        

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

                        Changes in version 0.6.0                        

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

  - Fixed bug in graph_degree() where data was hard-coded in

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

                        Changes in version 0.5.0                        

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
    
      - 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 from
        create_silos()) to create networks with varying numbers of
        components
      - Added sample_affiliation() for random two-mode networks
      - Removed create_match() and create_nest()

Measures

  - Renamed centrality_ functions with node_ prefix and ensured they all
    also wrapped one-mode measures
    
      - centrality_degree() renamed to node_degree()
      - centrality_closeness() renamed to node_closeness()
      - centrality_betweenness() renamed to node_betweenness()
      - 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 centralization
      - graph_closeness() for closeness centralization
      - graph_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

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

                        Changes in version 0.4.1                        

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

                        Changes in version 0.4.0                        

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

                        Changes in version 0.3.0                        

2020-11-06

Data

  - Data creation updated for {tidygraph} defaults
    
      - Renamed create_lattice() to create_chain() to avoid conflicts
        with tidygraph::create_lattice()
      - Renamed create_poles() to create_silos()
      - Renamed create_random() to play_twomode() to avoid conflicts
        with tidygraph::play_bipartite()
      - Added export options for all create_ and play_ functions as
        tbl_graph (default), igraph, and base matrix
      - Updated tests for new create_ and play_ function names

  - Packaged data updated for {tidygraph} defaults
    
      - Renamed packaged data from book to mpn_

                        Changes in version 0.2.6                        

2020-08-18

Analysis

  - Renamed twomode_netlm() to netlm2()
  - Fixed various printing issues with netlm2()

Package

  - Added tests for netlm2()
  - Added tests for create_random()

Data

  - Added opensecrets data
  - Added powerelite data

                        Changes in version 0.2.5                        

2020-07-21

Package

  - Renamed data documentation scripts
  - Added tests for most create_() functions
  - Renamed test scripts and removed context() declaration
  - create_nest() now exports matrix object

                        Changes in version 0.2.4                        

2020-07-20

Package

  - Added row_project() and col_project() functions to make it easier to
    remember project directions

                        Changes in version 0.2.3                        

2020-07-19

Data

  - Added mexicanpower dataset
  - Added senate112 datasets
  - Updated evs datasets to matrices

Package

  - Added df_to_mat() function for converting regular adjacency and
    incidence data frames into matrices

                        Changes in version 0.2.1                        

2020-07-17

Data

  - Added ryanair dataset from Christopoulos 2006

Package

  - Split workflow into pull-request and merge/push prompted actions
  - Added codecov calculation to workflows

                        Changes in version 0.2.0                        

2020-07-03

Data

  - Added evs datasets from Knoke et al 2020

                        Changes in version 0.1.0                        

2020-06-30

Data

  - Added bristol dataset from Knoke et al 2020

                        Changes in version 0.0.4                        

2018-12-20

Package

  - Added hex sticker
  - Updated README with more detailed installation information
  - Pkgdown exports to https://jhollway.bitbucket.io/roctopus/

Analysis

  - Added twomode_modularity() to calculate modularity in two-mode
    networks

Visualization

  - Added plot_multilevel() that rotates a force-directed igraph plot in
    three dimensions to reveal multilevel structure
  - Added plot_globalnet() to map a multilevel network on to a
    javascript, rotatable global

                        Changes in version 0.0.3                        

2018-08-25

Analysis

  - 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() to twomode_components()

Visualisation

  - Added plot_2x2() to plot values through a two-by-two matrix

                        Changes in version 0.0.2                        

2018-08-14

Package

  - Renamed package to roctopus
  - Added two-mode @family tag to documentation

Analysis

  - 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

Visualisation

  - Added plot_twomode(), which wraps
    plot(igraph::graph_from_incidence_matrix()) with some useful
    defaults
    
      - coloured grayscale by default, with green/blue option
      - shaped circles and squares by default

                        Changes in version 0.0.1                        

2018-07-30

Package

  - 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

Analysis

  - 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
