无法获得边缘权重以计算时间网络中心性得分

时间:2017-11-21 01:38:34

标签: r social-networking sna statnet

时态网络的数据子集如下:

edge <- data.frame(onset = c(1968, 1968, 2007),
               terminus = c(1968, 1968, 2007),
               id_from = c(1, 1, 2),
               id_to = c(3, 2, 4),
               weight = c(1, 3, 2))

vert <- data.frame(onset = c(1968, 1968, 1980, 1978),
               terminus = c(2017, 2017, 2017, 2017),
               vertex_id = c(1, 2, 3, 4),
               abb.name = c("UK", "US", "Germany", "Pakistan"))

# Create networkDynamic object
netd <- networkDynamic(vertex.spells = vert[,c(1,2,3,4)],
                   edge.spells = edge[,c(1,2,3,4,5)],
                   create.TEAs = TRUE,
                   edge.TEA.names = "weight")

vert$abb.name <- as.character(vert$abb.name)

# Set vertex attributes
set.vertex.attribute(netd, "abb.name", as.vector(vert$abb.name))
network.vertex.names(netd)<-vert$abb.name

# Collapse network to look at 1968 network
net68 <- network.collapse(netd,
                      at = 1968, 
                      rm.time.info = FALSE,
                      rule = "latest")
# Get centrality score
degree(net68)

但是,这会返回不考虑权重的中心分数。

[1] 1 1

我如何确保networkDynamic考虑到(1)每年的权重是重要的,因此它不能计算同一两个国家之间的多个关系作为聚合网络中的一个边缘,( 2)权重在中心分数中得到恰当的计算,(3)获得包含国家名称的degree()输出?理想情况下,我希望从1968年到2017年,在每个网络片段中获得每个国家的中心分数。

2 个答案:

答案 0 :(得分:1)

这似乎是一个错误,或缺乏文档。谢谢你的报道。这应该适用于现在:

degree(as.edgelist.sna(net68, "weight"))

答案 1 :(得分:0)

要部分回答您的部分(3),tsna包提供了tSnaStats()函数,作为在sna上的多个时间点应用networkDynamic包中的指标的一种方法对象并产生时间序列结果

> library(tsna)
> tSnaStats(netd,'degree')
Time Series:
Start = 1968 
End = 2017 
Frequency = 1 
     UK US Germany Pakistan
1968  1  1       1        1
1969  0  0       0        0
1970  0  0       0        0
1971  0  0       0        0
1972  0  0       0        0
1973  0  0       0        0
1974  0  0       0        0
...
2007  0  1       0        1
2008  0  0       0        0
2009  0  0       0        0
2010  0  0       0        0
2011  0  0       0        0
2012  0  0       0        0
2013  0  0       0        0
2014  0  0       0        0
2015  0  0       0        0
2016  0  0       0        0

不幸的是,尽管tSnaStats()可以将参数传递给degree()函数,但是我看不出一种简单的方法来告诉它每次创建矩阵时都使用weight属性点。