
Measure directed citation influence between research groups
Source:R/sniff_groups_influence.R
sniff_groups_influence.RdExperimental. Lifts the internal citations of a sniff_groups() network to
the group level and measures how much each group's output flows into every
other group's. Influence is directional: if group \(B\)'s papers cite
group \(A\)'s papers, knowledge flows \(A \to B\). The function returns
the cross-citation matrix, four size-corrected indices per ordered pair, the
net flow between pairs, and a source / broker / sink role per group.
Usage
sniff_groups_influence(groups, self = TRUE, null_reps = 0, seed = NULL)
is_influence(x)
# S3 method for class 'birddog_influence'
print(x, ...)Arguments
- groups
A
sniff_groups()object: a list with anetworkcomponent, a directedtidygraph/igraphwhose nodes carry agroupattribute and whose edges are the internal citations (citing -> cited).- self
Keep the diagonal (intra-group citations) in the matrix and in the out/in strengths. Default
TRUE.FALSEstudies only between-group flow.- null_reps
Number of group-label permutations for a per-channel p-value: shuffle the group labels over documents, recompute the cross-citation matrix, and record how often the random flow meets or beats the observed count. Default
0(no p-values). When> 0,flowgains ap_valuecolumn.- seed
Optional integer seed for the permutation null, for reproducibility. Default
NULL.- x
A
birddog_influenceobject.- ...
Ignored.
Value
An object of class birddog_influence, a list with:
matrix: the \(G \times G\) cross-citation matrix \(C\) (rows cite columns), groups inmixed_sort()order.flow: a tibble, one row per observed ordered pair, sorted by descendingsurprise–influencer(cited group),recipient(citing group),citations,debt,audience,salton,surprise(andp_valuewhennull_reps > 0).groups: per-groupreceived,made,balance,role(source / broker / sink), sorted by descendingbalance.net: the net-influence edge list –from(source),to(recipient),net(\(\nu_{ij} > 0\)).params: the call settings.
Details
Writing \(C_{ij}\) for the number of citations from group \(i\) to group \(j\) (rows cite columns), out-strength \(o_i=\sum_k C_{ik}\), in-strength \(\iota_j=\sum_k C_{kj}\), and total \(m=\sum_{ij}C_{ij}\), each ordered pair carries four normalizations:
debt \(C_{ij}/o_i\) – the share of \(i\)'s citations owed to \(j\) (how much \(i\) leans on \(j\));
audience \(C_{ij}/\iota_j\) – the share of \(j\)'s citations coming from \(i\);
salton \(C_{ij}/\sqrt{o_i\,\iota_j}\) – a size-free channel strength, symmetric in the pair;
surprise \(C_{ij}/(o_i\,\iota_j/m)\) – the flow against the configuration-model expectation; \(>1\) over-represented, \(<1\) under-represented.
The net influence \(\nu_{ij}=C_{ij}-C_{ji}\) removes reciprocal flow,
and the group balance \(\beta_i=\iota_i-o_i\) (received minus made)
classifies each group as a source (\(\beta>0\), foundational), a sink
(\(\beta<0\), frontier consumer), or a broker (\(\beta\approx 0\)). The
balances of a closed system sum to zero. The diagonal \(C_{ii}\) is
intra-group cohesion; self = FALSE drops it before any normalization (the
balances and net are unchanged, since the diagonal cancels).
See also
sniff_groups(), sniff_groups_hubs(),
plot_groups_influence_matrix(), plot_groups_influence_network()
Other groups (stock):
sniff_components(),
sniff_groups(),
sniff_groups_attributes(),
sniff_groups_cumulative(),
sniff_groups_cumulative_citations(),
sniff_groups_hubs(),
sniff_groups_lineage(),
sniff_network()
Examples
if (FALSE) { # \dontrun{
groups <- sniff_groups(net)
infl <- sniff_groups_influence(groups)
infl
infl$groups # source / broker / sink per group
infl$net # who, on balance, leads whom
plot_groups_influence_matrix(infl)
} # }