These functions return logical vectors the length of the ties in a network identifying which hold certain properties or positions in the network.

  • tie_is_triangular() marks ties that are part of triangles.

  • tie_is_cyclical() marks ties that are part of cycles.

  • tie_is_triplet() marks ties that are part of transitive triplets.

  • tie_is_simmelian() marks ties that are both in a triangle and fully reciprocated.

  • tie_is_imbalanced() marks ties that are part of imbalanced triads.

  • tie_is_transitive() marks ties that complete transitive closure.

They are most useful in highlighting parts of the network that are cohesively connected.

tie_is_triangular(.data)

tie_is_transitive(.data)

tie_is_triplet(.data)

tie_is_cyclical(.data)

tie_is_simmelian(.data)

tie_is_imbalanced(.data)

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

Value

A tie_mark logical vector the length of the ties in the network, giving either TRUE or FALSE for each tie depending on whether the condition is matched.

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

Signed networks

These marks ask only whether a two-path exists, as a census does, so a tie counts however it is signed. Where the network is signed, each tie is therefore read by its magnitude, and every tie keeps its place in the returned vector.

Examples

ison_monks |> to_uniplex("like") |> 
  mutate_ties(tri = tie_is_triangular())
#> 
#> ── # Sampson's Monks ───────────────────────────────────────────────────────────
#> # A longitudinal, labelled, weighted, directed network of 18 nodes and 168 like
#> arcs over 3 waves
#> # Transformed by exclusion: layers other than 'like' (295 ties excluded)
#> 
#> ── Nodes 
#> # A tibble: 18 × 3
#>   label       groups        left
#>   <chr>       <chr>        <dbl>
#> 1 Romuald     Interstitial     3
#> 2 Bonaventure Loyal            4
#> 3 Ambrose     Loyal            4
#> 4 Berthold    Loyal            4
#> 5 Peter       Loyal            3
#> 6 Louis       Loyal            4
#> # ℹ 12 more rows
#> 
#> ── Ties 
#> # A tibble: 168 × 5
#>    from    to weight  time tri       
#>   <int> <int>  <dbl> <dbl> <tie_mark>
#> 1     1     2      1     2 TRUE      
#> 2     1     2      1     3 TRUE      
#> 3     1     3      1     3 TRUE      
#> 4     1     5      3     1 TRUE      
#> 5     1     5      3     2 TRUE      
#> 6     1     5      3     3 TRUE      
#> # ℹ 162 more rows
#> 
ison_adolescents |> to_directed() |> 
  mutate_ties(trans = tie_is_transitive())
#> IGRAPH 8bc6d0d DN-- 8 10 -- The Adolescent Society
#> + attr: name (g/c), doi (g/c), year (g/n), vertex1 (g/c), vertex1.total
#> | (g/n), edge.pos (g/c), directed (g/l), name (v/c), trans (e/l)
#> + edges from 8bc6d0d (vertex names):
#>  [1] Betty->Sue   Sue  ->Alice Alice->Jane  Sue  ->Dale  Dale ->Alice
#>  [6] Dale ->Jane  Sue  ->Pam   Pam  ->Alice Pam  ->Carol Carol->Tina 
ison_adolescents |> to_directed() |> 
  mutate_ties(trip = tie_is_triplet())
#> IGRAPH d029212 DN-- 8 10 -- The Adolescent Society
#> + attr: name (g/c), doi (g/c), year (g/n), vertex1 (g/c), vertex1.total
#> | (g/n), edge.pos (g/c), directed (g/l), name (v/c), trip (e/l)
#> + edges from d029212 (vertex names):
#>  [1] Betty->Sue   Alice->Sue   Alice->Jane  Dale ->Sue   Dale ->Alice
#>  [6] Jane ->Dale  Pam  ->Sue   Pam  ->Alice Pam  ->Carol Carol->Tina 
ison_adolescents |> to_directed() |> 
  mutate_ties(cyc = tie_is_cyclical())
#> IGRAPH 4b8f9d4 DN-- 8 10 -- The Adolescent Society
#> + attr: name (g/c), doi (g/c), year (g/n), vertex1 (g/c), vertex1.total
#> | (g/n), edge.pos (g/c), directed (g/l), name (v/c), cyc (e/l)
#> + edges from 4b8f9d4 (vertex names):
#>  [1] Betty->Sue   Sue  ->Alice Alice->Jane  Dale ->Sue   Dale ->Alice
#>  [6] Dale ->Jane  Pam  ->Sue   Pam  ->Alice Pam  ->Carol Carol->Tina 
ison_monks |> to_uniplex("like") |> 
  mutate_ties(simmel = tie_is_simmelian())
#> 
#> ── # Sampson's Monks ───────────────────────────────────────────────────────────
#> # A longitudinal, labelled, weighted, directed network of 18 nodes and 168 like
#> arcs over 3 waves
#> # Transformed by exclusion: layers other than 'like' (295 ties excluded)
#> 
#> ── Nodes 
#> # A tibble: 18 × 3
#>   label       groups        left
#>   <chr>       <chr>        <dbl>
#> 1 Romuald     Interstitial     3
#> 2 Bonaventure Loyal            4
#> 3 Ambrose     Loyal            4
#> 4 Berthold    Loyal            4
#> 5 Peter       Loyal            3
#> 6 Louis       Loyal            4
#> # ℹ 12 more rows
#> 
#> ── Ties 
#> # A tibble: 168 × 5
#>    from    to weight  time simmel    
#>   <int> <int>  <dbl> <dbl> <tie_mark>
#> 1     1     2      1     2 FALSE     
#> 2     1     2      1     3 FALSE     
#> 3     1     3      1     3 FALSE     
#> 4     1     5      3     1 FALSE     
#> 5     1     5      3     2 FALSE     
#> 6     1     5      3     3 FALSE     
#> # ℹ 162 more rows
#> 
fict_marvel |> to_uniplex("relationship") |> tie_is_imbalanced()
#>   `Abomination-Abomination` `Abomination-Beast` `Abomination-Colossus`
#> 1 TRUE                      FALSE               FALSE                 
#> # ... and 555 more values from this nodeset. Use `print_all(...)` to print all values.