翻译中不失落:传播数据进入netdiffuseR

乔治·G·织女星

2016年1月13日

介绍

原始网络数据

边缘列表

示例1:通过加载静态扩散网络as_diffnet

对于此示例,我们将使用假调查fakeEdgelist(假边缘列表)数据集。后者是使用生成的这个假调查数据集,其中包含调查信息从两个不同组的10个不同个体中提取。联系这个fakeEdgelist(假边缘列表)数据集是有价值的,其价值与每个人在调查结果相互影响。

#加载数据集
数据(“假调查”)
数据(“fakeEdgelist”)

看一看假调查身份证件列和fakeEdgelist(假边缘列表)自我改变用户可以知道后面有哪些列通过累加生成组*100具有身份证件.

(假调查[,c(c)(“id”,“组”)])
#id组# 1  1     1# 2  2     1# 3  3     1# 4  4     1# 5  5     1# 6  1     2
(fakeEdgelist)
#自我改变价值# 1 102   101     1# 2 103   102     1# 3 102   103     1# 4 105   103     1# 5 105   104     2# 6 104   105     1

我们稍后将使用此信息验证数据的方式在结果中排序差异网络物体。

要使用as偏移网我们至少需要两个函数对象:a动态图形表示为数组或邻接矩阵列表,每个大小\(n次n次),在我们的情况下将是\(10乘以10),和整数向量大小为\(n=10)其中包含每个顶点的收养时间。让我们从生成使用th的动态图边缘列表_调整功能:

#将边列表强制为邻接矩阵
邻接<- 边缘列表_调整(
  边缘主义者=fakeEdgelist[,1:2],#应为两列矩阵/数据框架
  w个=fakeEdgelist(假边缘列表)$值,#带权重的可选向量
  无方向的= 错误的,#在这种情况下,边缘列表被定向
  t吨= 5)#我们使用此选项制作它的5个副本
#edgelist_to_adgmat.matrix(as.matrift(edgelist),w,t0,t1,t,中出现警告:某些边a在-times-或-w-上的值为NA/NULL:#   11#这些不会包含在邻接矩阵中。完整的列表将存储为结果邻接矩阵的属性,即-不完整-。

正如函数警告的那样,有一条边不完整信息,并且进一步未用于创建邻接矩阵,边缘11。如果我们看一下这条边,我们会发现它确实如此权重属性信息不完整:

fakeEdgelist(假边缘列表)[11,,下降=错误的]
#自我改变价值#11 202<不适用>不适用

为了解决这个问题,如果我们想保留顶点202数据中的孤立顶点,我们需要填充该值,以便在创建diffnet对象不会有任何问题图中顶点的属性或采用时间。

#填写空数据并检查结果
fakeEdgelist(假边缘列表)[11,“价值”]<- 1
fakeEdgelist(假边缘列表)[11,,删除=错误的]
#自我改变价值#11 202<不适用>1
#将边列表强制为邻接矩阵(再次)
邻接<- 边缘列表_调整(
  边缘主义者=fakeEdgelist[,1:2],#应为两列矩阵/数据框架
  w个=fakeEdgelist(假边缘列表)$值,#带权重的可选向量
  无方向的= 错误的,#在这种情况下,边缘列表被定向
  保持隔离= 真的,#通知这个新的论据!
  t吨= 5)#我们使用此选项制作5个副本

正如预期的那样,没有任何警告。此外,我们已经告诉函数,如果有孤立的顶点来保持它们,如中所示具有顶点202的边#11的情况。自从我们问函数创建邻接矩阵的5个副本,我们有一个列表长度5,带邻接矩阵。让我们看一下第一个元素此列表中的:

邻接[[1]]
#类“dgCMatrix”的9 x 9稀疏矩阵#     101 102 103 104 105 201 202 205 210# 101   .   .   .   .   .   .   .   .   .# 102   1   .   1   .   .   .   .   .   .# 103   .   1   .   .   .   .   .   .   .# 104   .   .   .   .   1   .   .   .   .# 105   .   .   1   2   .   .   .   .   .# 201   .   .   .   .   .   .   .   .   .# 202   .   .   .   .   .   .   .   .   .# 205   .   .   .   .   .   1   .   .   1# 210   .   .   .   .   .   1   .   1   .

正如你所见边缘列表_调整函数保持顶点标签并将其作为点名包含在矩阵中。2既然我们的邻接矩阵具有我们期望的元素数量实际上与假调查数据集,我们可以创建一个差异网络对象:

#将邻接矩阵和边缘列表强制转换为diffnet对象
差异网络<- as_diffnet(
  图表=调整,#传递动态图
  toa公司=假调查$到,#这是必需的
  顶点静态属性=假调查#Is是可选的
)

#查看diffnet对象
微分网络
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:9(101、102、103、104、105、201、202、205…)#时段数:5(1-5)#类型:定向#最终流行率:0.89#静态属性:id、toa、group、net1、net2、net3、age、gender、not。。。(9)#动态属性:-

示例2:通过加载静态扩散网络边缘列表_to_diffnet

按照前面的示例,而不是“手动”生成邻接矩阵并调用as_diffnet功能,我们将使用边缘列表_to_diffnet功能。最多调用此例程时的重要问题是要有匹配的id在edgelist和属性数据集之间。所以在调用边缘列表_to_diffnet我们需要修复身份证件中的列假调查数据集:

#之前
伪造调查$身份证件
# [1]  1  2  3  4  5  1  2  5 10
#更改id
假调查$身份证件<- 具有(fakesurvey,组*100 +标识)

#之后
假调查$身份证件
# [1] 101 102 103 104 105 201 202 205 210

既然已经修复,我们可以调用边缘列表_to_diffnet功能

差异2<- 边缘列表到偏移网(
  边缘主义者=fakeEdgelist[,1:2],#传递给edgelist_to_adgmat
  周=fakeEdgelist(假边缘列表)$值,#传递给edgelist_to_adgmat
  日期=假调查,#带有-idvar和-toavar的数据帧-
  独立数据变量= “id”,#-idvar-in-dat的名称-
  托瓦尔= “toa”,#toavar-in-dat的名称-
  保持隔离= 真的          #传递给edgelist_to_adgmat
)
#check_var_class_and_cerce(x,edgelist,c(“factor”,“integer”,:#强迫自我成为性格。
#check_var_class_and_cerce(x,edgelist,c(“factor”,“integer”,:#强制改变字符。
差异2
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:9(101、102、103、104、105、201、202、205…)#时段数:5(1-5)#类型:定向#最终患病率:0.89#静态属性:group、net1、net2、net3、age、gender、note(7)#动态属性:-

与前面的例子不同,这里的算法确保数据集和相邻顶点的顺序矩阵重合。前面的示例确实为我们提供了一个正确排序的差异网络对象,但情况可能并不总是这样。然而,选择id.and.per.变量允许用户提供顶点属性中变量的名称保存每个观察的id和时间段id的数据集,因此该函数在将数据强制转换为diffnet之前对其进行排序物体。在以下示例中对此进行了详细介绍。

调查数据:提名网络

示例3:横截面扩散数据

我们首先看一下数据

#正在加载数据
数据(“假调查”)
假调查
#id toa组net1 net2 net3年龄性别注释#1 1 1 1 NA NA NA 30 M无提名#2 2 5 1 3 1 NA 35 F没什么奇怪的#3 3 5 1 NA 2 NA 31 F仅提名网络2候选人#4 4 3 1 6 5 NA 30 M提名未参加面试的人#5 5 2 1 4 3 40 F提名4两次#6 1 4 2 3 4 8 29 F仅提名外部人员#7 2 3 2 3 NA NA 35 M隔离#8 5 3 2 10 1 NA 50 M没什么奇怪的#9 10 NA 2 5 1 NA 19 F非掺杂剂

对于这个数据集,有几个重要的备注。首先,每个此数据集中的个人属于不同的组,而这是并非总是如此,调查_差异允许记帐通过组变量参数。此外,除了有一个孤立的顶点,调查中的两个人提名人既没有调查也没有在小组中展示:

伪造调查[c(c)(4,6),]
#id toa组net1 net2 net3年龄性别注释#4 4 3 1 6 5 NA 30 M提名未参加面试的人#6 1 4 2 3 4 8 29 F仅提名外部人员

因此,在第一组中,4名候选人提名身份为6,但未在数据中显示,并且在第二组中,6人提名了3、4和8人,也提名了没有出现的人在调查中。

而对于一些研究人员来说,未被调查的个人提名可能不重要,对于其他一些可能是。对于这种情况功能可以选择保留未被调查的个人(因此您将得到更大的邻接矩阵),或忽略它们并只保留那些他们接受了调查。例如,如果我们想保持未调查状态网络中需要设置的个人否未调查=假:

#将测量数据强制转换为diffnet对象
diffnet_w_未调查<- 调查_差异(
  日期=假调查,#数据集
  独立数据变量= “id”,#idvar的名称(必须是整数)
  净无功功率= c(c)(“网络1”,“网络2”,“网络3”),#提名变量名称向量
  托瓦尔= “toa”,#采用var的时间名称
  群变量= “组”,#组变量的名称(可选)
  否,未测量= 错误的                 #保留或不保留
)
diffnet_w_未调查
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:13(101、102、103、104、105、106、201、202…)#时段数:5(1-5)#类型:定向#最终流行率:0.62#静态属性:group、net1、net2、net3、age、gender、note(7)#动态属性:-
#检索节点ID
节点(diffnet_w_unreserved)
#  [1] "101" "102" "103" "104" "105" "106" "201" "202" "203" "204" "205" "208"# [13] "210"

跨越5个时间段的网络,有13个顶点(调查了9个个人+4名未被调查的个人)。这会产生不同的结果与我使用默认行为的情况相比功能,否未调查=真:

#将测量数据强制转换为diffnet对象
diffnet_wo_unreserved<- 调查_差异(
  日期=假调查,#数据集
  idvar公司= “id”,#idvar的名称(必须是整数)
  净无功功率= c(c)(“网络1”,“网络2”,“网络3”),#提名变量名称向量
  托瓦尔= “toa”,#采用var的时间名称
  组变量= “组”                    #组变量的名称(可选)
)
diffnet_wo_unreserved
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:9(101、102、103、104、105、201、202、205…)#时段数:5(1-5)#类型:定向#最终流行率:0.89#静态属性:group、net1、net2、net3、age、gender、note(7)#动态属性:-
#检索节点ID
节点(diffnet_wo_unreserved)
# [1] "101" "102" "103" "104" "105" "201" "202" "205" "210"

此外,我们可以通过延拓来比较这两个扩散网络一个接一个:

差异<-diffnet_w_未调查-diffnet_wo_unreserved
差异
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:4(106、203、204、208)#时段数:5(1-5)#类型:定向#最终流行率:0.00#静态属性:group、net1、net2、net3、age、gender、note(7)#动态属性:-

示例4:纵向扩散数据

在这个示例中,我们将使用动态网络数据,这是一个具有法术和动态属性的edgelist

#查看数据
数据(“fakeDynEdgelist”)
(fakeDynEdgelist)
#自我改变价值时间# 1 102   101     1 1990# 2 103   102     1 1990# 3 102   103     1 1990# 4 105   103     1 1990# 5 105   104     2 1990# 6 104   105     1 1990
数据(“faksurveyDyn”)
(fakesurveyDyn)
#id toa组net1 net2 net3年龄性别#1 1 1991年1 NA NA NA NA 30 M#2 2 1990 1 3 1 NA 35 F#3 3 1991 1 NA 2 NA 31 F#4 4 1990 1 6 5 NA 30 M#5 5 1991 1 4 4 3 40 F#6 1 1991 2 3 4 8 29 F#注释时间#1第一波:1990年无提名#第二波:没有什么奇怪的1990#第一波:1990年只有提名者#4第一波:提名1990年没有面试的人#5第一波:1990年两次提名4人#6第一波:1990年仅提名局外人

和以前一样,我们必须确保ID正确

#正在修复ID
假测量Dyn$身份证件<- 具有(fakesurveyDyn,组*100 +标识)

#一个孤独的人
fakeDynEdge列表[11,“价值”]<- 1
差异网络<- 边缘列表_to_diffnet(
  边缘列表=fakeDynEdgelist[,1:2],#像往常一样,两列数据集
  w个=fakeDynEdge列表$值,#这里我们使用重量
  t0(吨)=fakeDynEdge列表$时间,#具有拼写起点的整数向量
  时间t1=fakeDynEdge列表$时间,#具有拼写端点的整数向量
  数据=假调查Dyn,#属性数据集
  独立数据变量= “id”,
  托瓦尔= “toa”,
  时间变量= “时间”,
  保持隔离= 真的              #保持隔离(如果有)
)
#check_var_class_and_cerce(x,dat,c(“numeric”,“integer”)中出现警告,#“integer”,:强制将time转换为integer。
#check_var_class_and_cerce(x,edgelist,c(“factor”,“integer”,:#强迫自我成为性格。
#check_var_class_and_cerce(x,edgelist,c(“factor”,“integer”,:#强制改变字符。
差异网络
#类diffnet的动态网络-#名称:扩散网络#行为:未指定#节点数:9(101、102、103、104、105、201、202、205…)#时段数:2(1990年至1991年)#类型:定向#最终流行率:1.00#静态属性:-#动态属性:组、网1、网2、网3、年龄、性别、备注(7)

  1. 虽然还有其他候选人开放式xlsx程序包读xl包具有正确处理excel文件编码的好功能。如果您正在处理非ASCII或UTF-8,这一点特别重要数据集。↩︎

  2. 另一件事是存储在邻接是一流的dgC矩阵来自矩阵包,这些是列压缩存储稀疏矩阵并允许在多个零的矩阵中节省内存。净扩散器例程基于此类矩阵。此外,要了解有多少内存稀疏矩阵保存,而方阵大小\(5e4乘以5e4)将需要接近18GB的使用常规R的内存矩阵,一个dgC矩阵相同大小的内存大约需要6MB。↩︎

  3. 这个具有函数允许简化数据通过允许引用data.frame中的列,在R中进行管理必须调用data.frame本身(请参见?具有).↩︎