做社会网络分析的人,手里大概率都存着一个 UCINET。很多人的日常用法是:导入矩阵,跑一下密度和中心性,再转去 NetDraw 画张图,完事。UCINET 的价值远不止这些,尤其是当你面对“这两个网络之间到底有没有关系”“这个群体的结构是不是偶然”“谁坐在信息流通的关键位置上”这类问题时,基础指标回答不了,得把 UCINET 的高级功能请出来。
这篇文章是系列第 13 篇,专门聊 UCINET 高级功能。我默认你已经会用 UCINET 算度数、密度、连通成分这些基础操作,但面对随机网络生成、QAP 检验、CONCOR、结构洞这些名字还不太清楚它们到底能干什么。这里不打算把每个菜单都念一遍,而是按“研究问题”来组织:什么时候需要仿真、怎么判断网络结构是否显著、怎么用块模型看群体角色、怎么把结构洞算清楚,最后给一个完整的实例串联全流程。如果你正卡在“指标算完了但不知道该怎么解释”这一步,这篇应该能帮你把路理顺。
1. UCINET 高级功能到底“高”在哪
1.1 基础功能回答“是什么”,高级功能回答“为什么”
先讲个直观的对比。密度 0.13,你是该说“这个网络联系稀疏”,还是说“联系已经很多了”?中心性最高的节点排第一,你是该说“他是核心人物”,还是说“这可能是偶然”?基础功能只负责给你一个数,但不会告诉你这个数意味着什么,值不值得写进论文。
高级功能的核心价值,是把描述性问题升级为推断性问题。它通过生成随机网络、置换矩阵、比较统计量这一类方法,给你一个判断依据:你看到的网络结构,到底是不是随机的产物?关系网络是否受到某个属性(比如团队分组、区域距离)的显著影响?某个节点的位置优势,是单纯连接多,还是因为它填补了群体之间的结构空洞?
这个过程听起来有点绕,但我用一句大白话总结:基础指标是体温计,告诉你 39 度;高级功能是医生,告诉你这个 39 度是细菌感染还是病毒感冒。在做研究、写报告、向别人解释“为什么你的网络会呈现这种形态”时,医生比体温计有用得多。
1.2 功能模块地图:先定位你的研究问题
UCINET 的高级功能模块不少,但不需要全部精通。关键在于:你的研究问题属于哪一类,就去找对应的模块。下面这张表是我常用的定位逻辑,也对应了本文后面要展开的内容。
| 研究问题 | 对应模块 | 菜单入口(版本不同略有差异) |
|---|---|---|
| 这个网络的结构是不是随机产生的 | 随机网络生成、统计模拟 | Data > Generate |
| 两个关系矩阵之间是否显著相关 | QAP 相关 | Tools > Testing Hypotheses > QAP |
| 多个因素如何同时影响关系形成 | MRQAP 回归 | Tools > Testing Hypotheses > MRQAP |
| 网络中是否存在结构等位的“位置群体” | CONCOR 块模型 | Tools > Roles & Positions > CONCOR |
| 已知群体数量时如何划分最内聚的子群 | Factions 聚类 | Network > Subgroups > Factions(或 Roles & Positions) |
| 哪些节点占据了信息桥接的位置 | 结构洞分析 | Network > Ego Networks > Structural Holes |
| 群体内部连接与外向连接的比例 | E-I 指数 | Tools > Testing Hypotheses > Dyadic > E-I Index |
| 把计算结果叠加到可视化图上 | NetDraw 联动 | NetDraw 内 File > Open |
有些朋友看到这么多功能会犯选择困难。我的建议是:不要按菜单顺序一个一个试,而是先写下三个问题。第一,我的数据是什么形态(有向还是无向、二值还是加权);第二,我最想证明的结论是什么;第三,我需要让读者相信什么。三句话写出来,你自然知道该去哪几个模块。别人用得多不代表你也得用,UCINET 的高级功能是弹药库,按需取用,不是进了门就把所有枪都打一遍。
2. 网络仿真与假设检验:让结论经得起质疑
2.1 把“仿真”理解成统计模拟
先掰一个常见的误区。很多朋友一听到“社会网络仿真”,脑子里浮现的是 Agent 之间互动、网络随时间演化的动画效果,然后说“UCINET 不太擅长这个”。这个理解没错,但窄了。UCINET 里的仿真,绝大多数情况指的是统计模拟:反复生成随机数据,构造出一个“如果网络里没有任何结构”的参考分布,然后把你的真实数据放进去对比,看它站在分布的第几位。
这种方式在文献里叫随机化检验,或者零模型比较。它的逻辑非常像做实验时设置对照组:你想证明“这个网络的集聚系数很高”,光说一个 0.42 是没有说服力的。你得先生成一百个节点数相同、密度相近的随机网络,看它们的集聚系数一般是多少。如果随机网络通常在 0.1 到 0.15 之间,而你的真实网络是 0.42,那就有底气说:这个网络确实存在显著的局部聚类,不是把点随机连起来就能出现的。
具体操作上,用 Data > Generate 下面的随机网络生成功能。对话框里可以设置节点数量、网络密度或者边的数量、是否有向等参数。生成之后,把它当作对比用的零模型矩阵,配合密度、平均路径长度、集聚系数这些指标一起看。有些版本的 UCINET 还提供更具结构性的网络生成模型(比如基于偏好依附或小世界过程的生成方式),适合做更复杂的情景对比。
2.2 QAP 相关:两个矩阵之间的显著性检验
如果你手里有两个关系矩阵,想知道它们是不是显著相关,UCINET 里最常用的就是 QAP(Quadratic Assignment Procedure,二次指派程序)。
为什么不能直接用普通的皮尔逊相关?因为关系矩阵里的数据天然不独立——A 认识 B,和 B 认识 A 往往是同一个关系事件的两端,行与行、列与列之间互相嵌套。普通相关分析要求的“样本独立”在这里直接被违反,p 值会失真。QAP 的做法是:先算真实矩阵的相关值,然后反复随机置换其中一个矩阵的行和列,每置换一次就重新算一次相关,跑上几千次,得到一个“完全随机情况下相关值会是什么分布”的参考系。如果你的真实相关值比绝大多数随机置换的结果都大,就说明这个相关关系不太可能是碰巧出现的。
操作路径大致是 Tools > Testing Hypotheses > QAP。选择两个矩阵文件,设置置换次数。我一般把置换次数设到 5000,默认的 1000 在 p 值靠近 0.05 的时候会抖动,5000 以上结果才稳定。结果表里重点看几列:实测相关值(Actual)、随机置换中大于等于实测值的比例(Prop >=)、小于等于实测值的比例(Prop <=)。Prop 越小,显著性越高,写论文时报告 p 值即可。
2.3 MRQAP 回归:让多个矩阵解释关系形成
QAP 相关只能看两两关系,现实研究里你常常要同时解释好几个因素。比如你要解释“两个工程师之间为什么会有知识交换关系”,可能同时涉及:他们是不是同一个小组、地理距离远近、岗位层级差异、共事时间长短。这时候用 MRQAP 回归。
MRQAP 和普通回归的区别在于,因变量和自变量都是 N×N 的矩阵,而不是一列一行的样本。它能利用 QAP 置换框架处理矩阵数据的非独立性,给出每个自变量矩阵对因变量矩阵的回归系数和显著性。操作时把因变量矩阵设成知识交换关系,自变量矩阵逐个加入,跑完之后看标准化系数和显著性。
这里有两个我自己踩过的坑。第一个坑:多个自变量矩阵之间也可能高度相关,比如“同组矩阵”和“工位相邻矩阵”的相关能到 0.8。放进 MRQAP 之前,先把自变量两两做一次 QAP 相关,如果相关太高,就只保留理论上更核心的那一个。第二个坑:矩阵里的空值。地理距离矩阵、熟悉度矩阵这类数据,最容易出现无连接时留空的毛病。UCINET 在计算时会把这些当作缺失处理,轻则警告,重则回归直接失败。规范做法是:无关系就填 0,确认数据完整再跑。
3. 块模型与凝聚子群:把“谁和谁抱团”讲清楚
3.1 CONCOR:结构等位分块的逻辑
CONCOR(CONvergence of iterated CORrelations)的名字很劝退,但它的思路其实不难。它反复计算节点与节点之间“关系模式”的相关系数,每一次迭代之后,把相关系数矩阵当作新的输入,再算下一轮。多轮之后,相关系数会收敛成 1 或 -1 两种极端状态,节点就被自然地分成两类。然后对每一类继续递归切分,直到达到你设定的块数。
最关键的认知是:CONCOR 分出来的块,强调的是“结构等位”,不是简单的“内部联系紧密”。两个节点哪怕互相没有直接连接,但它们在网络里面对其他节点的关系模式几乎一样,也会被分到同一个块。打个比方,两个新入职的员工可能互不熟识,但都只跟部门经理和行政专员有联系,那他们在结构上占据的就是同一个“位置”。
操作路径在 Tools > Roles & Positions > CONCOR。参数设置上,二值矩阵一般不需要额外变换;迭代次数默认 25 次够用;最大切分块数(max splits)设为 2 或 3,即最终节点被分成 4 个或 8 个块;最小块大小建议设 2 或 3,避免个别离群节点单独成块,后面没法解读。
跑完之后,你拿到的最有价值的东西是“块间密度矩阵”。怎么解读?拿整个网络的平均密度当阈值,块内密度高于阈值的记为 1,低于阈值的记为 0,这样就把密度矩阵变成了一个块层面的 0-1 图像矩阵。你再用这个图像矩阵判断:哪个块是内部活跃的小团体?哪个块负责跟外界保持联系?哪些块基本是孤岛?这套解读方式,在论文里比直接把块号贴出来要有说服力得多。
3.2 Factions:指定块数的聚类方案
CONCOR 是“自己决定块数”,但有时候你会遇到另一种需求:我根据理论知道网络里大概有 7 个功能团队,麻烦帮我看看关系数据能不能分成 7 个内部足够凝聚的子群。这时候用 Factions。
Factions 在给定块数的条件下,通过优化块内关系的密度来做聚类,思路类似社区发现里的模块度最大化。操作路径大致在 Network > Subgroups > Factions(或者 Tools > Roles & Positions > Factions),关键参数是块数(number of factors)和重启次数(re-start seeds)。重启次数建议设在 100 以上,运算会在不同初始划分下反复尝试,避免陷入局部最优解。输出结果里会给每个节点的归属块,以及各块之间的密度摘要。
我常用的做法是 CONCOR 和 Factions 两个一起跑,交叉验证。CONCOR 告诉你数据本身倾向分成几块,Factions 告诉你理论指定块数下的最佳划分。如果两者结果高度重合,结论就扎实了;如果差别很大,说明网络结构的边界比想象中模糊,值得你再回到理论层面想一想。
3.3 E-I 指数与块密度显著性检验
分完块之后,下一步是证明“这个分组不是我自己脑补的”。如果研究里有现成的分组信息(部门、团队、种族、校区等),用 E-I 指数(External-Internal Index)很合适。
E-I 指数的定义很简洁:E-I = (外部连接数 - 内部连接数) / (外部连接数 + 内部连接数),取值在 -1 到 1 之间。正数说明跨群体连接比群体内连接更多,网络呈开放性;负数说明关系明显向内聚集,群体边界很强。单看数值还不够,UCINET 在 Tools > Testing Hypotheses > Dyadic (QAP) 下面提供了 E-I 指数的检验,它会随机打乱节点所属的群体标签,重复置换,告诉你实测 E-I 值在随机情况下出现的概率。这一步特别重要,因为一个 -0.5 的 E-I 值,得知道它是不是随机标签也能轻松跑出来的。
块模型做完之后,还可以把块成员身份转成属性文件,然后通过 QAP 回归或者混合密度检验,看“是否属于同一块”这个变量能不能显著预测节点之间存在关系。这套“先划分、再检验”的组合,基本上就是把块模型从描述工具升级成了推断工具,论文里写出来也更有分量。
4. 结构洞与可视化联动
4.1 结构洞指标:从有效规模到限制度
结构洞理论是研究“信息优势”和“控制优势”的经典框架,罗纳德·伯特(Ronald Burt)那套指标体系,在 UCINET 里可以直接算。核心观点是:如果你的两个熟人之间相互不认识,你就在他们之间占据了一个结构洞,能获得更多非冗余的信息,也更容易在谈判中占据主动。
操作路径通常在 Network > Ego Networks > Structural Holes(部分版本在 Tools > Roles & Positions > Structural Holes)。输出包含四个主要指标:
- 有效规模(Effective Size):自我网络中去掉冗余部分之后的规模。数值越大,说明你连接到的“圈子”越多样。
- 效率(Efficiency):有效规模除以连接的节点数。效率高意味着平均每段关系都能带来非冗余的连接。
- 限制度(Constraint):最核心的指标,衡量你拥有的关系在多大程度上集中在少数相互连接的节点中。限制度越高,你的自主性越低;限制度越低,越可能处在桥接位置。
- 层级(Hierarchy):限制度在不同关系之间的集中程度。层级越高,说明你的约束高度依赖某一个关系,风险越集中。
实际研究里,我最常看的是限制度和有效规模。限制度低的人往往是信息传递的关键闸口;有效规模高的人则在多个圈子之间游刃有余。不过计算之前要处理方向问题:如果原始数据是有向矩阵,结构洞计算默认会用到方向信息,你要先明确自己的理论关心的是“咨询关系”还是“无方向的连接关系”。如果研究框架是无方向的,就先做对称化再计算。
4.2 中心性测度组合:别埋在单一指标里
高级分析里有个常见毛病:只挑一个中心性指标,比如中介中心性,排个序就完事。中介中心性对连接稀疏的网络很敏感,稀疏网络里很多路径都绕不开某几个节点,它的值会虚高。所以我的习惯是,先用 Network > Centrality > Multiple Measures 把常用中心性一口气算出来,再结合研究问题挑解释重点。
| 测度 | 回答的问题 | 典型使用场景 | 注意点 |
|---|---|---|---|
| 度中心性 | 谁的直接联系最多 | 快速识别活跃节点 | 容易只看局部,忽略全局位置 |
| 中介中心性 | 谁最长出现在他人之间的最短路径上 | 寻找“咽喉”节点 | 有向网络要注意路径方向,稀疏网络值容易偏高 |
| 接近中心性 | 谁到所有节点平均距离最短 | 评估信息扩散效率 | 网络里存在孤立节点时不可直接比较 |
| 特征向量中心性 | 谁连接的是“有影响力的人” | 识别隐性核心 | 注意特征向量的符号含义,尽量不要只看绝对值 |
| 流中介中心性 | 谁承载了最多的流动量 | 知识流、资金流 | 计算耗时较大,大规模网络慎用 |
把多个中心性一起看,能避免“伪核心”的误判。有些节点度值很高但都在同一个圈子里,中介中心性不见得高;另一些节点度值不高,却是两个大圈子之间唯一的桥,中介中心性反而突出。这两种节点的角色完全不同,前者像团宠,后者像外交官。只报告其中一个,读者很容易产生误解。
4.3 NetDraw 联动:让计算结果变成讲得清的图
UCINET 自带的 NetDraw 不只是画图工具,更重要的是它是结果叠加层。你可以把前面跑出的所有节点级指标(中心性、结构洞、块归属、群体属性)导回图上,让一张图同时表达多个层次的信息。
做法是在 NetDraw 里同时打开关系矩阵文件和属性文件,然后用 Text 菜单下的 Color Nodes 按属性(比如块号)着色,Properties 里设置节点大小按某个连续变量(比如有效规模或中介中心性)缩放。这样,视觉上大小和颜色两个维度分别对应两个不同的分析结果,读图的人一眼就能看出“谁是大节点、谁和谁同属一个块”。
有几个 NetDraw 的细节值得注意。第一,布局算法建议用 Fruchterman-Reingold 或 Kamada-Kawai,比较符合一般人对“网络自然形态”的直觉,但每次打开可能布局略有差异。确定满意的布局后,先别急着截图,把坐标固定下来再导出。第二,导出图片优先选择矢量格式,期刊投稿放大后线条和文字都不糊。第三,如果边数太多图面拥挤,按权重过滤一下弱连接,或者只显示我们聚焦的子群,图会清爽很多。可视化是服务于论证的,不是越花哨越好。
5. 完整研究链路:一个实例串联全部高级功能
5.1 场景设定与数据准备
为了把前面的功能串起来,我构造一个常见的模拟场景(数据纯属演示,不是真实企业资料):某研发团队 28 人,分布在 7 个正式小组里,通过问卷收集了“遇到技术难点时会向谁请教”的关系数据,整理成 28×28 的矩阵,行是咨询者,列是被咨询者,存在咨询填 1,没有填 0,对角线全部为 0。同时准备两个属性文件:一列是小组编号(1 到 7),一列是岗位层级(如初级、中级、高级)。
数据准备阶段最容易被忽略的是格式一致性。行名和列名一定要一一对应,建议直接用 Excel 整理成矩阵后通过 Data > Import > Excel 导入,确保导入后到 Data > DataDisplay 里检查一遍,没有空值、没有乱码、对角线符合预期。关系数据里没有关系就是 0,不是空白,这点必须养成肌肉记忆。
5.2 分析序列:零模型-QAP-块模型-结构洞-可视化
拿到干净数据后,我按以下顺序操作,每一步都有一个明确的输出。
第一步,基础描述。28 个节点,关系总数约 98 条,网络密度 0.13,集聚系数 0.42,平均路径长度 3.2。这些数字本身没有结论,但它们是需要后续验证的“候选特征”。
第二步,零模型比较。用 Data > Generate 随机生成 20 个节点数 28、密度接近 0.13 的随机网络,计算它们的集聚系数和平均路径长度。结果显示随机网络的集聚系数集中在 0.1 到 0.15,平均路径长度在 2.8 附近。真实网络的集聚系数 0.42 明显高于随机水平,平均路径长度 3.2 也偏长,说明网络存在“小团体多、路径不长”的独特结构。
第三步,QAP 相关。把“是否同小组”编码成 28×28 的矩阵,用 QAP 相关和知识交换网络做检验。实测相关 0.36,基于 5000 次置换的 p 值小于 0.001,说明关系显著集中在小组内部——知识交换确实跨不过小组边界。
第四步,块模型。用 CONCOR 做结构等位划分,限制最多切分 2 次,得到 4 个主要位置块;再用 Factions 指定 7 个块做交叉验证。两块结果比较后发现,CONCOR 的 4 个位置块里,有两个块与小组边界高度吻合,一个块是以跨小组咨询为特征的“桥接块”,另一个块是边缘孤立块。块间密度矩阵显示,桥接块与多个小组块之间都存在高于平均密度的联系,这解释了为什么整体网络没有分裂成互相隔绝的几个孤岛。
第五步,结构洞。计算全员的限制度和有效规模。识别出 4 个限制度明显低于均值、有效规模偏高的节点,他们多分布在桥接块中,承担着“知识跨界中转站”的角色。其中中介中心性最高的一个节点,恰好也是限制度最低的那个,两个指标指向同一批人,结论的交叉印证就比较牢靠。
第六步,NetDraw 可视化。节点颜色按 CONCOR 块归属着色,节点大小按有效规模缩放,边按是否跨小组分为两种样式。图上能清楚看到几条贯穿不同颜色区域的粗边,那几条粗边对应的正是结构洞分析识别出的桥接人物。
5.3 结果如何写进报告
分析做完,输出不能只是一堆表。写报告或者论文时,我的建议是按“方法描述-结果证据-理论回扣”三段走。
方法部分写清版本、置换次数、对称化处理、块模型参数。比如“本研究使用 UCINET 计算网络指标,QAP 检验采用 5000 次置换;由于研究关心关系是否存在的无向结构,原始咨询矩阵经取最大值对称化后进入结构洞分析”。这句话看起来很琐碎,但它是别人评估你结果可信度的基础。
结果部分用图支撑结构判断。一段话的典型写法是:“知识交换网络密度为 0.13,集聚系数为 0.42,显著高于同规模、同密度的随机网络模拟结果(模拟区间 0.10-0.15),表明网络存在显著的局部集聚。QAP 相关分析显示同组关系与咨询关系显著关联(r=0.36, p<0.001)。结构洞分析进一步识别出 4 个低限制度节点,其中节点 N17 的有效规模为 11.8、限制度为 0.24,在多个子群之间承担桥接功能。”
理论回扣部分是体现研究者功力的地方。结构洞指标高不高,不是只看数字,而是要回答“为什么这几个节点能成为桥,是不是因为岗位角色赋予的协调职能”。分析工具只能帮助你找到候选位置,真正的解释要靠理论框架和场景理解。这也是我一直提醒自己的:UCINET 算出来的每一个数,都是为了回答你最初写的那个问题服务的。
6. 常见问题与避坑实录
6.1 空白和 0 的语义陷阱
这是新手翻车率最高的地方。Excel 里两个节点“没有关系”,有人习惯留空,有人填 0,还有人填 NA。导入 UCINET 之后,这三种处理方式会走向完全不同的结果。留空或 NA 往往被识别成缺失值,而缺失值在 QAP、MRQAP、CONCOR 里可能导致节点被排除、矩阵不对称性异常甚至直接报错。规范做法是:无关系填 0;确实属于缺失值(比如某人不愿回答)要单独记录,并在分析前决定缺失处理方案,不要随意留空。检查这一步,花不了两分钟,但能省下后面一天的排错时间。
6.2 有向网络还是无向网络
知识交换、邮件往来这类数据天然是有向的,“A 向 B 请教”并不等于“B 向 A 请教”。但很多高级功能(如结构洞、CONCOR 的某些预设)在处理无向矩阵时语义更清晰。你需要先问自己:我研究的是“关系存在性”还是“方向性影响力”?如果答案是关系存在性,就做对称化(Data > Symmetrize),一般取最大值,意思是不管谁主动,只要有联系就算存在关系。对称化会改变密度和中心性数值,所以论文里必须写明。如果是方向性研究,保留有向矩阵,并注意 QAP 置换模式的选择要和矩阵类型匹配。最忌讳的是,数据是有向的,分析时却不检查选项,默认设成无向,自己都不知道结果已经变了样。
6.3 NetDraw 导出图的清晰度问题
很多人在 NetDraw 里画完图,直接截屏放进论文,结果一放大全是锯齿,线条糊成一团。更规范的做法是:把布局调满意后,File > Save As 选择矢量格式(如 EMF、WMF)导出;如果期刊要求位图,再转成高分辨率 PNG。另外,节点标签要适当缩小,否则密集网络中全是重重叠叠的文字。聚类图常用“按属性着色”来区分块,但颜色选择要考虑黑白打印时的可辨识度。可视化这部分没有统一标准,但有一条底线:图片里的信息要与正文分析一一对应,不要出现图中只有颜色、没有说明图例的情况。
6.4 分析和写作者的几个好习惯
最后分享几个我个人复盘这些年实践经验总结出的习惯。第一,每次跑高级功能前,把参数记下来。QAP 的置换次数、CONCOR 的切分次数、Factions 的重启次数、对称化方式,这些参数看起来琐碎,到写方法部分时一个都不能少。第二,跑 CONCOR 的同时也跑一次 Factions,两个结果互相印证,比单一算法更可靠。第三,把原始数据、转换后矩阵、属性文件和输出结果分目录存放,命名带上日期。否则过两个月你自己可能都分不清哪份是原始哪份是对称化之后的。第四,别把所有中心性指标堆在同一张表里,挑一两个与研究问题直接相关的指标深入解释,其他指标可以作为稳健性检验放在附录。这四条习惯,是我在反复重做分析、被审稿人追问参数之后慢慢养成的,希望能帮你少走一段弯路。