1

我的时间网络数据子集如下:

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 年网络每个部分中每个国家的中心性分数。

4

2 回答 2

1

这似乎是一个错误,或者缺乏文档。感谢您的报告。这现在应该可以工作:

degree(as.edgelist.sna(net68, "weight"))
于 2017-12-13T11:07:08.283 回答
0

为了部分回答您的部分 (3),该tsna包提供了一种方法,可以在对象的多个时间点tSnaStats()应用包中的指标并将结果生成为时间序列snanetworkDynamic

> 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为每个时间点创建矩阵时使用该属性。

于 2019-05-16T04:51:32.247 回答