【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的学习总结

一、前言

1.学习背景

  最近在学习脑网络分析方法时,笔者偶然读到了一篇发表在Physical Review Letters上的文章,文章介绍了一种名为嵌套谱分割(Nested-Spectral Partition, NSP)的方法,用于研究大脑功能网络的分离和整合特性。

  传统的脑网络分析往往依赖于图论方法,而NSP方法提供了一个全新的视角,不仅能够揭示网络的层次化模块结构,还能定量衡量网络的整体平衡性。笔者认为这种方法很有意思~

  在这篇博客中,笔者将尝试用自己的理解,结合手上有的数据,尝试复现这种方法的实现步骤,包括如何构建功能连接网络、如何进行模块划分,以及如何计算关键网络指标。由于笔者水平有限,如有不当之处,还请各位大佬多多指教。

2.参考文献

Wang, R., Lin, P., Liu, M., Wu, Y., Zhou, T., & Zhou, C. (2019). Hierarchical Connectome Modes and Critical State Jointly Maximize Human Brain Functional Diversity. Physical Review Letters, 123(3), 038301. https://doi.org/10.1103/PhysRevLett.123.038301

Chang, Z., Wang, X., Wu, Y., Lin, P., & Wang, R. (2023). Segregation, integration and balance in resting-state brain functional networks associated with bipolar disorder symptoms. Human Brain Mapping, 44(2), 599–611. https://doi.org/10.1002/hbm.26087

3.分层嵌套谱分割(Nested Spectral Partition, NSP)模型

  这个方法就像是在玩俄罗斯套娃,通过特征值分解的方法,将复杂的大脑连接矩阵层层拆解。具体来说,NSP首先将整个大脑网络视为一个整体,然后基于功能连接矩阵进行特征分解,利用特征向量的符号特征,像剥洋葱一样逐层将网络划分为更细致的功能模块。是数据驱动的,可以稳定的自然展示组织方式。

目录

一、前言

1.学习背景

2.参考文献

3.分层嵌套谱分割(Nested Spectral Partition, NSP)模型

二、连接矩阵(C)的构建

1.功能相预处理

1.1 原文的预处理流程

1.2 DPABI预处理流程

2.脑区划分

3.功能连接矩阵计算

3.1 原文计算方法

3.2 DPABI计算方法

三、特征值的分解

1.数学原理

 V(特征向量矩阵):

 D(特征值矩阵):

V'(V的转置):

2.MATLAB实现方法

四、模块的划分与网络指标的计算

1.层级划分的方式

2.指标计算的数学原理

2.1 核心公式

2.2 整合公式

  2.3 分离公式

3.指标计算MATLAB代码实现


二、连接矩阵(C)的构建

  在进行NSP分析之前,我们首先需要构建功能连接矩阵(Functional Connectivity Matrix)。如图所示,整个构建过程可以分为三个主要步骤:首先对原始的fMRI进行预处理,包括时间层校正、头动校正等操作,得到预处理后的fMRI数据;然后基于Schaefer2018模板将大脑划分为100个感兴趣区域(ROI);最后,通过计算这100个脑区之间的时间序列皮尔逊相关性,构建出100×100的功能连接矩阵。

我理解的FC矩阵构建过程~
俺理解的FC矩阵构建过程

1.功能相预处理

1.1 原文的预处理流程

  原始研究基于AFNI和FSL软件执行了标准预处理流程。预处理步骤包括以中间层为参考的时间层校正,设置0.3mm为阈值的头动处理,采用MNI模板的空间标准化,使用6mm FWHM高斯核的空间平滑,以及0.01-0.1Hz的带通滤波,值得注意的是未进行全脑信号回归。

1.2 DPABI预处理流程

  笔者则采用DPABI软件平台实现ARFCWS预处理流程,即依次进行自动去噪(Automated denoising)、重建(Realignment)、滤波(Filtering)、协变量回归(Covariate regression)、去除波纹(Wave removal)和平滑(Smoothing)处理。

2.脑区划分

  在预处理完成后,我们需要对大脑进行功能区域划分。采用Schaefer2018模板,该模板基于Yeo等人2011年提出的7个功能网络,将大脑皮层划分为100个功能区域。

下载链接:Schaefer2018脑图谱

3.功能连接矩阵计算

