These functions offer methods for summarising the closure in configurations in one-, two-, and three-mode networks:

  • net_by_reciprocity() measures reciprocity in a (usually directed) network.

  • net_by_transitivity() measures transitivity in a network.

  • net_by_cyclicality() measures cyclicality in a (necessarily directed) network.

  • net_by_equivalency() measures equivalence or reinforcement in a (usually two-mode) network.

  • net_by_congruency() measures congruency across two two-mode networks.

net_by_reciprocity(.data, variant = c("default", "ratio"), method = NULL)

net_by_transitivity(.data)

net_by_cyclicality(.data)

net_by_equivalency(.data)

net_by_congruency(.data, object2)

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

variant

Character string naming which variant of the measure to compute, where more than one definition of the same quantity is in use. The variant chosen is reported when the result is printed.

method

Deprecated. The former spelling of variant. Still accepted, but warns; please use variant instead.

object2

Optionally, a second (two-mode) matrix, igraph, or tidygraph

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

Details

For one-mode networks, shallow wrappers of igraph versions exist via net_reciprocity and net_transitivity.

For two-mode networks, net_equivalency calculates the proportion of three-paths in the network that are closed by fourth tie to establish a "shared four-cycle" structure.

For three-mode networks, net_congruency calculates the proportion of three-paths spanning two two-mode networks that are closed by a fourth tie to establish a "congruent four-cycle" structure.

net_by_reciprocity() takes a variant: either "default", the share of ties that are reciprocated, or "ratio", the share of dyads that are mutual rather than asymmetric. See ?igraph::reciprocity.

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

Cyclicality

Where transitivity asks how often a two-path \(i \to j \to k\) is closed by a tie \(i \to k\), cyclicality asks how often it is closed in the other direction, by \(k \to i\): $$C = \frac{|\{i \to j \to k \to i\}|}{|\{i \to j \to k\}|}$$ The two capture different social logics. Transitivity is the signature of hierarchy and of "a friend of a friend is a friend", while cyclicality is the signature of generalised exchange, where resources circulate around a loop rather than flowing consistently in one direction.

A two-mode network contains no cycle of odd length, so it scores 0 here, just as it does for transitivity. Use net_by_equivalency() for closure in a two-mode network, which counts four-cycles instead.

In an undirected network every two-path closed in one direction is also closed in the other, so cyclicality and transitivity coincide.

Equivalency

The net_by_equivalency() function calculates the Robins and Alexander (2004) clustering coefficient for two-mode networks. The coefficient is a proportion of three-paths, and so is defined on binary data; weighted networks are dichotomised before it is calculated.

References

On cyclicality and generalised exchange

Bearman, Peter. 1997. "Generalized Exchange". American Journal of Sociology 102(5): 1383-1415. doi:10.1086/231087

On equivalency or four-cycles

Robins, Garry L, and Malcolm Alexander. 2004. Small worlds among interlocking directors: Network structure and distance in bipartite graphs. Computational & Mathematical Organization Theory 10(1): 69–94. doi:10.1023/B:CMOT.0000032580.12184.c0 .

On congruency

Knoke, David, Mario Diani, James Hollway, and Dimitris C Christopoulos. 2021. Multimodal Political Networks. Cambridge University Press. Cambridge University Press. doi:10.1017/9781108985000

Examples

net_by_reciprocity(ison_southern_women)
#> # Reciprocity, normalized [0, 1]
#> [1] 1
net_by_transitivity(ison_adolescents)
#> # Transitivity, normalized [0, 1]
#> [1] 0.45
net_by_cyclicality(ison_networkers)
#> # Cyclicality, normalized [0, 1]
#> [1] 0.591
net_by_equivalency(ison_southern_women)
#> # Equivalency, normalized [0, 1]
#> [1] 0.468