-
Notifications
You must be signed in to change notification settings - Fork 0
/
comparison_carnival_moon.Rmd
179 lines (143 loc) · 7.87 KB
/
comparison_carnival_moon.Rmd
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
---
title: "network_comparisons"
author: "Aurelien Dugourd"
date: "`r Sys.Date()`"
output:
md_document:
variant: gfm
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
However, the legacy network optimisation of COSMOS was done through CARNIVAL, which requires the interactive version of IBM Cplex or CBC-COIN solver as the network optimizer. Thus, the classic cosmos run using the CARNIVAL back end is still presnet in this tutorial as a comparison reference, but is optional. IF you wish to reproduce it, The IBM ILOG Cplex is freely available through Academic Initiative [here](https://community.ibm.com/community/user/datascience/blogs/xavier-nodet1/2020/07/09/cplex-free-for-students). As an alternative, the CBC solver is open source and freely available for any user, but has a significantly lower performance than CPLEX. The CBC executable can be find under cbc/. Alternatively for small networks, users can rely on the freely available lpSolve R-package, which is automatically installed with the package.
In this tutorial we use *CPLEX* for means of comparison with the newer MOON function that doesn't rely on optimisation.
```{r}
library(readr)
library(dplyr)
library(cosmosR)
```
```{r}
data("HMDB_mapper_vec")
moon_res_rec_to_TFmet <- as.data.frame(
read_csv("results/cosmos/moon/moon_res_rec_to_TFmet.csv"))
names(moon_res_rec_to_TFmet)[1] <- "source"
moon_res_TF_lig <- as.data.frame(
read_csv("results/cosmos/moon/moon_res_TF_lig.csv"))
moon_combined <- as.data.frame(rbind(moon_res_rec_to_TFmet, moon_res_TF_lig))
moon_combined <- moon_combined %>% group_by(source) %>% summarise_each(funs(mean(., na.rm = TRUE)))
moon_combined <- as.data.frame(moon_combined)
write_csv(moon_combined, file = "results/cosmos/moon/full_moon_res_combined.csv")
SIF_COSMOS_combined_reduced <- as.data.frame(
read_csv("results/cosmos/SIF_mofamoon_combined_reduced.csv"))
ATT_COSMOS_combined_reduced <- as.data.frame(
read_csv("results/cosmos/ATT_mofamoon_combined_reduced.csv"))
meta_network_rec_to_TFmetab <- as.data.frame(
read_csv("results/cosmos/moon/meta_network_filtered.csv"))
meta_network_TF_lig <- as.data.frame(
read_csv("results/cosmos/moon/meta_network_TF_lig.csv"))
combined_meta_network <- as.data.frame(
rbind(meta_network_rec_to_TFmetab,meta_network_TF_lig)
)
combined_meta_network[, 1] <- sapply(combined_meta_network[, 1], function(x, HMDB_mapper_vec) {
x <- gsub("Metab__", "", x)
x <- gsub("^Gene", "Enzyme", x)
suffixe <- stringr::str_extract(x, "_[a-z]$")
x <- gsub("_[a-z]$", "", x)
if (x %in% names(HMDB_mapper_vec)) {
x <- HMDB_mapper_vec[x]
x <- paste("Metab__", x, sep = "")
}
if (!is.na(suffixe)) {
x <- paste(x, suffixe, sep = "")
}
return(x)
}, HMDB_mapper_vec = HMDB_mapper_vec)
combined_meta_network[, 2] <- sapply(combined_meta_network[, 2], function(x, HMDB_mapper_vec) {
x <- gsub("Metab__", "", x)
x <- gsub("^Gene", "Enzyme", x)
suffixe <- stringr::str_extract(x, "_[a-z]$")
x <- gsub("_[a-z]$", "", x)
if (x %in% names(HMDB_mapper_vec)) {
x <- HMDB_mapper_vec[x]
x <- paste("Metab__", x, sep = "")
}
if (!is.na(suffixe)) {
x <- paste(x, suffixe, sep = "")
}
return(x)
}, HMDB_mapper_vec = HMDB_mapper_vec)
write_csv(combined_meta_network, file = "results/cosmos/moon/combined_meta_network_translated.csv")
```
```{r}
sum(ATT_COSMOS_combined_reduced$Nodes %in% moon_combined$source)
ATT_COSMOS_combined_reduced[!(ATT_COSMOS_combined_reduced$Nodes %in% moon_combined$source),]
```
Some nodes are not in moon network. They were pruned out by moon because their estimation score as input didn't match the infered activity by moon.
```{r}
compare_moon_carnival <- merge(ATT_COSMOS_combined_reduced[,c(1,9)],moon_combined,by.x = "Nodes",by.y = "source")
compare_moon_carnival$sign_coherence <- sign(compare_moon_carnival$sign_activity) == sign(compare_moon_carnival$score)
sum(compare_moon_carnival$sign_coherence)
sum(compare_moon_carnival$sign_coherence) / dim(compare_moon_carnival)[1]
```
```{r}
write_csv(combined_meta_network, file = "results/cosmos/moon/meta_network_combined_translated.csv")
to_map <- merge(ATT_COSMOS_combined_reduced[,c(1,9)],moon_combined,by.x = "Nodes",by.y = "source", all.y = T)
names(to_map) <- c("Nodes","CARNIVAL","moon","moon_level")
write_csv(combined_meta_network, file = "results/cosmos/moon/meta_network_combined_translated.csv")
write_csv(to_map, file = "results/cosmos/moon/ATT_to_compare.csv")
```
```{r}
nodes_not_carnival <- unique(c(combined_meta_network$source,combined_meta_network$target))
nodes_not_carnival <- nodes_not_carnival[!nodes_not_carnival %in% ATT_COSMOS_combined_reduced$Nodes]
nodes_predicted_carnival <- ATT_COSMOS_combined_reduced[ATT_COSMOS_combined_reduced$measured == 0,1]
mean(abs(moon_combined[moon_combined$source %in% nodes_predicted_carnival,"score"]))
mean(abs(moon_combined[moon_combined$source %in% nodes_not_carnival,"score"]))
```
#consistent nodes regardless of moon threshold
```{r}
compare_moon_carnival_predicted <- compare_moon_carnival[compare_moon_carnival$Nodes %in% nodes_predicted_carnival,]
sum(compare_moon_carnival_predicted$sign_coherence)
sum(compare_moon_carnival_predicted$sign_coherence) / dim(compare_moon_carnival_predicted)[1]
```
```{r}
combined_SIF_moon <- as.data.frame(read_csv("results/cosmos/moon/combined_SIF_moon.csv"))
names(combined_SIF_moon)[c(1,2,3)] <- c("Node1","Node2","Sign")
combined_ATT_moon <- as.data.frame(read_csv("results/cosmos/moon/combined_ATT_moon.csv"))
length(intersect(combined_ATT_moon$Nodes, ATT_COSMOS_combined_reduced$Nodes))
```
```{r}
SIF_carnival_moon <- as.data.frame(rbind(combined_SIF_moon[,c(1,2,3)], SIF_COSMOS_combined_reduced[,c(1,2,3)]))
# SIF_carnival_moon$edgeID <- paste(SIF_carnival_moon$Node1,SIF_carnival_moon$Node2, sep = "_")
SIF_carnival_moon <- unique(SIF_carnival_moon)
ATT_carnival_moon <- merge(combined_ATT_moon[,c(1,2)],ATT_COSMOS_combined_reduced[,c(1,6)], by = "Nodes", all = T)
names(ATT_carnival_moon)[c(2,3)] <- c("MOON","CARNIVAL")
ATT_carnival_moon$MOON <- sign(ATT_carnival_moon$MOON)
ATT_carnival_moon$CARNIVAL <- sign(ATT_carnival_moon$CARNIVAL)
ATT_carnival_moon[is.na(ATT_carnival_moon$MOON),"MOON"] <- 0
ATT_carnival_moon[is.na(ATT_carnival_moon$CARNIVAL),"CARNIVAL"] <- 0
write_csv(SIF_carnival_moon, file = "results/cosmos/moon/SIF_carnival_moon.csv")
write_csv(ATT_carnival_moon, file = "results/cosmos/moon/ATT_carnival_moon.csv")
```
Strictly consistent between the two network
```{r}
sum(ATT_carnival_moon$CARNIVAL == ATT_carnival_moon$MOON) / length(ATT_carnival_moon[,1])
```
Signficant in carnival network and 0 in the moon
```{r}
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON == 0) / length(ATT_carnival_moon[,1])
```
Signficant in moon network and 0 in the carnival
```{r}
sum(ATT_carnival_moon$CARNIVAL == 0 & ATT_carnival_moon$MOON != 0) / length(ATT_carnival_moon[,1])
```
Strickly different between the two networks
```{r}
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON != 0 & ATT_carnival_moon$CARNIVAL != ATT_carnival_moon$MOON) / length(ATT_carnival_moon[,1])
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON != 0 & ATT_carnival_moon$CARNIVAL != ATT_carnival_moon$MOON) / sum(ATT_carnival_moon$CARNIVAL != 0)
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON != 0 & ATT_carnival_moon$CARNIVAL != ATT_carnival_moon$MOON) / sum(ATT_carnival_moon$MOON != 0)
```
% of nodes of carnival that are found in moon and % of nodes of moon that are found in carnival
```{r}
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON != 0 & ATT_carnival_moon$CARNIVAL == ATT_carnival_moon$MOON) / sum(ATT_carnival_moon$CARNIVAL != 0)
sum(ATT_carnival_moon$CARNIVAL != 0 & ATT_carnival_moon$MOON != 0 & ATT_carnival_moon$CARNIVAL == ATT_carnival_moon$MOON) / sum(ATT_carnival_moon$MOON != 0)
```