3.1 原文计算方法

  首先提取每个受试者100个ROI的时间序列(每个ROI的时间序列是该区域内所有体素时间序列的平均值),然后采用Pearson相关系数计算ROI之间的功能连接强度。

3.2 DPABI计算方法

  俺直接使用DPABI提取ROI信号得到的相关矩阵计算的。

  但对于每个受试者得到的100×100初始矩阵,进行了两步关键修正:

  • 首先将矩阵对角线上的所有值统一设置为1(因为表示脑区与自身的完全相关)。
  • 其次将矩阵中所有负值改为0(由于负连接的生理意义存在争议,且为简化后续网络分析)。

这样得到的修正矩阵C = [cij]100×100既保留了重要的功能连接信息,又便于后续分析使用。

三、特征值的分解

  接下来要将功能连接矩阵C分解为C = VDV' (特征向量矩阵V和特征值矩阵D),才可以使用NSP方法划分模块层级。

1.数学原理

核心公式:C = VDV'

  接下来要把100×100功能连接矩阵C拆解成三个更简单的矩阵的乘积:

 V(特征向量矩阵):

  可以理解为"变换方向"。每一列代表一个主要的连接模式。100×100的矩阵。


 D(特征值矩阵):

可以理解为"重要程度",对角线上的数字表示每个模式的强度,其他位置都是0.,从大到小排序,越大表示该模式越重要。
 

V'(V的转置):

就是V矩阵的"镜像",确保我们可以重建回原始矩阵。

笔者理解分解过程时的可视化拆解
笔者理解分解过程时的可视化拆解

2.MATLAB实现方法

% 分析功能连接矩阵并保存特征分解结果
input_path = 'F:\HCFC';                
output_path = 'F:\HCFC\result';        

if ~exist(output_path, 'dir')
    mkdir(output_path);
end

files = dir(fullfile(input_path, '*.mat'));

for i = 1:length(files)
    current_file = files(i).name;
    file_path = fullfile(input_path, current_file);
    data = load(file_path);
    
    if isfield(data, 'FC')
        FC_matrix = data.FC;
    else
        fields = fieldnames(data);
        if ~isempty(fields)
            FC_matrix = data.(fields{1});
        else
            continue;
        end
    end
    
    [evals, evecs, proc_FC] = analyze_FC_matrix(FC_matrix);
    
    results = struct();
    results.eigenvalues = evals;        
    results.eigenvectors = evecs;       
    results.processed_FC = proc_FC;     
    results.original_filename = current_file;  
    
    [~, name, ~] = fileparts(current_file);
    output_filename = fullfile(output_path, [name '_results.mat']);
    save(output_filename, '-struct', 'results');
end

四、模块的划分与网络指标的计算

1.层级划分的方式

  NSP方法的层级划分遵循一个从整体到局部、逐步细化的过程:

  在第一个模式中,根据Perron–Frobenius定理,所有脑区在特征向量中具有相同的符号,此时将整个脑网络视为单一模块,这构成了第一层级。

  进入第二个模式时,根据特征向量的正负号将脑区分为两个模块,特征向量为正的脑区组成一个模块,为负的脑区组成另一个模块,形成第二层级的两模块结构。

  随后在第三个模式中,基于该模式下特征向量的正负号,将第二层级中的每个模块进一步划分为两个子模块。这个递归划分过程持续进行,直到达到预设层级或每个模块仅包含单个脑区为止。

笔者划分四个层级的示意图

2.全局指标计算的数学原理

2.1 核心公式

  核心公式Hi了反映了网络第i层级的组织特征。

  其中Λi2表示特征模式的强度,Mi表示模块数量,(1-pi)是模块大小分布的均匀度惩罚项,N作为归一化因子确保不同网络间的可比性。

  这个公式通过综合考虑模块结构的强度、复杂度和均匀性,提供了对网络层级特征的量化评估

2.2 整合公式

  选取第一层级(H1)作为整合度的衡量标准。这是因为在第一层级中,所有脑区被视为单一模块,特征向量的符号都相同,反映了整个网络的全局连通性。

  2.3 分离公式

  

  从第二层级开始累加所有层级的网络特征值,并进行归一化。

3.指标计算MATLAB代码实现

function [Hi, Mi, pi_values] = calculate_hierarchical_metrics(eigenvectors, eigenvalues, N)
Hi = zeros(N, 1);
Mi = zeros(N, 1); 
pi_values = zeros(N, 1);

