首页 文章

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

提问于
浏览
4

几年前,我使用UCINET进行一些社交网络分析 . Theese的日子我想再次使用SNA - 但这次我更喜欢统一的分析框架 - 对我而言是R.

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

我想做的事情:首先:加载一个直接从例如拉出的二分/入射矩阵 . 网络调查(通常很有 Value ) . 将此矩阵转换为两个邻接矩阵'(通过隶属关系和案例分类) . 它也可以是由案例矩阵定向的,有 Value 的案例 .

第二:加载顶点属性的文件(也来自例如websurvey数据) .

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

这是一个迷你关联矩阵:

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会是这篇文章的好标签?我只是没有礼貌的SO善意:-)

3 回答

  • 7

    这是一个很好的问题,并为进一步探索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 .

  • 0

相关问题