原文链接:http://tecdat.cn/?p=24613
咱们在心理学网络论文中看到的一个问题是,作者有时会对其数据的可视化进行适度解释。这尤其波及到图形的布局和节点的地位,例如:网络中的节点是否汇集在某些社区。
上面我将具体探讨这个问题,并提供一个对于如何辨认网络中我的项目社群的根本 R 教程。十分欢送在上面的评论局部提出反馈。
节点部署和 Fruchterman-Reingold 算法
咱们创立一个例子。首先,咱们拿一些数据,预计一个正则化的偏相关网络,其中节点之间的边相似于偏相关,并应用 ’spring’ 命令绘制网络。这是心理学网络文献中默认的,应用 Fruchterman-Reingold 算法为图中的节点创立一个布局:具备最多连贯 / 最高连接数的节点被放在图的核心。
cort<- cor(data)
graph(cort,layout="spring")
matrix
是这 20 个我的项目的相关矩阵,Size
命令通知咱们有多少人。
这是后果图:
然而,这里的节点部署只是许多同样 “ 正确 “ 的节点部署形式中的一种。当网络中只有 1 - 3 个节点时,算法将总是以同样的形式部署它们(其中节点之间的边的长度代表它们之间的关系有多强),算法惟一的自由度是图形的旋转。然而,特地是在有许多节点的图中,部署形式只通知咱们一个十分粗略的后果,不应该被适度解释。
以下是绘制咱们上述网络的另外两种办法,它们同样 “ 正确 ”。
nNd <- 20
set.seed(1)
grh2<-grph
set.seed(2)
gr3<-grph
尽管我的项目之间的边显然是雷同的,但节点的地位却有很大的不同。
欧洲神经精力药理学例子
《欧洲神经精力药理学》(European Neuropsychopharmacology)上 Madhoo & Levine 的一篇新论文为这个问题提供了一个很好的例子。他们在两个工夫点(相隔 12 周)考察了约 2500 名被诊断为重度抑郁症的精神科门诊病人的 14 种抑郁症状的网络结构。这篇论文的一个十分不错的奉献是,他们钻研了网络结构随工夫的变动,其形式与咱们以前在同一数据集中的钻研有些不同。
与下面的网络例子相似,他们应用正则化的偏相关网络来预计两个工夫点的横截面网络模型,并应用 Fruchterman-Reingold 算法绘制网络。他们通过目测得出结论,有 4 个症状群存在,而且这些症状群没有随工夫变动。
“ 在基线时,网络由四个症状群组成(图 1a),即:。睡眠阻碍(我的项目 1 -5),认知和物理动机缺损(我的项目 6 -9),情感(我的项目 10-12)和食欲(我的项目(13-14)。
[…]起点症状分组(图 1b)与基线时类似 ”。
但这些发现和论断仅仅是基于对后果图的视觉查看 – 而咱们在下面曾经理解到,对这些图的解释应该十分审慎。值得注意的是,这种视觉上的适度解读在心理学网络文献中相当常见。
让人眼前一亮的另一个起因是,咱们在最近的一篇论文中剖析了同一数据集的社群构造,发现社群的数量随工夫而变动 – 这与作者对图表的视觉解释相冲突。
R 中的数据驱动的社群聚类
那么,如何在 R 中做到这一点?有许多可能性,我介绍三种:一种来自潜变量建模畛域的十分成熟的办法(特征值合成);一种来自网络迷信的成熟算法(spinglass 算法);以及一种正在开发中的十分新的工具(应用 walktrap 算法的探索性图剖析)。
特征值合成
传统上,咱们想用潜变量框架来形容上述 20 个我的项目,问题是:咱们须要多少个潜变量来解释这 20 个我的项目之间的协方差?一个非常简单的办法是查看数据中各成分的特征值。
plot(eigen)
abline(h=1)
这向咱们显示了 Y 轴上每个成分的每个特征值;X 轴显示了不同的成分。一个高的特征值意味着它能解释我的项目之间的大量协方差。红线形容了所谓的规范:一个简略的规定,决定咱们须要多少个成分来充沛形容我的项目之间的协方差(每个成分的特征值 >1)。无论如何,依据咱们当初应用的规定,咱们可能会决定提取 2 - 5 个成分。咱们还不晓得哪个我的项目属于哪个成分 – 为此,咱们须要运行,例如,探索性因子分析(EFA),看看因子载荷。
为什么这与网络无关呢?许多论文当初曾经表明,潜变量模型和网络模型在数学上是等价的,这意味着在大多数状况下,撑持数据的因素的数量将转化为你在网络中能够找到的社区的数量。
Spinglass 算法
第二种办法是所谓的 spinglass 算法,该算法在网络迷信中曾经十分成熟。为此,咱们将下面预计的网络输出到 R 中。最相干的局部是最初一行 membership。
spinglascmy(g)
mershp
在咱们的例子中,spinglass 算法检测到了 5 个社区,这个向量代表了这 20 个节点属于哪个社区(例如,节点 1 - 7 属于社区 5)。而后,咱们能够很容易地在 qgraph 中绘制这些社区,例如,对节点进行相应的着色。请留神,iqgraph 是一个十分通用的软件包,除了 spinglass 算法之外,它还有许多其余检测社区的可能性,比方 walktrap 算法。(感激 Alex Millner 对 igraph 的投入;当然,这里所有的谬误都是我的谬误)。
值得注意的是,spinglass 算法每次运行都会导致不同的后果。这意味着你应该在运行 spinglass.community 之前通过 set.seed()设置一个种子,而不是像我下面那样。我运行该算法 1000 次,看看失去的聚类数量的中位数,而后找到一个能重现这个聚类数量中位数的种子。我在一篇论文中应用了这个解决方案(留神,应用不同的种子,解决方案看起来是不同的)。
同样要害的是,要晓得有许多种不同的办法来做社群检测。Spinglass 有些简单化,因为它只容许我的项目成为一个社区的一部分 – 但可能我的项目被形容为同时属于几个社区更好。Barabási 的书 “ 网络迷信 “ 中有一个对于社区检测的宽泛章节。Spinglass 只是泛滥机会中的一个。正如我下面提到的:例如 walktrap,也是罕用的,而且更稳固。
探索性图剖析
第三种办法是通过探索性图表剖析。从你的数据中从新预计了一个正则化的局部相干网络,与咱们下面所做的相似,而后应用 walktrap 算法来寻找网络中的我的项目社群。在应用 walktrap 算法的状况下,这应该会失去与 igraph 雷同的后果(并且细节设置雷同,比方步骤数)。
长处是 – 与特征值合成不同 – 它间接显示哪些项目属于哪些社群。
walktrap(da, plt= TRUE)
如果这个办法被证实是无效的,它非常容易应用,并主动显示你的我的项目属于哪个社区。
请留神,目前,探索性图剖析采取你的数据并主动预计一个高斯图形模型(假如是多变量的失常变量)。
spinglass 算法和 walktrap 算法后果是一样的吗?
当初,咱们想检查一下咱们的后果的稳健性:spinglass 算法和应用 walktrap 算法在社区检测方面是否统一?
这很容易做到:让咱们把这两个网络画在一起,并对社区进行相应的着色。首先,咱们依据后果来定义社群,而后用下面第一个网络的布局来绘制网络。
walktrap(coate tile="walktap")
spinglass(coratix, tite="spinglass")
直觉上 – 基于视觉查看 –walktrap 的解决方案仿佛更有意义,其中节点 8 属于蓝色社区而不是紫色社区。然而,同样,这只是简单关系的图形显示,咱们在这里必须审慎解释。
因而,让咱们用一个略微不同的布局来绘制同一个网络。
walktrap(layou = list(int = atinomNe2,no,2)))
spinglass(cori, layo.pr = list(iit=matrxnrm(Nd2)nde2
正如你当初看到的,在这个可视化中,不分明节点 8 应该属于蓝色还是红色社区,咱们没有明确的直观偏好。
论断
如果你对网络中的我的项目之间的统计社区感兴趣,不要只在视觉上查看你的图。当我为论文做这件事时,我应用下面形容的三种办法,通常它们的后果相当类似。显然,你也可能对实践或概念更感兴趣。在这种状况下,你可能基本不须要看你的数据,不须要经验上述所有的麻烦。
请留神,上述 spinglass 或 walktrap 等社群检测办法的最大局限是,我的项目确定地只属于一个社群。对于心理学数据来说,拟合因子模型常常会发现有穿插负荷的我的项目,这是一个问题。而你能够通过模仿一个 2 因子模型看到,其中 1 个我的项目在两个因子上都有同样的载荷。心愿咱们很快就能在 R 中实现容许我的项目同时属于多个社区的算法(Barabási 在他的《网络迷信》一书第 9 章中形容了几个。
最受欢迎的见解
1. 采纳 spss-modeler 的 web 简单网络对所有腧穴进行剖析
2. 用 R 语言和 python 进行社交网络中的社区检测
3.R 语言文本开掘 NASA 数据网络剖析,tf-idf 和主题建模
4. 在 R 语言中应用航空公司简单网络对疫情进行建模
5.python 附属关系图模型 基于模型的网络中密集重叠社区检测
6. 应用 Python 和 SAS Viya 剖析社交网络
7. 关联网络分析:已迁离北京外来人口的数据画像
8.情感语义网络 : 游记数据感知游览目的地形象
9. 用关联规定数据挖掘摸索药物配伍中的法则