簡體   English   中英

使用 igraph 在 bipartite.networks 上工作:基本度量的問題(密度、歸一化程度)

[英]Working on bipartite networks with igraph : problem with basic measures (density, normalized degree)

我是 bipartite.network 分析的新手,我在基本測量方面遇到了一些麻煩。 我正在嘗試在不投影 1-mode graphs 的情況下處理 bipartite.networks 。 我的問題來自igraph package 允許創建二分圖但這些措施似乎不適應這些圖的特殊性。

所以,我的一般問題是當你直接在 bipartite.networks 上工作時你會怎么做?

這是一個密度的具體例子

## Working with an incidence matrix (sample) with 47 columns and 10 rows (unweighted / undirected)
# Want to compute basic global index like density with igraph
library(igraph)
g <- graph.incidence(m, directed = F )
graph.density(g) # result = 0.04636591

# Now trying to compute basic density for a bipartite graph without igraph (number of edges divided  by the product of the two types of vertices)
library(Matrix)
d <- nnzero(m)/ (ncol(m)*nrow(m)) # result 0.1574468

# It seems that bipartite package does the job 
library(bipartite)

networklevel(m, index=c("connectance")) # result 0.1574468

但是二分法package 是非常特定於生態學領域的,很多措施都是針對食物 web 和物種之間的相互作用而設計的(有些,比如聚類系數,似乎沒有考慮到圖的二分法性質:例如計算 4-周期)。

那么,是否有更簡單的方法可以使用igraph在 bipartite.networks 上工作? 要測量一些全局指標(密度、4 周期的聚類系數,我知道.net 會這樣做,但我的實際網絡太大),並在考慮二分特異性的情況下標准化局部指標,如度數、緊密度、中間性中心性(就像 Borgatti SP, Everett MG, 1997, « 2-mode data 的網絡分析 », Social Networks)?

任何建議將被認真考慮 !

在代碼下面重現我的矩陣“m”的樣本

 m <- structure(c(1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 
0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 
1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0), .Dim = c(10L, 47L), .Dimnames = list(
    c("02723", "13963", "F3238", "02194", "15051", "04477", "02164", 
    "06283", "04080", "08304"), c("1185241", "170063", "10350868", 
    "217831", "2210247", "2262963", "1816670", "1848354", "2232593", 
    "146214", "1880252", "2261639", "2262581", "2158177", "1850147", 
    "2262912", "146412", "2262957", "1566083", "1841811", "146384", 
    "216281", "2220957", "1846986", "1951567", "1581130", "105343", 
    "1580240", "170654", "1796236", "1835553", "1835848", "146400", 
    "1174872", "1283240", "2253354", "1283617", "146617", "160263", 
    "2263115", "184745", "1809858", "1496747", "10346824", "148730", 
    "2262582", "146268")))

密度:你已經知道了

度數 degv1 <- 度數 (g, V(g)[type == FALSE]) degv2 <- 度數 (g, V(g)[type == TRUE])

歸一化度數:除以其他節點類別的vcount

degnormv1 <- degv1/length(V(g)[type == TRUE]) degnormv2 <- degv2/length(V(g)[type == FALSE])

沒有關於親密度、介數或聚類系數的答案

對於歸一化程度,這里有一個沒有 igraph 的解決方案

normalizedegreeV1 <- data.frame(ND = colSums(m)/nrow(m))

normalizedegreeV2 <- data.frame(ND = rowSums(m)/ncol(m))

但這留下了關於中心性措施的其他問題......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM