Skip to contents

Computes comprehensive graph-level statistics for netify objects, including density, reciprocity, centralization measures, and custom metrics. Handles cross-sectional and longitudinal networks, as well as multilayer structures.

Usage

# S3 method for class 'netify'
summary(object, ...)

Arguments

object

A netify object containing network data

...

Additional arguments, including:

other_stats

Named list of custom functions to calculate additional graph-level statistics. Each function should accept a matrix and return a named vector of scalar values.

Value

A data frame with one row per network/time period containing:

Basic network properties:

net

Network/time identifier

layer

Layer name (for multilayer networks)

num_actors

Number of actors (or num_row_actors and num_col_actors for bipartite networks)

density

Proportion of possible ties that exist

num_edges

Total number of edges (unweighted count)

prop_edges_missing

Proportion of potential edges that are NA

For weighted networks only:

mean_edge_weight

Average weight of existing edges

sd_edge_weight

Standard deviation of edge weights

median_edge_weight

Median edge weight

min_edge_weight, max_edge_weight

Range of edge weights

Structural measures:

competition (or competition_row/competition_col)

Herfindahl-Hirschman Index measuring concentration of ties. Calculated as \(\sum_{i=1}^{n} (s_i)^2\) where \(s_i\) is actor i's share of total ties. Ranges from 1/n (equal distribution) to 1 (one actor has all ties).

sd_of_actor_means (or sd_of_row_means/sd_of_col_means)

Standard deviation of actors' average tie strengths, measuring heterogeneity in actor activity levels

transitivity

Global clustering coefficient (probability that two neighbors of a node are connected)

For directed networks only:

covar_of_row_col_means

Covariance between actors' sending and receiving patterns

reciprocity

Pearson correlation between the adjacency matrix and its transpose. This measures the linear association between outgoing and incoming tie weights for each dyad (i.e., how similar \(a_{ij}\) is to \(a_{ji}\) across all dyads). Values near 1 indicate strong reciprocity, while values near 0 indicate no relationship. Note: this differs from the traditional edge-based reciprocity (proportion of mutual dyads) used by igraph and other packages.

mutual

Proportion of mutual dyads: the fraction of connected dyad pairs where both directions are present. Ranges from 0 (no mutual ties) to 1 (all ties are reciprocated). This is the traditional edge-based reciprocity measure used by igraph and most network analysis textbooks.

Details

The function automatically adapts calculations based on network properties:

  • Bipartite networks: Reports row and column actors separately

  • Directed networks: Calculates separate statistics for in/out ties

  • Weighted networks: Includes weight-based statistics

  • Multilayer networks: Processes each layer independently

  • Longitudinal networks: Calculates statistics for each time period

Competition Index Interpretation:

The competition measure (HHI) captures how concentrated network ties are among actors. Low values indicate distributed activity across many actors (competitive), while high values indicate concentration among few actors (monopolistic). This is particularly useful for analyzing power dynamics or resource distribution in networks.

Custom Statistics:

Add custom graph-level metrics using the other_stats parameter:


# Example: Community detection
modularity_stat <- function(mat) {
  g <- netify_to_igraph(mat)
  comm <- igraph::cluster_walktrap(g)
  c(modularity = igraph::modularity(comm),
    n_communities = length(unique(comm$membership)))
}

summary(net, other_stats = list(community = modularity_stat))

Note

For large longitudinal or multilayer networks, computation can be intensive. Consider using subset_netify to analyze specific time periods or layers.

Missing edges (NA values) are excluded from density calculations but tracked in the prop_edges_missing statistic.

References

Dorff, C., Gallop, M., & Minhas, S. (2023). "Networks of violence: Predicting conflict in Nigeria." Journal of Politics, 85(1).

Author

Cassy Dorff, Shahryar Minhas

Examples

# Load example data
data(icews)

# \donttest{
# Basic usage
net <- netify(
    icews,
    actor1 = "i", actor2 = "j", time = "year",
    symmetric = FALSE,
    weight = "verbCoop"
)

