#本研究共纳入189名轻度脑外伤患者,分为三组:健康对照组、急性期患者组以及阈值匹配的恢复期患者组,每组各63名。研究的前期工作包括:
#通过GIFT软件对每名参与者的空间图谱进行分析,所得数据格式为:ica_sub001_component_ica_s1_.nii。
#结合肉眼观察及相关性分析,确定每个独立成分(IC)所属的脑网络。例如,IC2被归类为SMN(感觉运动网络)。
#接下来,我们将提取每名参与者的独立成分。例如,从ica_sub001_component_ica_s1_.nii中提取IC2。随后,通过单样本分析,评估三组在IC2中的差异,发现三组间确实存在显著差异。为进一步分析这些差异,我们首先制作IC2的二值化mask,之后可以进行两两组间对比。
clc; clear;
spm('Defaults', 'fMRI');
spm_jobman('initcfg');
% 需要分析的IC列表(可自行修改)
icNumbers = [2,3,4,5,6,10,11,12,16,17,18,21,22,24,27,30,31];
% 基础路径(根据实际情况修改)
baseDir = 'E:\ICA2025\ica2025-1\result1\';
#协变量所处文件夹,Age.txt、Sex.txt、Edu.txt
covDir = 'E:\ICA2025\ica2025-1\covariates2\';
#灰质mask先行准备
maskPath = 'E:\ICA2025\GM_mask.nii,1';
% 主循环:遍历每个IC
for icIdx = 1:length(icNumbers)
icNum = icNumbers(icIdx);
% ========== 1. 创建结果文件夹 ==========
resultDir = fullfile('E:\ICA2025\ica2025-1', sprintf('result3_ica_ic%d', icNum));
if ~exist(resultDir, 'dir')
mkdir(resultDir);
end
% ========== 2. 配置分析参数 ==========
matlabbatch = []; % 每次循环清空配置
% ------ 2.1 模型设置 ------
% 结果目录
matlabbatch{1}.spm.stats.factorial_design.dir = {resultDir};
% 被试扫描文件(动态生成IC编号)
scans = cell(189, 1);
for i = 1:189
subStr = sprintf('sub%03d', i);
scans{i} = fullfile(baseDir, sprintf('ica_%s_component_ica_s1_.nii,%d', subStr, icNum));
end
matlabbatch{1}.spm.stats.factorial_design.des.t1.scans = scans;
% ------ 2.2 协变量设置 ------
covNames = {'Age', 'Sex', 'Edu'};
for c = 1:3
covFile = fullfile(covDir, [covNames{c} '.txt']);
covData = load(covFile);
matlabbatch{1}.spm.stats.factorial_design.cov(c).c = covData;
matlabbatch{1}.spm.stats.factorial_design.cov(c).cname = covNames{c};
matlabbatch{1}.spm.stats.factorial_design.cov(c).iCFI = 1;
matlabbatch{1}.spm.stats.factorial_design.cov(c).iCC = 1;
end
% ------ 2.3 掩膜和全局设置 ------
matlabbatch{1}.spm.stats.factorial_design.masking.tm.tm_none = 1;
matlabbatch{1}.spm.stats.factorial_design.masking.im = 1;
matlabbatch{1}.spm.stats.factorial_design.masking.em = {maskPath};
matlabbatch{1}.spm.stats.factorial_design.globalc.g_omit = 1;
matlabbatch{1}.spm.stats.factorial_design.globalm.gmsca.gmsca_no = 1;
matlabbatch{1}.spm.stats.factorial_design.globalm.glonorm = 1;
% ========== 3. 运行分析 ==========
try
% 模型估计
matlabbatch{2}.spm.stats.fmri_est.spmmat = {fullfile(resultDir, 'SPM.mat')};
matlabbatch{2}.spm.stats.fmri_est.write_residuals = 0;
matlabbatch{2}.spm.stats.fmri_est.method.Classical = 1;
% 对比定义
matlabbatch{3}.spm.stats.con.spmmat = {fullfile(resultDir, 'SPM.mat')};
matlabbatch{3}.spm.stats.con.consess{1}.tcon.name = 'Positive Effect';
matlabbatch{3}.spm.stats.con.consess{1}.tcon.weights = [1 0 0 0];
matlabbatch{3}.spm.stats.con.consess{1}.tcon.sessrep = 'none';
matlabbatch{3}.spm.stats.con.delete = 0;
% 结果阈值化
matlabbatch{4}.spm.stats.results.spmmat = {fullfile(resultDir, 'SPM.mat')};
matlabbatch{4}.spm.stats.results.conspec.contrasts = 1;
matlabbatch{4}.spm.stats.results.conspec.threshdesc = 'FWE';
matlabbatch{4}.spm.stats.results.conspec.thresh = 0.05;
matlabbatch{4}.spm.stats.results.conspec.extent = 100;
matlabbatch{4}.spm.stats.results.units = 1;
matlabbatch{4}.spm.stats.results.print = false;
% 执行当前批处理
spm_jobman('run', matlabbatch);
fprintf('IC%d 分析成功完成\n', icNum);
catch ME
fprintf('IC%d 分析失败: %s\n', icNum, ME.message);
end
end
disp('所有IC分析完成!');
#这里最后只能分析出spmT_0001.nii
#最后一步需要你借助xjview卡阈值,FWE0.05,Voxel100,+,最后保存为IC2_mask.nii
matlab代码提取ICA分析中IC_mask.nii
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1 简介 提出了一种基于离散小波变换(DWT)和离散余弦变换(DCT) 的音频信息隐藏的新算法.首先,对载体音频信...
- 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.算法理论概述 ...
- 这是从Kindle里拷贝出来的我的剪贴文件,原来名字很长,我随便改了个名字。 这是提取出来并输出到桌面上文件里面的...