R语言社区发现算法检测心理学复杂网络:spinglass、探索性图分析walktrap算法与可视化

简介: R语言社区发现算法检测心理学复杂网络:spinglass、探索性图分析walktrap算法与可视化

原文链接:http://tecdat.cn/?p=24613


我们在心理学网络论文中看到的一个问题是,作者有时会对其数据的可视化进行过度解释。这尤其涉及到图形的布局和节点的位置,例如:网络中的节点是否聚集在某些社区。

下面我将详细讨论这个问题,并提供一个关于如何识别网络中项目社群的基本R教程。非常欢迎在下面的评论部分提出反馈。


节点部署和 Fruchterman-Reingold 算法


我们创建一个例子。首先,我们拿一些数据,估计一个正则化的偏相关网络,其中节点之间的边类似于偏相关,并使用'spring'命令绘制网络。这是心理学网络文献中默认的,使用Fruchterman-Reingold算法为图中的节点创建一个布局:具有最多连接/最高连接数的节点被放在图的中心。

cort<- cor(data)
 
graph(cort,layout="spring")

matrix 是这 20 个项目的相关矩阵, Size 命令告诉我们有多少人。

这是结果图:

然而,这里的节点部署只是许多同样 "正确 "的节点部署方式中的一种。当网络中只有1-3个节点时,算法将总是以同样的方式部署它们(其中节点之间的边的长度代表它们之间的关系有多强),算法唯一的自由度是图形的旋转。但是,特别是在有许多节点的图中,部署方式只告诉我们一个非常粗略的结果,不应该被过度解释。


点击标题查阅往期内容


R语言复杂网络分析:聚类(社区检测)和可视化


01

02

03

04


以下是绘制我们上述网络的另外两种方法,它们同样 "正确"。

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章中描述了几个。

相关文章
|
2月前
|
监控 安全 算法
137_安全强化:输入过滤与水印 - 实现输出水印的检测算法与LLM安全防护最佳实践
随着大语言模型(LLM)在各行业的广泛应用,安全问题日益凸显。从提示注入攻击到恶意输出生成,从知识产权保护到内容溯源,LLM安全已成为部署和应用过程中不可忽视的关键环节。在2025年的LLM技术生态中,输入过滤和输出水印已成为两大核心安全技术,它们共同构建了LLM服务的安全防护体系。
|
3月前
|
机器学习/深度学习 自然语言处理 算法
小红书:通过商品标签API自动生成内容标签,优化社区推荐算法
小红书通过商品标签API自动生成内容标签,提升推荐系统精准度与用户体验。流程包括API集成、标签生成算法与推荐优化,实现高效率、智能化内容匹配,助力社交电商发展。
206 0
|
3月前
|
传感器 资源调度 算法
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
本文提出一种多子带相干累积(MSCA)算法,通过引入空带和子带相干处理,解决DDMA-MIMO雷达的多普勒模糊与能量分散问题。该方法在低信噪比下显著提升检测性能,实测验证可有效恢复目标速度,适用于车载雷达高精度感知。
544 4
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
6月前
|
机器学习/深度学习 运维 监控
实时异常检测实战:Flink+PAI 算法模型服务化架构设计
本文深入探讨了基于 Apache Flink 与阿里云 PAI 构建的实时异常检测系统。内容涵盖技术演进、架构设计、核心模块实现及金融、工业等多领域实战案例,解析流处理、模型服务化、状态管理等关键技术,并提供性能优化与高可用方案,助力企业打造高效智能的实时异常检测平台。
504 1
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
303 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
5月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
176 0
|
6月前
|
机器学习/深度学习 监控 算法
面向办公室屏幕监控系统的改进型四叉树屏幕变化检测算法研究
本文提出一种改进型四叉树数据结构模型,用于优化办公室屏幕监控系统。通过动态阈值调节、变化优先级索引及增量更新策略,显著降低计算复杂度并提升实时响应能力。实验表明,该算法在典型企业环境中将屏幕变化检测效率提升40%以上,同时减少资源消耗。其应用场景涵盖安全审计、工作效能分析及远程协作优化等,未来可结合深度学习实现更智能化的功能。
127 0
|
9月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
9月前
|
机器学习/深度学习 数据采集 算法
基于yolov2和googlenet网络的疲劳驾驶检测算法matlab仿真
本内容展示了基于深度学习的疲劳驾驶检测算法,包括算法运行效果预览(无水印)、Matlab 2022a 软件版本说明、部分核心程序(完整版含中文注释与操作视频)。理论部分详细阐述了疲劳检测原理,通过对比疲劳与正常状态下的特征差异,结合深度学习模型提取驾驶员面部特征变化。具体流程包括数据收集、预处理、模型训练与评估,使用数学公式描述损失函数和推理过程。课题基于 YOLOv2 和 GoogleNet,先用 YOLOv2 定位驾驶员面部区域,再由 GoogleNet 分析特征判断疲劳状态,提供高准确率与鲁棒性的检测方法。

热门文章

最新文章