R中的基本SNA? - 如何加载网络数据

Posted

技术标签:

【中文标题】R中的基本SNA? - 如何加载网络数据【英文标题】:basic SNA in R? - How to load network data 【发布时间】:2009-12-12 17:52:04 【问题描述】:

几年前,我使用 UCINET 进行了一些社交网络分析。这些天我想再次使用 SNA - 但这次我更喜欢统一的分析框架 - 对我来说是 R。

我查看了 sna 和 statnet 文档,但有点不知所措。

我想做的事情:首先:加载直接从例如网络调查(通常很有价值)。将此矩阵转换为两个邻接矩阵'(从属关系和个案个案)。它也可以是一个有针对性的、按案例评估的案例矩阵。

第二:加载顶点属性的文件(也来自例如网络调查数据)。

第三:然后用例如绘制图表根据某些中心性度​​量的顶点大小,由某些顶点属性着色和标记,仅绘制值超过某个阈值的边。

这是一个迷你关联矩阵:

data <- structure(list(this = c(0, 1, 0, 1, 1, 2, 0, 1, 3), 
 that = c(1, 1, 3, 0, 0, 0, 2, 1, 0), 
 phat = c(0, 0, 2, 1, 0, 0, 1, 2, 0)), 
 .Names = c("this", "that", "phat"), 
 row.names = c("a", "b", "c", "d", "e", "f", "g", "h", "i"), 
 class = "data.frame")

带有som属性数据:

att <-structure(list(sex = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 1L), .Label = c("F", "M"), class = "factor"), agegr = c(1L, 
1L, 3L, 1L, 3L, 1L, 1L, 3L, 1L), place = structure(c(1L, 2L, 
1L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("Lower", "Upper"), 
class = "factor")), .Names  = c("sex", 
"agegr", "place"), row.names = c(NA, -9L), class = "data.frame")

附言也许 SNA 会是这篇文章的好标签?我只是没有必要的善意:-)

【问题讨论】:

我添加了标签,并重新缩进了您的代码以更好地适应页面。至于 SNA 的使用,我已经很久没用过了——抱歉。 【参考方案1】:

这是一个很好的问题,为进一步探索 R 中的 SNA 提供了一些机会。我对 igraph package 比较熟悉,所以我将使用该库中的函数回答您的问题。

您问题的第一部分有一个相当简单的解决方案:

# Convert data frame to graph using incidence matrix
G<-graph.incidence(as.matrix(data),weighted=TRUE,directed=FALSE)
summary(G)
# Vertices: 12 
# Edges: 30 
# Directed: TRUE 
# No graph attributes.
# Vertex attributes: type, name.
# Edge attributes: weight.

这会从关联矩阵返回一个带有无向和加权边的图形对象。要从二分图生成从属关系图,您有两个选择。快速简便的方法是:

proj<-bipartite.projection(G)

这将返回一个列表,其中每个投影索引为 $proj1 和 proj2,不幸的是这些项目不包含执行此操作时通常需要的边权重。要做到这一点,最好的解决方案是自己简单地执行矩阵乘法。

# Create the matrices, and set diagonals to zero
M<-as.matrix(data)
affil.matrix<-M%*%t(M)
diag(affil.matrix)<-0
cases.matrix<-t(M)%*%M
diag(cases.matrix)<-0
# Create graph objects from matrices
affil.graph<-graph.incidence(affil.matrix,weighted=TRUE)
cases.graph<-graph.incidence(cases.matrix,weighted=TRUE)

使用属性数据生成图有点棘手,需要更多编码,但我建议查看一些igraph examples,甚至是some of my own,因为那里有很多内容可以帮助您入门。祝你好运!

【讨论】:

【参考方案2】:

这并不能直接回答您的问题,但如果您还没有看过,我强烈建议您观看Drew Conway's presentation on SNA in R。

【讨论】:

【参考方案3】:

您可能还想查看Social Network Analysis Labs in R and SoNIA,特别是lab on affiliation data。

【讨论】:

以上是关于R中的基本SNA? - 如何加载网络数据的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套循环中保存图形和统计信息

SNA社交网络算法

使用 R 进行 SNA 分析以了解产品推荐

技术分享 InnoDB Cluster 如何高效加载数据

网络协议中那些属于数据链路层协议?

如何使用 Alamofire 从缓存和网络加载数据?