# get summary
summary(net)
#>     net num_actors   density num_edges prop_edges_missing mean_edge_weight
#> 1  2002        152 0.3787034      8692                  0         19.59123
#> 2  2003        152 0.3871994      8887                  0         19.36358
#> 3  2004        152 0.4145173      9514                  0         19.84986
#> 4  2005        152 0.4071976      9346                  0         19.79488
#> 5  2006        152 0.4108139      9429                  0         21.09136
#> 6  2007        152 0.4243203      9739                  0         21.89753
#> 7  2008        152 0.4351690      9988                  0         21.03381
#> 8  2009        152 0.4293308      9854                  0         20.33139
#> 9  2010        152 0.4346462      9976                  0         18.13393
#> 10 2011        152 0.4229697      9708                  0         15.79217
#> 11 2012        152 0.4287644      9841                  0         15.99564
#> 12 2013        152 0.4318142      9911                  0         17.21301
#> 13 2014        152 0.4258452      9774                  0         18.39291
#>    sd_edge_weight median_edge_weight min_edge_weight max_edge_weight
#> 1        143.8213                  0               0            6003
#> 2        144.5982                  0               0            5937
#> 3        137.7292                  0               0            5141
#> 4        148.6667                  0               0            6561
#> 5        160.0782                  0               0            7579
#> 6        162.4166                  0               0            7125
#> 7        148.1206                  0               0            6091
#> 8        156.6702                  0               0            6889
#> 9        132.3670                  0               0            4937
#> 10       113.5584                  0               0            5581
#> 11       107.5946                  0               0            4225
#> 12       130.4925                  0               0            6320
#> 13       136.5412                  0               0            6327
#>    competition_row competition_col sd_of_row_means sd_of_col_means
#> 1       0.04093116      0.03813621        44.91530        43.04935
#> 2       0.04199822      0.03930188        45.07759        43.32783
#> 3       0.03481011      0.03262993        41.25503        39.63005
#> 4       0.04067046      0.03624472        45.20964        42.17312
#> 5       0.04151400      0.03697499        48.76301        45.48502
#> 6       0.03887627      0.03514325        48.67808        45.77854
#> 7       0.03785375      0.03421258        46.01192        43.25059
#> 8       0.04500583      0.03915054        49.29918        45.38806
#> 9       0.04071163      0.03493156        41.44120        37.76971
#> 10      0.03964994      0.03405077        35.52390        32.37731
#> 11      0.03587638      0.03146233        33.86660        31.21128
#> 12      0.04058869      0.03642385        39.26572        36.78299
#> 13      0.04058415      0.03521224        41.95447        38.49827
#>    covar_of_row_col_means reciprocity    mutual transitivity
#> 1               0.9946888   0.9778217 0.8537001    0.6058952
#> 2               0.9872959   0.9632488 0.8479933    0.6072045
#> 3               0.9923809   0.9769563 0.8452289    0.6215978
#> 4               0.9932157   0.9804325 0.8386779    0.6215075
#> 5               0.9909337   0.9771928 0.8510012    0.6277829
#> 6               0.9940837   0.9783703 0.8511690    0.6330626
#> 7               0.9916659   0.9694667 0.8468935    0.6401296
#> 8               0.9946612   0.9800665 0.8467016    0.6318319
#> 9               0.9934913   0.9823385 0.8402509    0.6386063
#> 10              0.9903188   0.9763723 0.8327355    0.6220630
#> 11              0.9877987   0.9702754 0.8336128    0.6337725
#> 12              0.9939394   0.9782226 0.8248941    0.6314429
#> 13              0.9904402   0.9730745 0.8389464    0.6297063
# }

if (FALSE) { # \dontrun{
# Add custom statistics - community detection
comm_stats <- function(mat) {
    g <- netify_to_igraph(mat)
    comm <- igraph::cluster_spinglass(g)
    c(
        n_communities = length(comm$csize),
        modularity = comm$modularity
    )
}

# Apply to subset for efficiency
sub_net <- subset_netify(net, time = as.character(2013:2014))
summary(sub_net, other_stats = list(community = comm_stats))
} # }