View source: R/rem_stat_preferential_attachment.R
computePrefAttach | R Documentation |
The function computes the preferential attachment network sufficient statistic for a relational event sequence (see Butts 2008). Preferential attachment measures the tendency towards a positive feedback loop in which actors involved in more past events are more likely to be involved in future events (see Butts 2008 for an empirical example and discussion).This measure allows for preferential attachment scores to be only computed for the sampled events, while creating the statistics based on the full event sequence. Moreover, the function allows users to specify relational relevancy for the statistic and employ a sliding windows framework for large relational sequences.
computePrefAttach(
observed_time,
observed_sender,
observed_receiver,
processed_time,
processed_sender,
processed_receiver,
dependency = FALSE,
relationalTimeSpan = NULL,
sliding_windows = FALSE,
processed_seqIDs = NULL,
window_size = NA
)
observed_time |
The vector of event times from the pre-processing event sequence. |
observed_sender |
The vector of event senders from the pre-processing event sequence. |
observed_receiver |
The vector of event receivers from the pre-processing event sequence |
processed_time |
The vector of event times from the post-processing event sequence (i.e., the event sequence that contains the observed and null events). |
processed_sender |
The vector of event senders from the post-processing event sequence (i.e., the event sequence that contains the observed and null events). |
processed_receiver |
The vector of event receivers from the post-processing event sequence (i.e., the event sequence that contains the observed and null events). |
dependency |
TRUE/FALSE. TRUE indicates that temporal relevancy will be modeled (see the details section). FALSE indicates that temporal relevancy will not be modeled, that is, all past events are relevant (see the details section). Set to FALSE by default. |
relationalTimeSpan |
If dependency = TRUE, a numerical value that corresponds to the temporal span for relational relevancy, which must be the same measurement unit as the observed_time and processed_time objects. When dependency = TRUE, the relevant events are events that have occurred between current event time, t, and t - relationalTimeSpan. For example, if the time measurement is the number of days since the first event and the value for relationalTimeSpan is set to 10, then only those events which occurred in the past 10 days are included in the computation of the statistic. |
sliding_windows |
TRUE/FALSE. TRUE indicates that the sliding windows computational approach will be used to compute the network statistic, while FALSE indicates the ap- proach will not be used. Set to FALSE by default. It’s important to note that the sliding windows framework should only be used when the pre-processed event sequence is ‘big’, such as the 360 million pre-processed event sequence used in Lerner and Lomi (2020), as it aims to reduce the computational burden of sorting ‘big’ datasets. In general, most pre-processed event sequences will not need to use the sliding windows approach. There is not a strict cutoff for ‘big’ dataset. This definition depends on both the size of the observed event sequence and the post-processing sampling dataset. For instance, according to our internal tests, when the event sequence is relatively large (i.e., 100,000 observed events) with probability of sampling from the observed event sequence set to 0.05 and using 10 controls per sampled event, the sliding windows framework for computing repetition is about 11% faster than the non-sliding windows framework. Yet, in a smaller dataset (i.e., 10,000 observed events) the sliding windows framework is about 25% slower than the non-sliding framework with the same conditions as before. |
processed_seqIDs |
If sliding_windows is set to TRUE, the vector of event sequence IDs from the post-processing event sequence. The event sequence IDs represents the index for when the event occurred in the observed event sequence (e.g., the 5th event in the sequence will have a value of 5 in this vector). |
window_size |
If sliding_windows is set to TRUE, the sizes of the windows that are used for the sliding windows computational framework. If NA, the function internally divides the dataset into ten slices (may not be optimal). |
The function calculates preferential attachment for a relational event sequence based on Butts (2008).
Following Butts (2008), the formula for preferential attachment for event e_i
is:
PA_{e_{i}} = \frac{d^{+}(r(e_{i}), A_t)+d^{-}(r(e_{i}), A_t)}{\sum_{i=1}^{|S|} (d^{+}(i, A_t)+d^{-}(i, A_t))}
where d^{+}(r(e_{i}), A_t)
is the past outdegree of the receiver for e_i
, d^{-}(r(e_{i}), A_t)
is the past indegree of the receiver for e_i
,
\sum_{i=1}^{|S|} (d^{+}(i, A_t)+d^{-}(i, A_t))
is the sum of the past outdegree and indegree for all past event senders in the relational history.
Moreover, researchers interested in modeling temporal relevancy (see Quintane, Mood, Dunn, and Falzone 2022) can specify the relational time span, that is, length of time for which events are considered relationally relevant. This should be specified via the option relationalTimeSpan with dependency set to TRUE.
The vector of event preferential attachment statistics for the relational event sequence.
Kevin A. Carson kacarson@arizona.edu, Diego F. Leal dflc@arizona.edu
Butts, Carter T. 2008. "A relational event framework for social action." Sociological Methodology 38(1): 155-200.
Quintane, Eric, Martin Wood, John Dunn, and Lucia Falzon. 2022. “Temporal Brokering: A Measure of Brokerage as a Behavioral Process.” Organizational Research Methods 25(3): 459-489.
# A Dummy One-Mode Event Dataset
events <- data.frame(time = 1:18,
eventID = 1:18,
sender = c("A", "B", "C",
"A", "D", "E",
"F", "B", "A",
"F", "D", "B",
"G", "B", "D",
"H", "A", "D"),
target = c("B", "C", "D",
"E", "A", "F",
"D", "A", "C",
"G", "B", "C",
"H", "J", "A",
"F", "C", "B"))
# Creating the Post-Processing Event Dataset with Null Events
eventSet <- processOMEventSeq(data = events,
time = events$time,
eventID = events$eventID,
sender = events$sender,
receiver = events$target,
p_samplingobserved = 1.00,
n_controls = 6,
seed = 9999)
# Compute Preferential Attachment Statistic without Sliding Windows Framework and
# No Temporal Dependency
eventSet$pref <- computePrefAttach(observed_time = events$time,
observed_receiver = events$target,
observed_sender = events$sender,
processed_time = eventSet$time,
processed_receiver = eventSet$receiver,
processed_sender = eventSet$sender,
dependency = FALSE)
# Compute Preferential Attachment Statistic with Sliding Windows Framework and
# No Temporal Dependency
eventSet$prefSW <- computePrefAttach(observed_time = events$time,
observed_receiver = events$target,
observed_sender = events$sender,
processed_time = eventSet$time,
processed_receiver = eventSet$receiver,
processed_sender = eventSet$sender,
dependency = FALSE,
sliding_windows = TRUE,
processed_seqIDs = eventSet$sequenceID)
#The results with and without the sliding windows are the same (see correlation
#below). Using the sliding windows method is recommended when the data are
#big' so that memory allotment is more efficient.
cor(eventSet$pref,eventSet$prefSW) #the correlation of the values
# Compute Preferential Attachment Statistic without Sliding Windows Framework and
# Temporal Dependency
eventSet$prefdep <- computePrefAttach(observed_time = events$time,
observed_receiver = events$target,
observed_sender = events$sender,
processed_time = eventSet$time,
processed_receiver = eventSet$receiver,
processed_sender = eventSet$sender,
dependency = TRUE,
relationalTimeSpan = 10)
# Compute Preferential Attachment Statistic with Sliding Windows Framework and
# Temporal Dependency
eventSet$pref1dep <- computePrefAttach(observed_time = events$time,
observed_receiver = events$target,
observed_sender = events$sender,
processed_time = eventSet$time,
processed_receiver = eventSet$receiver,
processed_sender = eventSet$sender,
dependency = TRUE,
relationalTimeSpan = 10,
sliding_windows = TRUE,
processed_seqIDs = eventSet$sequenceID)
#The results with and without the sliding windows are the same (see correlation
#below). Using the sliding windows method is recommended when the data are
#big' so that memory allotment is more efficient.
cor(eventSet$prefdep,eventSet$pref1dep) #the correlation of the values
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.