温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者: 杨继超 (中山大学)
邮箱: yangjch7@mail2.sysu.edu.cn
目录
2017 年一部名为《人民的名义》的电视剧,一经播出便引起了大家的关注,这部剧除了反腐的剧情、老戏骨精湛的演技让人拍案叫好,剧中错综复杂的人物关系更为精彩。其中,最令人感到的神秘的“组织”莫过于“汉大帮”,也就是汉东省政坛中以高育良、祁同伟为中心的汉东大学政法系的师生及相关人员组成的一个网络。
其实,剧中除了呈现像高育良提拔自己学生祁同伟这样的现象以外,祁同伟作为汉东省公安厅厅长,还安排了自己老家的亲戚到公安系统的相关部门工作,其老婆甚至向高育良告状说再不管管,祁同伟就要把村里的野狗弄到公安厅当警犬,真正诠释了什么叫一人得道,鸡犬升天。
或者大家此前听过天道酬勤,性格决定命运等心灵鸡汤,咱们的祁厅长活生生给大家上了一课:社会位置决定命运,这也是社会网络领域经典畅销书《人类网络》的封面语。
虽然得出这个结论有点片面,但却也告诉了我们一个重要的道理,即我们不是孤立存在的,我们生活在一个相互关联的网络中,我们的收入、工作岗位等很多重要的要素不仅仅由我们个人决定,还由你所处的关系网决定,这便是社会网络分析的前提之一。
无独有偶,在 2020 年的热播剧 《三十而已》中,女主之一的顾家,为了帮助丈夫的生意能够更上一层楼,想尽千方百计挤进所谓的“太太圈”也是同样的道理。
现实生活中,这样的现象更是比比皆是。父母想方设法将孩子送进名校,除了教育资源外,有可能更多是考虑孩子将来的社会网络,俗称“圈子”。开打印店的大多都是湖南人,靠的就是“老乡圈”。有的高校的毕业生,离开高校所在地求职,难度就会大很多,尤其是医学生,甚至出现有的名校头衔只局限于某个地域,出了这个地界这个名气就“没气”了,这里面也会有“圈子”的原因。无论是学术圈、艺术圈、娱乐圈甚至国际贸易网络,大家都会发现,网络似乎不曾感觉到,但我们早已经深处网络之中,并受其影响。
其实,“汉大帮”这一张网络仅仅只是剧中人物关系的部分而已,如果将主要人物关系进行梳理,便会发现其实人与人的距离很小,小到一个服装厂的工会主席可以只通过一个人就可以认识省委书记。
可能大家都听过著名的六度分离理论 (Milgram, 1967),也就是任意两个人之间平均只需要间隔 5 个人即 6 步便可以认识。当然,随着互联网的发展,这个数字还在下降,Fcaebook 在 2011 年对 7 亿多用户做调查发现,任意两个人之间平均只需要 4.74 步便可以认识。现实生活中,大家应该也经常发现你某个好友的朋友圈里居然有你们的共同好友,不禁感叹一句:世界好小啊!
那么,言归正传,社会网络分析究竟有何用处呢?
如果学了社会网络分析,当你了解了疾病的传播网络,就能更有效地控制疾病的传播,挽救更多人的生命。
当你了解了肥胖的友情网络,你就明白瘦不下来可能不是你的错,有可能是你的好友太喜欢吃,总忽悠你一起胡吃海喝。
当你了解了学者的引文网络,你就会明白你的文章引用率低可能不是因为文章不够好,可能是你所处的学术圈子太小。当你了解了高校的雇佣网络,你就会明白为何每个地方医院的医生大多就是当地的医学院毕业生。
要想弄清楚这些问题,入门社会网络分析,便可学习本次推文的内容。当然,社会网络分析的内容博大精深,本次推文无法做到面面俱到,仅介绍社会网络分析的重要概念,并尽力做到通俗化,同时讲解如何用 Stata 做基本的社会网络分析,以期让大家能够对社会网络分析有一个初步的了解。
社会网络是指由个体(actors)/节点(nodes)的关系组成的一张网,其中个体/节点可以是个人、组织、地区、国家等分析实体,关系可以是友情、亲情、信息沟通、组织间合作等关系。
社会网络可以用符号 G=(V, E) 表示,其中 V 表示节点的数量,E 表示关系。一张社会网络可以直观地表示为如下图所示的图形。黑点即为节点,数字为节点的名称或者标签,节点间的关系用连线来表示,若无关系则没有连线,下图为有向图,即连线有箭头,有的为单向,有的为双向,这就好比恋人网络,有可能是相互喜欢,有可能就是悲哀的“你爱他,他爱她”。如果方向不重要,也可以直接用无箭头的连线连接,这种图形称为无向图。另外,关系也可以分强弱,以连线上的数字来代表即可,这一层面并没有在下图中表示出来,而是简单表示有无关系。
社会网络分析(social network analysis,简写为SNA)是关于社会实体间互动模式的研究方法 (Wasserman and Faust, 1994; Scott, 2011)。过去几十年间,社会网络分析已经成为社会科学(包括经济学)领域主要的研究话题,同时也引起了其他领域的关注。
任何一张社会网络的图都可以转化为网络数据,其中最为常见的便是邻接矩阵,与空间计量当中的空间权重矩阵类似,具体可参见连享会推文 空间权重矩阵的构建。
如下图所示,将有关系设定为 1,无关系设定为 0,便可将下图中左边的图转化为右边的邻接矩阵。值得注意的是,在社会网络分析中,如果是有向图,默认在矩阵当中的数字是从行到列的关系,例如 3 行 1 列的数字 1,表示节点 3 对节点 1 有影响关系。
除了用邻接矩阵来表示网络数据,也可以用连接表来表示。具体而言,在存储的数据中,会有两列数据代表节点,第一列是节点的出发点,第二列是节点的接受点,如果想要表示关系的强弱,还会有第三列,数值表示关系的大小。因此,下图中左边的图便可转化为右边连接表的形式,其表达的含义和邻接矩阵是一致的。
在一个社会中,有厉害的人和不太厉害的人,如果觉得某个人很行可能会有三个角度,一是这个人本身让人看起来很行,第二是别人都觉得这个人很行,第三是说你行的别人也很行。这三个角度在社会网络分析当中也是有所体现,并有相应的指标予以度量。
在一个社会网络当中,如果想要衡量某一个节点的重要程度,则会采用点度中心度(Degree Centrality)或者接近中心度(Closeness Centrality)来衡量,也就是我们常说的人脉广这一纬度;如果想要衡量别的节点对某一节点的依赖程度,则会采用中介中心度(Betweenness Centrality)来衡量,这种节点类似于我们常说的中间人;如果想要用邻居节点的重要程度来衡量某个节点的重要程度,则会采用特征向量中心度(Eigenvector Centrality),类似于很多同学申请博士时,总要找教授帮你们写推荐信,你多么优秀在某种程度上取决于给你写推荐的教授有多大佬。
在一个无向图中,某个节点 i 的点度中心度被定义为节点 i 与其他直接相联系节点的个数,也就是那些与节点 i 有联系,且只有一步距离的点的数量。这个指标简单来讲,就是微信好友越多的那个人点度中心度就越高。节点 i 的点度中心度具体公式如下:
其中,如果节点 i 和节点 j 有直接联系,则
在一个有向图中,节点的点度中心度将进一步被细分为点入中心度(In-degree)和点出中心度(Out-degree)两种。这个也很容易理解,比如大家经常使用的微博,你的关注和关注你的往往并不是对等的,关注你的人越多,点入中心度就越高,而你关注的人越多,点出中心度就越高。
点度中心度在现实生活中也非常重要,我发一个微博毫无收入,而易烊千玺发一个微博可以轻松收入过五位数。现在特别火的直播带货,并不是所有主播都能挣钱,往往都是那些粉丝数目特别多的,也就是点度中心度特别高的主播才能挣钱,这也是为什么现在有一些高校周边的打印店一毛一张而且送货上门也要做这门生意,原因就是为了以低价赚取流量,从而以别的途径挣钱。
如下图所示,节点 A 的点度中心是 7,节点 G 是 5,节点 C 是 4,节点 L 是 1。
采用点度中心度衡量一个节点的“人脉”也存在一定弊端,最为重要的弊端就是点度中心度仅仅只能衡量一个节点局部的连接程度,不能够刻画一个节点在一个网络中整体作用。好比是一个人仅仅只是在广州市海珠区人脉很广,但是出了这个区就不一定了。因此,如果想要考察一个人在广州市而非仅仅海珠区的“人脉”广度,就需要接近中心度的概念。
要理解和计算接近中心度,首先要定义节点间的距离。如下图所示,节点 A 到 F 可以通过多条路径到达,而节点间的距离被定义为两个节点间最短路径的长度,对于 A 和 F 而言,距离
那么,在一个有 n 个节点的社会网络中,所有其他节点到节点 i 的平均距离公式为:
其中,
我们将要讨论的第三种中心度是中介中心度。节点 i 的中介中心度是通过测度其他节点间的最短路径中需通过节点 i 的比例来定义和衡量节点 i 在网络中的重要性。节点 i 的中介中心度的具体公式为:
其中,
在《人民的名义》中,有一个神秘的人物——刘生。此人并非主角,在剧中是香港前镜鉴周刊记者,也就是说他根本不是内地人,更不是汉东省的人。此人看似不重要,但是通过他却能获得很多汉东的情报,这些情报居然能让剧中的很多老板花几十上百万去购买,他其实就承担着一个情报中介的身份。现实生活中,类似这样的角色也有很多,这些人不需要人脉有多广,关键是要有特定“路子”即可,你要买某样东西、找某个人帮忙、获取某个信息不通过他们还真办不成。
最后一种重要的中心度为特征向量中心度。这个指标是用节点邻居的点度中心度来衡量该节点的重要程度。现实生活中,自己人脉不广没关系,如果自己熟悉的人人脉广也可说自己人脉不错。这就是很多影视剧里,很多小角色为了撑场面,自己虽然认识不到几个人,但是张口闭口“我有一个好大哥”。
为了简要说明特征向量中心度的计算方法,考虑如下图所示的一个简单无向网络图。
该社会网络图也可以转化为如下邻接矩阵 A:
通过点度中心度的定义,可以很容易计算出 A-E 每个节点的点度中心度,用如下列向量 V 表示:
接下来,用矩阵 A 与列向量 V 相乘,便可将各个节点邻居的点度中心度汇集到这个节点上。
上述过程也可以用下图表示:
如果继续将矩阵 A 与计算而得的列向量 V' 相乘,便可将节点邻居的邻居的点度中心度也叠加到该节点上。
同样,整个过程也可以用下图表示:
如此无线迭代下去,会得到一个相对稳态值,这可以通过一系列复杂的推导证明。如果达到相对稳定值
虽然迭代下去并不一定一直都是
本节将介绍如何用 Stata 做社会网络分析,主要包括相关命令的安装,网络数据的导入、网络数据可视化及各种中心度计算,希望能够通过本小节的内容让大家对使用 Stata 做社会网络分析有一个初步的了解。
采用如下命令便可一键安装所需的所有命令:
nwinstall, all
亦可以采用如下命令:
findit nwcommands
依次点击如下图所示的前四个链接进行安装。
如果仍然失败,则可以考虑直接点击链接 https://github.com/THOMASGRUND/NWCOMMANDS 打包下载所有相关的外部命令,解压后放到自己的 PLUS 文件夹中即可。
安装完毕后,可以输入如下命令:
help nwcommands
则会跳转出使用 Stata 做社会网络分析的指导手册,可以通过这个指导系统全面地学习如何用 Stata 做社会网络分析。
网络数据的导入常用的方法有四种:直接使用、变量设定、网络导入和其他格式导入。
对于已经是 Stata 格式的网络数据,和普通数据使用方法类似,可以直接采用 nwuse
这个命令。具体语法为:
nwuse filename [, nwclear clear]
其中, filename
为网络数据的名称, 选项中 nwclear
和 clear
的区别在于,前者是清除内存中的网络,而后者只清楚网络中的数据,在社会网络分析中,前者用得居多,很少会用到 clear
选项。
其实,Stata 做社会网络分析的常规命令与普通数据差别很小,大多时候只多一个前缀 nw
,同理的还有很多,例如 nwsave
、nwdrop
等,更为详细的对比和介绍可以参看指导手册。
第二种方法有点类似于时间序列数据,导入数据后还需要一定的命令来声明所导入的数据是一个时间序列数据。网络数据也是类似,可以按照普通数据导入,然后采用 nwset
命令来设定。具体设定方式又可大致分为 3 类:
语法结构为:
nwset varlist [, options ]
这里的 varlist
就是我们需要设定的节点,这样 Stata 就知道导入的数据中这些变量是网络数据中的节点,所这些节点对应的数据便是相应的邻接矩阵。
如前文所述,网络数据的结构一般有两种,除了邻接矩阵外,还有连接表型的数据,对于这种数据结构,仍然可以采用 nwset
进行设定。关键是要设定好节点的起点和终点,以及相应的取值。例如,在如下的原始数据中:
fromid toid value|
|--------------------------|
1. | Peter Thomas 1 |
2. | Tim Peter 3 |
3. | Mathilde Thomas 2
如果不设定, Stata 则不会将其识别为网络数据,则需要如下命令才可识别为网络数据:
nwset fromid toid value, name(mynet) edgelist
其中,选项 name()
填入的名称是给设定的网络命名,除此之外,最为关键的是加入选项 edgelist
。
另外一种设定邻接矩阵型网络的方法是直接从 mata 矩阵中导入,具体命令如下:
mata: net = (0,1,0,0\1,0,0,1\1,1,0,0\1,1,1,0) //生成邻接矩阵型 net
nwset, mat(net) name(network) //设定生成的矩阵 net 为网络数据,名称为 network
对于网络的公开数据,也可以直接采用 webnwuse
导入,具体代码如下:
webnwuse http://nwcommands.org/data/glasgow
结果如下,导入了 3 个网络,分别为 glasgow1、glasgow2 和 glasgow3。
Loading successful
(3 networks)
--------------------
glasgow1
glasgow2
glasgow3
如果是官网 http://nwcommands.org 的公开数据,则可以省略掉网址,直接加网络数据名称,具体代码如下:
webnwuse florentine
结果如下:
Loading successful
(5 networks)
--------------------
glasgow1
glasgow2
glasgow3
flobusiness
flomarriage
可以看到,目前内存中一共有 5 个网络,之前的 3 个网络并没有删除,如果不想要之前的 3 个网络,则需要在选项中加入 nwclear
这一选项。
这种方式实际上运用的是最多的,因为目前常用的社会网络分析工具并非 Stata,这就意味着大多数数据的格式也不是 Stata 所能识别的,因此如果想利用 Stata 处理其他软件格式的数据,则需要用到 nwimport
命令。例如:
nwimport "http://vlado.fmf.uni-lj.si/pub/networks/data/ucinet/zachary.dat", type(ucinet) //导入原格式为 Ucinet 软件格式的数据
nwimport
这一命令,最关键的是在选项中加入 type()
选项,可以以选择目前市面上常用的社会网络分析软件,例如 ucinet
、pajek
等。
结果如下:
Importing successful
(7 networks)
--------------------
glasgow1
glasgow2
glasgow3
flobusiness
flomarriage
ZACHE
ZACHC
可见,在原本只有 5 个网络的内存中又导入了 2 个网络。
网络数据的可视化其实很简单,只需要使用 nwplot
这个命令即可,以数据集 glasgow3 为例,只需要采用如下命令即可绘制网络图:
nwpolt glasgow3
结果如下图所示:
如果想进一步给不同节点按照某种属性赋予不同颜色,则可以通过如下命令实现:
nwplot glasgow3, color(alcohol3)
选项 color()
中填入的便为属性变量 alcohol3,所谓属性变量就是网络数据中除了节点变量以外的变量,类似于面板数据中的自变量和控制变量。
结果如下图所示:
如果想画出更复杂的图形,可以 help nwplot
系统地学习,此处只做基本的操作演示。
内存中所有网络的概述可以用如下代码:
nwset, detail
部分结果如下:
1) Stored Network
--------------------------------------------------
Network name: glasgow1
Directed: true
Nodes: 50
Network id: 1
Variables: time1_v1 time1_v2 time1_v3 time1_v4 time1_v5 time1_v6 time1_v7 tim
> e1_v8 time1_v9 time1_v10 time1_v11 time1_v12 time1_v13 time1_v14 time1_v15 tim
> e1_v16 time1_v17 time1_v18 time1_v19 time1_v20 time1_v21 time1_v22 time1_v23 t
> ime1_v24 time1_v25 time1_v26 time1_v27 time1_v28 time1_v29 time1_v30 time1_v31
> time1_v32 time1_v33 time1_v34 time1_v35 time1_v36 time1_v37 time1_v38 time1_v
> 39 time1_v40 time1_v41 time1_v42 time1_v43 time1_v44 time1_v45 time1_v46 time1
> _v47 time1_v48 time1_v49 time1_v50
Labels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
> 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Edgelabels:
为了节省版面,结果只列出了第一个网络的结果,实际上会给出内存中所有网络的结果,其中 Network name
是网络的名称,Directed
如果取值为 true
则表示节点间的连接是带方向的,如果为 false
则为不带方向的,Node
为 50 为节点数量,这也可以从节点名 Variables
和标签 Labels
中看出,Network id
为 1 表示这是内存中第一个网络,Edgelabels
为连接的标签,可以不做设定。
也可以采用 nwsummarize
单独对某个网络进行描述性分析,例如:
nwsummarize glasgow1, detail
结果为:
--------------------------------------------------
Network name: glasgow1
Network id: 1
Directed: true
Nodes: 50
Arcs: 113
Minimum value: 0
Maximum value: 1
Density: .0461224489795918
Reciprocity: .527027027027027
Transitivity: .3870967741935484
Betweenness centralization: .0821793002915452
Indegree centralization:: .119533527696793
Outdegree centralization:: .0570595585172845
可以看到,这个网络的主要指标全都计算好呈现出来了。有一些指标因内容版面限制,本次推文并没有讲解,故不在此处分析各个指标的含义,本小节的实操部分主要是讲解社会网络分析的基本操作,对结果的深度解读有兴趣的读者,可以先系统学习社会网络分析的理论部分。
也可以采用如下命令直接查看网络所对应的邻接矩阵:
nwsummarize glasgow1, matonly
如果想要考察某个节点的邻居是谁,可以用图示的方式直观获取,但是如果当网络中节点很多,网络密度很大不易观察时,便可以直接用如下代码:
nwneighbor flomarriage, ego(albizzi)
nwneighbor
后跟的是网络数据的名称,选项 ego()
中填入的便是选中需要分析的节点名称。
结果如下:
----------------------------------------
Network: flomarriage
----------------------------------------
Ego : albizzi
Neighbors : ginori , guadagni , medici
----------------------------------------
有结果可知,节点 albizzi 一共有三个邻居。
如果想要考察某两个节点间的最优路径及相应的距离,在网络图形特别复杂时,便可以用如下代码进行获取:
nwpath flomarriage, ego(albizzi) alter(pazzi)
选项 ego()
中填入的便是选中需要分析的起点节点名称,alter()
中
填入的便是选中需要分析的终点节点名称。
结果如下:
----------------------------------------
Network: flomarriage
----------------------------------------
Ego : 2 (albizzi)
Alter : 10 (pazzi)
Shortest path length : 3
Selected length : 3
----------------------------------------
Path 1: albizzi => medici => salviati => pazzi
由结果可知,待分析的两个节点间的距离为 3,节点 albizzi 需要经过两个节点才能到达节点 pazzi。
以数据 glasgow3 为例,可以采用 nwdegree
命令计算节点的点度中心度,如果为有向网络,则会同时计算点入中心度和点出中心度,具体代码如下:
webnwuse glasgow,nwclear
nwdegree glasgow3
结果如下:
----------------------------------------
Network name: glasgow3
----------------------------------------
Degree distribution
_in_degree | Freq. Percent Cum.
------------+-----------------------------------
0 | 5 10.00 10.00
1 | 9 18.00 28.00
2 | 13 26.00 54.00
3 | 11 22.00 76.00
4 | 8 16.00 92.00
5 | 3 6.00 98.00
7 | 1 2.00 100.00
------------+-----------------------------------
Total | 50 100.00
_out_degree | Freq. Percent Cum.
------------+-----------------------------------
0 | 5 10.00 10.00
1 | 10 20.00 30.00
2 | 13 26.00 56.00
3 | 6 12.00 68.00
4 | 12 24.00 92.00
5 | 4 8.00 100.00
------------+-----------------------------------
Total | 50 100.00
Indegree centralization:: .094960433152853
Outdegree centralization:: .053311120366514
如果想确切地知道每个节点的点度中心度,则可以通过如下的代码实现:
list _nodelab _in_degree _out_degree
只列出前十个节点的结果:
+--------------------------------+
| _nodelab _in_de~e _out_d~e |
|--------------------------------|
1. | 1 3 4 |
2. | 2 1 3 |
3. | 3 2 1 |
4. | 4 3 1 |
5. | 5 2 2 |
|--------------------------------|
6. | 6 1 3 |
7. | 7 4 4 |
8. | 8 1 1 |
9. | 9 0 1 |
10. | 10 4 5 |
同理,如果想计算接近中心度、中介中心度和特征向量中心度可以分别通过 nwcloseness
、nwbetween
和 nwevcent
计算,操作代码和点度中心度是类似的,故不在此处赘述。
Ghosh, J., et al. 2009. Vulnerability to HIV/AIDS among women of reproductive age in the slums of Delhi and Hyderabad, India. Social Science & Medicine 68(4): 638-642. -PDF-
Milgram, S. 1967. The small world problem. Psychology today 2(1): 60-67. -PDF-
Wasserman, S. and K. Faust. 1994. Social network analysis: Methods and applications, Cambridge university press.
Scott, J. 2011. Social network analysis: developments, advances, and prospects. Social network analysis 1(1): 21-26. -PDF-
Jatin Bhasin, Towards Data Science Graph Analytics — Introduction and Concepts of Centrality
Note:产生如下推文列表的命令为:
lianxh 社会网络 可视化 人工神经, m
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 因果推断, 空间计量,寒暑假班等 | |
⭕ 数据清洗系列 | 游万海 | 直播, 88 元,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh