2015-10-19 1 views
1

Извините, потому что я чувствую, что это сомнение должно быть проще, но я не могу найти удовлетворительного ответа.Как сделать направленную трехстороннюю сеть из двух двухпартийных сетей?

У меня есть две количественные двудольные сети (которые показывают экологические отношения между A-B и B-C). Моя проблема заключается в том, что я не знаю, как присоединиться как для создания направленной количественной трехсторонней сети (например, типичной пищевой сети). Уровень B каждой двудольной сети имеет один и тот же состав вершин (в именах количеств и вершин). Кроме того, уровни A и C не могут взаимодействовать между ними. По этой причине порядок и направление конечной трехсторонней сети должен быть C-> B-> A

Любые предложения?

Спасибо за внимание!

+0

Я смущен тем, как вы пишете о направленности ... Можете ли вы предоставить пример данных (игрушек)? –

+0

Здравствуйте, Во-первых, у меня есть две двусторонние сети: Например: Двудольная Сеть 1 исследуют отношения между растением-Травоядным (A-B). Bipartite Network 2 исследует отношения между Herbivore-Predator (B-C). Я хотел бы получить новую матрицу, которая представляет отношения между A, B, C. Из-за того, что хищники питаются только травоядными животными, а травоядные животные питаются только растениями (невозможно, чтобы хищники питались растениями или травоядными животными, питающимися хищниками). Мне нужна направленная сеть (например, пищевая сеть). Следуйте по ссылке, чтобы увидеть данные о игрушке. [link] https://goo.gl/Gc9tMF –

ответ

2

Как об этом:

Кук-некоторые данные (я надеялся, что вы готовите это для меня :))

library(igraph) 
set.seed(666) 
# herbivore-plant 
m_hp <- matrix(rbinom(12, 10, p=0.2), 4, 3) 
dimnames(m_hp) <- list(
    consuming=paste0("h", seq(1, nrow(m_hp))), 
    consumed=paste0("p", seq(1, ncol(m_hp))) 
) 
# carnivore-herbivore 
m_ch <- matrix(rbinom(20, 10, p=0.2), 5, 4) 
dimnames(m_ch) <- list(
    consuming=paste0("c", seq(1, nrow(m_ch))), 
    consumed=paste0("h", seq(1, ncol(m_ch))) 
) 

... так это выглядит, как ваша (я полагаю):

m_hp 

##   consumed 
## consuming p1 p2 p3 
##  h1 3 1 0 
##  h2 1 3 1 
##  h3 5 5 3 
##  h4 1 2 0 

m_ch 

##   consumed 
## consuming h1 h2 h3 h4 
##  c1 0 4 0 2 
##  c2 1 2 1 2 
##  c3 1 2 3 3 
##  c4 3 5 1 2 
##  c5 0 2 0 2 

Теперь превратить их в объекты igraph через edgelists

el_hp <- as.data.frame(as.table(m_hp), stringsAsFactors = FALSE) 
el_ch <- as.data.frame(as.table(m_ch), stringsAsFactors = FALSE) 
el <- rbind(el_hp, el_ch) 
g <- graph.data.frame(el[el$Freq != 0 , ] ) 
V(g)$type <- substr(V(g)$name, 1, 1) 

матрица смежности объединенной сети:

get.adjacency(g, sparse=FALSE, attr="Freq") 

## h1 h2 h3 h4 c2 c3 c4 c1 c5 p1 p2 p3 
## h1 0 0 0 0 0 0 0 0 0 3 1 0 
## h2 0 0 0 0 0 0 0 0 0 1 3 1 
## h3 0 0 0 0 0 0 0 0 0 5 5 3 
## h4 0 0 0 0 0 0 0 0 0 1 2 0 
## c2 1 2 1 2 0 0 0 0 0 0 0 0 
## c3 1 2 3 3 0 0 0 0 0 0 0 0 
## c4 3 5 1 2 0 0 0 0 0 0 0 0 
## c1 0 4 0 2 0 0 0 0 0 0 0 0 
## c5 0 2 0 2 0 0 0 0 0 0 0 0 
## p1 0 0 0 0 0 0 0 0 0 0 0 0 
## p2 0 0 0 0 0 0 0 0 0 0 0 0 
## p3 0 0 0 0 0 0 0 0 0 0 0 0 

Графически

t <- match(V(g)$type, c("p", "h", "c")) 
plot(g, vertex.color=t) 

enter image description here

или даже

l <- layout_with_fr(g, miny=t, maxy=t ) 
plot(g, vertex.color=t, layout=l, edge.width=E(g)$Freq) 

enter image description here

Смежные вопросы