Skip to content

Instantly share code, notes, and snippets.

@alperyilmaz
Created October 31, 2018 13:31
Show Gist options
  • Save alperyilmaz/807f59fc4e3eabe84c7a0a049795cc60 to your computer and use it in GitHub Desktop.
Save alperyilmaz/807f59fc4e3eabe84c7a0a049795cc60 to your computer and use it in GitHub Desktop.
Calculate negative effect or competing behaviors in bipartite networks
library(tidygraph)
library(purrr)
library(dplyr)
library(ggraph)
# Generate sample data: FRAME1
sample_data <- data.frame(genes = c("G1", "G2", "G3", "G4", "G4", "G5", "G6"),
mirna = c("M1", "M1","M1", "M1", "M2", "M2", "M2"),
Geneexpression = c(10000, 10000, 5000, 10000, 10000, 5000, 10000),
mirnaexpression = c(1000, 1000, 1000, 1000, 2000, 2000, 2000), stringsAsFactors = FALSE)
sample_graph <- as_tbl_graph(sample_data)
# Distribute microRNA units to genes proportional to G1-G6 levels: FRAME2
sample_graph_initial <- sample_graph %N>%
mutate(type = ifelse(startsWith(name, "G"), "gene", "mirna"), node_id = 1:length(.N()$name)) %E>%
mutate(Geneexpression_list = as.list(Geneexpression), Geneexpression_pre = Geneexpression, Geneexpression_current = Geneexpression) %>%
group_by(to) %>%
mutate(mirnacountpergene = mirnaexpression*Geneexpression_current/sum(Geneexpression_current)) %>%
ungroup() %>%
mutate(effect_current = mirnacountpergene, effect_pre = effect_current, effect_list = as.list(effect_current))
# G2 is increased : FRAME3
sample_graph_initial %E>%
mutate(Geneexpression_current = ifelse(from == 2, 20000, Geneexpression_current),Geneexpression_list = pmap(list(Geneexpression_list, Geneexpression_current), c)) -> sample_graph_initial
# keep a copy of graph
result_graph <- sample_graph_initial
# update node values according to edge values
result_graph <- result_graph %N>%
left_join(bind_rows((as_tibble(result_graph %E>%
select(Geneexpression_current, Geneexpression_pre, mirnaexpression)) %>%
mutate(expression = Geneexpression_pre) %>%
dplyr::select(id = from, expression, expression_pre = Geneexpression_pre, expression_current = Geneexpression_current) %>%
dplyr::distinct()),
(as_tibble(result_graph %E>%
select(mirnaexpression))%>%
mutate(expression = mirnaexpression)%>%
dplyr::select(id= to, expression, expression_pre = mirnaexpression)%>%
dplyr::mutate(expression_current = expression_pre)%>%
dplyr::distinct())), by=c("node_id"="id")) %>%
mutate(changes_gene = ifelse( expression_current-expression_pre != 0, "Downregulation", type),
changes_gene = ifelse(expression_current-expression_pre > 0, "Upregulation", changes_gene)) %>%
mutate(percent_dif = expression_current/expression)
# For loop that made for recalculation of distribution of microRNAs and expression values of genes
# FRAME4-5-6
for(i in 1:2){
result_graph <- result_graph %E>%
group_by(to) %>%
mutate(mirnacountpergene = mirnaexpression*Geneexpression_current/sum(Geneexpression_current)) %>%
ungroup()%>%
mutate(effect_pre = effect_current,
effect_current = mirnacountpergene)%>%
group_by(from)%>%
mutate(Geneexpression_pre = Geneexpression_current,
Geneexpression_current = Geneexpression_pre - (sum(effect_current)-sum(effect_pre)))%>%
ungroup()%>%
mutate(Geneexpression_list = pmap(list(Geneexpression_list, Geneexpression_current), c),
effect_list = pmap(list(effect_list, effect_current), c))
result_graph <- result_graph %N>%
select(-expression_pre)%>%
select(name, type, node_id, expression, expression_pre = expression_current)%>%
left_join( bind_rows((as_tibble(result_graph %E>%
select(Geneexpression_current, mirnaexpression))%>%
dplyr::select(id = from, expression_current = Geneexpression_current)%>%
dplyr::distinct()),
(as_tibble(result_graph%>%
activate(edges)%>%
select(Geneexpression_current, mirnaexpression))%>%
dplyr::select(id= to, expression_current = mirnaexpression)%>%
dplyr::distinct())), by=c("node_id"="id"))%>%
mutate(changes_gene = ifelse( expression_current-expression_pre != 0, "Downregulation", type),
changes_gene = ifelse(expression_current-expression_pre > 0, "Upregulation", changes_gene))%>%
mutate(percent_dif = expression_current/expression)
}
result_graph
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment