社区检测中的Overlapping symptoms——基于Clique Percolation算法

文摘   2024-10-30 07:51   北京  


PSYCH统计实验室


01 引言

在心理网络中,重叠症状是指某一症状同时隶属于多个不同的社区。例如,创伤后应激障碍的某些症状会出现在抑郁障碍中,这些症状既属于创伤后应激障碍也属于抑郁障碍。这种重叠症状在解释精神障碍共病现象具有重要作用。例如,重度抑郁障碍与广泛性焦虑障碍的共病部分源于它们共享的重叠症状——这些症状通过连接不同的障碍,从而导致共病。

Clique Percolation 算法允许节点同时隶属于多个社区,已应用于心理病理学研究中。该算法通过识别 k-cliques并将相邻的 k-cliques(即共享 k-1 个节点的 k-cliques)归入同一社区来实现社区检测。在加权网络中,k-cliques的强度还必须超过阈值 I,否则不能构成社区。对于大型网络,通过比率检验来确定最佳的 k 和 I;对于小型网络,使用 χ 指标,对于超小的网络,则依靠entropy来确定最佳参数。


02 代码实操 


接下来我们通过代码实操来识别重叠症状并绘制重叠症状的网络结构图。

# 清除工作空间

rm(list = ls())

# 加载R包

library(readxl)

library(bootnet)

library(qgraph)

library(CliquePercolation)

# 设置工作路径

setwd('')

# 加载数据

load('data2.Rdata')

# 估计网络模型

item_network <- estimateNetwork(data2,default = 'EBICglasso')

plot(item_network) 

在基础的网络模型基础上,通过CP算法进行社区检测并识别重叠节点。

# 首先通过cpThreshold函数在加权网络中确定最优的 k 值和强度阈值 I,以找到最佳社区划分结构。

thresholdnew <- cpThreshold(item_network, 

                            method="weighted.CFinder", 

                            k.range = c(3:8),

                            I.range = c(seq(max(abs(network)), 0.01, by = -0.001)),

                            threshold = c("largest.components.ratio","chi","entropy","fuzzymod"))

thresholdnew                                                     

03 选择最优 k 值和强度阈值 I 的方法 

为了选择最合适的 k 值和强度阈值 I,我们将根据以下两个关键指标进行分析:

1.比率(largest.components.ratio):逐步调整强度阈值 I,观察比率何时出现明显跃升。一般情况下,比率值首次越过2的点可以被视为渗流转变(percolation transition)的关键位置。

2.χ值:在比率首次越过2的点附近,关注该点的χ值。理想情况下,这一位置的χ值应较高,以确保该阈值有较好的分辨力。

选择步骤

1.逐步调节 I 值:

逐步降低 I,直到比率接近或首次越过2的位置,并观察比率是否出现显著的变化。

记录 I 在比率首次越过2时的值及其对应的χ值。如果此时的χ值较高,则该点可以作为候选的最优阈值 I。

2.检查社区和孤立节点数量:

在不同 k 和 I 值下,查看生成的社区数量以及孤立节点的数量。一般来说,如果 k 值设置过高,会产生较多孤立的节点。

3.最终选择:

优先选择在比率首次跳过2且对应较高χ值的 I 值作为最优阈值。

如果某个 k 值导致孤立节点数量过多且难以形成单一社区,说明该 k 值可能设置得过高。此时可以选择较低的 k 值。

# 选定的 k 和 I 作为参数传入,以生成最优的社区结构

clique <- cpAlgorithm(item_network, 

                      k=3, 

                      method="weighted.CFinder",

                      I=0.0877397)



# 绘制重叠节点的网络结构图

CliquePercolation::cpColoredGraph(network, list.of.communities = clique$list.of.communities.numbers, 

                                  cut=0, theme="colorblind", larger.six = TRUE, 

                                  vsize=5, esize=10, legend=FALSE,label.cex=1.0,

                                  layout="spring", labels=colnames(network))     

此外,也有研究者认为依据比率和χ值选择最优网络的方式可能存在缺陷,因为这是方式是通过观察网络中最大的两个社区的节点数量比值来选择参数。这种方法可能会忽略其他较小的社区,并对社区的真实结构产生偏差。

因此,后续的研究者提出使用entropy或modularity等指标来选择最优的K和I值。以下的代码可以获取entropy和modularity。一般而言,这些指标的值越大越好,因此再最终选择模型的时候,我们可以兼顾多个指标以期获得真实的网络结构。

# 根据fuzzy modularity 选择最优的k和I 

fuzmod <- FuzzyMod(graph=network, 

                   membership=clique$list.of.communities.labels, 

                   abs=TRUE) 

fuzmodsigned <- SignedFuzzyMod(netinput=network, 

                               membassigned=clique$list.of.communities.labels)

# 根据entropy选择最优的k和I                                

set.seed(1337)

permute <- cpPermuteEntropy(W, cpThreshold.object = thresholds2,

                            n = 100, interval = 0.95)

permute$Confidence.Interval     # CI values of entropy

permute$Extracted.Rows          # relevant final solutions (everybody else deleted automatically)                               

参考文献

Blanken TF, Deserno MK, Dalege J, Borsboom D, Blanken P, Kerkhof GA, Cramer AOJ. The role of stabilizing and communicating symptoms given overlapping communities in psychopathology networks. Sci Rep. 2018 Apr 11;8(1):5854. doi: 10.1038/s41598-018-24224-2. PMID: 29643399; PMCID: PMC5895626.

04 后记 


尽管Clique Percolation算法已经初步应用心理病理学的研究中,但也有研究者对该算法提出质疑,并提出了其他重叠节点的检验方式。如果大家对此部分感兴趣,我们会进一步挖掘相关文献。今天的内容就到这里了,我们下期再见!


PSYCH统计实验室

通知公告

网络分析课程目前开放视频课啦

单次课200元/讲(学生),250元/讲(非学生)

共有四讲内容:

①横断面网络分析简介与基础

②网络分析与因子分析

③交叉滞后网络分析

④时间序列网络分析

购买后开放视频权限14天,可多次申请。

并赠送所有课程相关资料(无PPT)

如果想申请购买,请联系M18812507626


更多资讯

关注我们

文稿:Ns

排版:Little Star

责编:Wink
审核:摘星

本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。


Psych统计自习室
大家好,我们是由来自北京师范大学,西南大学,天津医科大学等高校在读硕士、博士研究生组成的一个科研团队——Psych统计自习室。Psych统计自习室旨在关注心理学、精神病学领域的最前沿的系列研究,并做前沿统计知识的分享。
 最新文章