1
#' @title Quantification of (indirect) relations
2
#' @description Function to aggregate positions defined via indirect relations to construct centrality
3
#' scores.
4
#' @param tau_x Numeric matrix containing indirect relations calculated with [indirect_relations].
5
#' @param type String indicating the type of aggregation to be used. See Details for options.
6
#' @details The predefined functions are mainly wrappers around base R functions.
7
#' type='sum', for instance, is equivalent to `rowSums()`. A non-base functions is
8
#' type='invsum' which calculates the inverse of type='sum'. 
9
#' type='self' is mostly useful for walk based relations, e.g. to count closed walks.
10
#'  Other self explanatory options are type='mean', type='min', type='max' and type='prod'.
11
#' @return Scores for the index defined by the indirect relation `tau_x` and the 
12
#' used aggregation type.
13
#' @author David Schoch
14
#' @seealso [indirect_relations], [transform_relations]
15
#' @examples
16
#' library(igraph)
17
#' library(magrittr)
18
#' 
19
#' g <- graph.empty(n=11,directed = FALSE)
20
#' g <- add_edges(g,c(1,11,2,4,3,5,3,11,4,8,5,9,5,11,6,7,6,8,
21
#'                    6,10,6,11,7,9,7,10,7,11,8,9,8,10,9,10))
22
#'#degree
23
#' g %>% indirect_relations(type='adjacency') %>% 
24
#'  aggregate_positions(type='sum')
25
#'
26
#' #closeness centrality
27
#' g %>% indirect_relations(type='dist_sp') %>% 
28
#'   aggregate_positions(type='invsum')
29
#'   
30
#' #betweenness centrality
31
#' g %>% indirect_relations(type='depend_sp') %>% 
32
#'   aggregate_positions(type='sum')
33
#'   
34
#' #eigenvector centrality
35
#' g %>% indirect_relations(type='walks',FUN=walks_limit_prop) %>% 
36
#'   aggregate_positions(type='sum')
37
#'
38
#'#subgraph centrality
39
#' g %>% indirect_relations(type='walks',FUN=walks_exp) %>% 
40
#'   aggregate_positions(type='self')
41
#'   
42
#' @export
43
aggregate_positions <- function(tau_x, type = "sum") {
44 2
    if (type == "sum") {
45 2
        return(rowSums(tau_x))
46 2
    } else if (type == "prod") {
47 2
        return(apply(tau_x, 1, prod))
48 2
    } else if (type == "mean") {
49 2
        return(rowMeans(tau_x))
50 2
    } else if (type == "max") {
51 2
        return(apply(tau_x, 1, max))
52 2
    } else if (type == "min") {
53 2
        return(apply(tau_x, 1, min))
54 2
    } else if (type == "invsum") {
55 2
        return(rowSums(tau_x)^-1)
56 2
    } else if (type == "self") {
57 2
        diag(tau_x)
58
    } else {
59 2
        stop(paste(type, " not supported. See function details for options."))
60
    }
61
}

Read our documentation on viewing source code .

Loading