Mi(1) = 1;
pi_values(1) = 0;
modules = cell(N, 1);
modules{1} = ones(N, 1);
Hi(1) = (eigenvalues(1)^2 * Mi(1) * (1-pi_values(1)))/N;

for level = 2:N
    current_modules = modules{level-1};
    new_modules = current_modules;
    current_vec = eigenvectors(:, level);
    unique_mods = unique(current_modules);
    next_module_id = max(unique_mods);
    
    for m = 1:length(unique_mods)
        module_mask = current_modules == unique_mods(m);
        module_nodes = find(module_mask);
        
        if length(module_nodes) > 1
            module_vec = current_vec(module_nodes);
            pos_nodes = module_vec > 0;
            
            if any(pos_nodes) && any(~pos_nodes)
                next_module_id = next_module_id + 1;
                new_modules(module_nodes(pos_nodes)) = next_module_id;
            end
        end
    end
    
    modules{level} = new_modules;
    Mi(level) = length(unique(new_modules));
    
    module_sizes = zeros(Mi(level), 1);
    unique_mods = unique(new_modules);
    for m = 1:Mi(level)
        module_sizes(m) = sum(new_modules == unique_mods(m));
    end
    
    ideal_size = N/Mi(level);
    pi_values(level) = sum(abs(module_sizes - ideal_size))/N;
    Hi(level) = (eigenvalues(level)^2 * Mi(level) * (1-pi_values(level)))/N;
end
end
% 计算所有被试的全局指标并保存结果
folder_path = 'F:\HCFC\result';
files = dir(fullfile(folder_path, '*.mat'));
n_files = length(files);

results = struct();
results.filenames = cell(n_files, 1);
results.Hin = zeros(n_files, 1);
results.Hse = zeros(n_files, 1);
results.HB = zeros(n_files, 1);

for i = 1:n_files
    current_file = files(i).name;
    data = load(fullfile(folder_path, current_file));
    
    if isfield(data, 'eigenvalues') && isfield(data, 'eigenvectors')
        eigenvalues = data.eigenvalues;
        eigenvectors = data.eigenvectors;
        
        N = size(eigenvectors, 1);
        [Hi, ~, ~] = calculate_hierarchical_metrics(eigenvectors, eigenvalues, N);
        
        Hin = Hi(1)/N;
        Hse = sum(Hi(2:end))/N;
        HB = Hin - Hse;
        
        results.filenames{i} = current_file;
        results.Hin(i) = Hin;
        results.Hse(i) = Hse;
        results.HB(i) = HB;
    end
end

T = table(results.filenames, results.Hin, results.Hse, results.HB, ...
    'VariableNames', {'Filename', 'Integration', 'Segregation', 'Balance'});
writetable(T, fullfile(folder_path, 'global_metrics.csv'));
save(fullfile(folder_path, 'global_metrics.mat'), 'results');

总结

  需要说明的是,本文仅是笔者对NSP方法的初步尝试,主要聚焦于功能连接网络的分析。原文中还包含了结构连接网络的分析,以及功能-结构整合的深入探讨,这些都为理解大脑的组织原理提供了更全面的视角。感兴趣的小伙伴强烈建议去阅读原文~

  笔者也准备明天有时间再尝试计算一下局部指标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何优雅处理异常?处理异常的原则

前言 在我们日常工作中,经常会遇到一些异常,比如:NullPointerException、NumberFormatException、ClassCastException等等。 那么问题来了,我们该如何处理异常,让代码变得更优雅呢? 1 不要忽略异常 不知…

海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践

文章目录 一.迁移背景二.迁移分析三.方案制定3.1 使用工具迁移3.2 脚本迁移 四.方案建议 一.迁移背景 目前有两个es集群,版本为5.2.2和7.16.0,总数据量为700T。迁移过程需要不停服务迁移&#…

macOS开发环境配置与应用开发(详细讲解)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 macOS作为Apple公司推出的桌面操作系统,以其稳定性、优雅的用户界面和强大的开发工具吸引了大量开发者。对于…

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 文章目录 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和…

前端学习之ES6+

1.ES6是什么 ES6,全称是ECMAScript 6,是JavaScript语言的下一代标准,由ECMA国际组织在2015年6月正式发布。ES6也被称作ECMAScript 2015,从这个版本开始,ECMA组织决定每年发布一个新的ECMAScript版本,以使J…

查缺补漏----用户上网过程(HTTP,DNS与ARP)

