首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的基本SNA?-如何加载网络数据

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

Stack Overflow用户
提问于 2009-12-13 01:52:04
回答 3查看 3.1K关注 0票数 4

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

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

我想做的是:首先:加载一个直接从网络调查(通常是有值的)中提取的二分/关联矩阵。将此矩阵转换为两个邻接矩阵‘(按从属关系从属,按事例)。它也可以是一个有方向的,有价值的案例矩阵。

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

第三:然后根据一些中心性度量绘制具有例如顶点大小的图,通过一些顶点属性进行着色和标记,只有值超过特定阈值的边才会被绘制。

这是一个迷你关联矩阵:

代码语言:javascript
复制
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属性数据:

代码语言:javascript
复制
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是这篇文章的一个很好的标签?我只是没有这样的善意:-)

EN

回答 3

Stack Overflow用户

发布于 2009-12-14 05:30:41

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

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

代码语言:javascript
复制
# 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.

这将返回来自关联矩阵的具有无向边和加权边的图形对象。要从二部图生成从属关系图,您有两个选择。最简单快捷的方法是:

代码语言:javascript
复制
proj<-bipartite.projection(G)

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

代码语言:javascript
复制
# 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,因为那里有很多可以让您入门的内容。祝好运!

票数 7
EN

Stack Overflow用户

发布于 2009-12-13 07:11:43

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

票数 2
EN

Stack Overflow用户

发布于 2011-03-22 01:44:48

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1894190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档