These functions return values relating to how connected a network is and the number of nodes or edges to remove that would increase fragmentation.

  • net_by_cohesion() measures the minimum number of nodes to remove from the network needed to increase the number of components.

  • net_by_toughness() measures the number of nodes that would need to be removed from a network to increase its number of components.

  • net_by_adhesion() measures the minimum number of ties to remove from the network needed to increase the number of components, or the minimum total weight of such ties in a weighted network.

  • net_by_strength() measures the number of ties that would need to be removed from a network to increase its number of components.

net_by_cohesion(.data)

net_by_adhesion(.data)

net_by_strength(.data, limit = 20)

net_by_toughness(.data, limit = 20)

Arguments

.data

A network object of class stocnet, igraph, tbl_graph, network, or similar. Internally any of these will be coerced to an efficient implementation. For more information on possible coercions, see e.g. manynet::as_stocnet().

limit

The largest network net_by_strength() and net_by_toughness() will enumerate: the number of ties for the first and of nodes for the second. By default 20. Above this each stops rather than running for hours. Raise it to measure a larger network anyway.

Value

A network_measure numeric score.

The object also carries the measure it computed, the range its values can fall within, and whether and how those values were normalized. These are shown as a one-line header when the object is printed. Where a measure offers a choice between several ways of counting the same thing, it also carries the variant it used. All can be retrieved with attr().

Cognitive social structures

A cognitive social structure records each node's report of the ties in the whole network, in a by column that names who reported each tie. Counting every report as a tie of its own would count each tie once for every perceiver who reports it. So the functions here first combine the reports into the locally aggregated structure of Krackhardt (1987), with the intersection rule: a tie exists if both of its ends report it, and a message says so. A tie that names no reporter is kept as it is.

A tie-level function still returns one value for each report, so that the result can be added back to the network it was given. Each report takes the value of the tie that it reports. A report of a tie that is not in the aggregated structure takes NA, or FALSE for a mark. tie_is_random() is the exception, and draws among the reports.

To combine the reports in a different way, do this before the function, e.g. with manynet::to_aggregated(over = "by").

Krackhardt, David. 1987. "Cognitive social structures". Social Networks 9(2): 109-134. doi:10.1016/0378-8733(87)90009-8

Cost of the enumerated measures

net_by_cohesion() and net_by_adhesion() are connectivity problems that {igraph} solves directly, so they run on a network of any size. net_by_strength() and net_by_toughness() instead take a minimum over every subset of the tieset or the nodeset, which is \(2^n\) subsets. Their cost therefore quadruples for every two nodes added: a ring of 16 nodes takes about 8 seconds, one of 20 over two minutes, and one of 30 more than a day. limit stops each before it becomes a hang.

Weighted networks

net_by_adhesion() reads a tie's weight as its capacity, and so returns the smallest total weight of ties whose removal would increase the number of components, the network's minimum cut, rather than the smallest number of such ties. This is also the smallest maximum flow between any two of its nodes; see node_by_flow() for the flow between particular nodes. Use manynet::to_unweighted() first to count ties instead. The other measures documented here count nodes or ties whatever their weight.

Signed networks

net_by_adhesion() asks what holds a network together, and a negative tie is hostility rather than a channel along which cohesion travels. Where the network is signed, it therefore considers only the positive ties, and says so. Use manynet::to_unsigned() first to control this yourself. The other measures documented here use every tie whatever its sign.

References

On cohesion

White, Douglas R and Frank Harary. 2001. "The Cohesiveness of Blocks In Social Networks: Node Connectivity and Conditional Density." Sociological Methodology 31(1): 305-59. doi:10.1111/0081-1750.00098

Examples

net_by_cohesion(fict_greys)
#> # Node connectivity [0, Inf)
#> [1] 0
net_by_cohesion(to_giant(fict_greys))
#> # Node connectivity [0, Inf)
#> [1] 1
net_by_adhesion(fict_greys)
#> # Tie connectivity [0, Inf)
#> [1] 0
net_by_adhesion(to_giant(fict_greys))
#> # Tie connectivity [0, Inf)
#> [1] 1
net_by_strength(ison_adolescents)
#> # Strength [0, Inf)
#> [1] 0.5
net_by_toughness(ison_adolescents)
#> # Toughness [0, Inf)
#> [1] 0.5