(1)HTTP 来自湖科大计算机网络微课堂: ① HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引…

【广西】《广西壮族自治区本级政务信息化建设和运维项目预算支出标准》(桂财建〔2023〕102号)-省市费用标准解读系列09

《广西壮族自治区本级政务信息化建设和运维项目预算支出标准》(桂财建〔2023〕102号)是广西壮族自治区财政厅于2023年9月26日发布的费用标准(了解更多可直接关注我们咨询)。我司基于专业第三方信息化项目造价机构角度,…

Linux基础-常用操作命令详讲

Linux基础-常用操作命令详讲 一、openssl加密简单介绍 1. 生成加密的密码散列(password hash)​编辑 1.1 常见的选项总结表 1.2 加密参数详解 2. 自签名证书 3. 证书转换 二、文件管理 1. 创建空文件 ​编辑 2. 删除文件 4. 新建目录 ​编辑…

ALB搭建

ALB: 多级分发、消除单点故障提升应用系统的可用性(健康检查)。 海量微服务间的高效API通信。 自带DDoS防护,集成Web应用防火墙 配置: 1.创建ECS实例 2.搭建应用 此处安装的LNMP 3.创建应用型负载均衡ALB实例 需要创建服务关联角…

C语言笔记(字符串函数,字符函数,内存函数)

目录 前言 1.字符串函数 1.1.strlen 1.2.strcpy 1.3.strcat 1.4.strcmp 1.5.strncpy 1.6.strncat 1.7.strncmp 1.8.strstr 1.9.strtok 1.10.strerror 2.字符函数 2.1字符分类函数 2.2字符转换函数 3.内存函数 3.1.mencpy 3.2.memmove 3.3.memcmp 前言 本文重…

HCIP-HarmonyOS Application Developer V1.0 笔记(五)

弹窗功能 prompt模块来调用系统弹窗API进行弹窗制作。 当前支持3种弹窗API,分别为: 文本弹窗,prompt.showToast;对话框,prompt.showDialog;操作菜单,prompt.showActionMenu。 要使用弹窗功能&…

Linux相关概念和易错知识点(20)(dentry、分区、挂载)

目录 1.dentry (1)路径缓存的原因 (2)dentry的结构 ①多叉树结构 ②file和dentry之间的联系 ③路径概念存在的意义 2.分区 (1)为什么要确认分区 (2)挂载 ①进入分区 ②被挂…

Redis 缓存击穿

目录 缓存击穿 什么是缓存击穿? 有哪些解决办法? 缓存穿透和缓存击穿有什么区别? 缓存雪崩 什么是缓存雪崩? 有哪些解决办法? 缓存预热如何实现? 缓存雪崩和缓存击穿有什么区别? 如何保…

电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…

澳鹏通过高质量数据支持 Onfido 优化AI反欺诈功能

“Appen 在 Onfido 的发展中发挥了至关重要的作用,并已成为我们运营的重要组成部分。我们很高兴在 Appen 找到了可靠的合作伙伴。” – Onfido 数据和分析总监 Francois Jehl 简介:利用人工智能和机器学习增强欺诈检测 在当今日益数字化的世界&#xff…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块,适用于执行简单的命令,不支持特殊符号 案列01,批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案

人工智能(AI)和机器学习(ML)技术正在快速发展,逐渐应用到全球各类主流系统、设备及关键应用场景中,尤其是在政府、商业和工业组织不断加深互联的情况下,AI和ML技术的影响日益广泛。虽然AI技术的…

实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新

pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…

布谷直播源码部署服务器关于数据库配置的详细说明

布谷直播源码搭建部署配置接口数据库 /public/db.php&#xff08;2019年8月后的系统在该路径下配置数据库&#xff0c;老版本继续走下面的操作&#xff09; 在项目代码中执行命令安装依赖库&#xff08;⚠️注意&#xff1a;如果已经有了vendor内的依赖文件的就不用执行了&am…

【C++】STL— stack的常见用法和模拟实现

目录 1、stack的介绍 2、stack的使用 构造一个空栈 stack的简单接口应用 3、stack的模拟实现 4、栈的相关题目 4.1 最小栈 4.1.2思路 4.1.3 实现代码 4.2 栈的压入、弹出序列 4.2.2 思路 4.2.3程序实现 1、stack的介绍 在C中&#xff0c;stack是一种标准模板库&am…