-
Notifications
You must be signed in to change notification settings - Fork 0
/
aggregate_network.R
73 lines (59 loc) · 2.34 KB
/
aggregate_network.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
library(tidyverse)
aggregate_network.dendrogram = function(m, method = 'binary') {
if (method == 'binary') {
distance_matrix = dist(m, method = method)
dendrogram = hclust(distance_matrix, method = "average")
} else if (method == 'rege') {
dendrogram = m %>%
as.matrix() %>%
blockmodeling::REGE.for() %>%
pluck('E') %>%
as.dist() %>%
hclust(method = "average")
dendrogram$height = round(dendrogram$height, 6)
}
return(dendrogram)
}
aggregate_network = function(m,
interaction_cutoff,
clustering_cutoff = NULL,
nr_of_clusters = NULL,
method = 'binary') {
nr_of_original_species = length(m)
### --- CREATE CLUSTERS --- ###
if (method == 'binary') {
distance_matrix = dist(m, method = method)
dendrogram = hclust(distance_matrix, method = "average")
} else if (method == 'rege') {
dendrogram = m %>%
as.matrix() %>%
blockmodeling::REGE.for() %>%
pluck('E') %>%
as.dist() %>%
hclust(method = "average")
dendrogram$height = round(dendrogram$height, 6)
}
species_list = data.frame(cutree(dendrogram, k = nr_of_clusters, h = clustering_cutoff))
species_list = species_list %>%
rename(membership = 1) %>%
rownames_to_column('species')
cluster_list = species_list %>%
count(membership, name = "size") %>%
rename(cluster = membership)
### --- CONNECT CLUSTERS --- ###
nr_of_clusters = max(species_list$membership)
possible_connections = find_possible_connections(cluster_list, nr_of_clusters)
realised_connections = find_realised_connections(nr_of_original_species,
nr_of_clusters,
m,
species_list)
ratio_possible_realised = realised_connections / possible_connections
final_web = decide_which_clusters_interact(ratio_possible_realised,
nr_of_clusters,
interaction_cutoff)
graph_and_species_list = list(
graph = as.matrix(final_web),
species_list = species_list %>% arrange(membership) %>% relocate(membership)
)
return(graph_and_species_list)
}